/** * This file was auto-generated by openapi-typescript. * Do not make direct changes to the file. */ export interface paths { "/v1/auth/token": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Login with email and password */ post: operations["login"]; /** Revoke current token */ delete: operations["revokeToken"]; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/agent-token": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Exchange agent credentials for JWT * @description Returns a short-lived EdDSA-signed JWT (`access_token`). Standard claims include `sub` * (`agent:`), `org`, `scopes`, `vault_ids`, optional `intents_api_enabled`, optional * `shroud_enabled`, optional `llm_token_billing` / `stripe_customer_id` when org LLM billing is on. * * When **`shroud_enabled`** is true, the JWT payload may include **`shroud_config`**: a JSON object * mirroring the agent row in Vault (same shape as `ShroudConfig` on `GET /v1/agents/{id}`). * **Shroud** (TEE proxy) decodes this on each LLM request and runs **PolicyEngine** after the * global inspection pipeline so per-agent limits and threat **block** actions apply without a * separate policy fetch. Re-exchange the agent token after changing `shroud_config` so the JWT * is fresh. * * User JWTs from password, API key, or device flow do **not** include `shroud_config`. * * **Router keys.** An `sk-shroud-v1-…` key (minted at * `POST /v1/agents/{agent_id}/router-keys`) is exchanged key-only — send `api_key` * alone, no `agent_id`. The token carries a `router_key` claim * (`{id, max_concurrent_streams?, spend_cap_micro_usd?}`), lives at most **60 s** * (revocation SLA), and is only issued for Shroud-enabled agents. Revoked keys get 401. */ post: operations["agentToken"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/api-key-token": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Exchange user API key for JWT */ post: operations["apiKeyToken"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/refresh": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Refresh an expiring JWT */ post: operations["refreshToken"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/jwt-public-key": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Get JWT verification public key * @description Returns the Ed25519 public key used to sign JWTs. * Use this to verify tokens independently (e.g. in a TEE proxy or * gateway). No authentication required. * * For OIDC-compliant relying parties (Anthropic Workload Identity * Federation, etc.) prefer the JWKS endpoint at * `/.well-known/jwks.json` together with the discovery document * at `/.well-known/openid-configuration` — those advertise both * Ed25519 and RS256 keys keyed by `kid` and survive key rotation. */ get: operations["getJwtPublicKey"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/federated-token": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Exchange a 1claw token for an OIDC federation token (RFC 8693) * @description Mints a short-lived RS256-signed JWT targeted at an external * relying party (e.g. Anthropic Workload Identity Federation). * The relying party validates the token via this issuer's JWKS * URL (`/.well-known/jwks.json`) and exchanges it for its own * short-lived service credentials. * * Requirements: * - The agent that owns the `subject_token` must have * `federation_enabled = true` and the requested `audience` * must appear in `federation_audiences`. * - The `subject_token` must be a valid 1claw agent JWT or * `ocv_` API key. * - Optional `scope` narrows the agent's existing scopes — it * cannot escalate. * * Returns 503 when `ONECLAW_JWT_RS256_SIGNING_KEY_ID` is not * configured on the server. */ post: operations["exchangeFederatedToken"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/.well-known/openid-configuration": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * OIDC discovery document * @description Standard OpenID Connect discovery document advertising the * issuer URL, JWKS URL, supported algorithms (`EdDSA`, `RS256`), * and the RFC 8693 token-exchange endpoint. External IdPs * (Anthropic WIF, Okta, Auth0, etc.) read this URL to learn * where 1claw publishes its JWKS. */ get: operations["openidConfiguration"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/.well-known/jwks.json": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * JSON Web Key Set * @description Public keys for every active version of every JWT signing * key (Ed25519 + RSA-2048). Each entry includes a `kid` so * consumers can validate tokens issued before the most recent * key rotation. Cached for 5 minutes via `Cache-Control` and * CORS-permissive for browser-based IdP consoles. */ get: operations["jwks"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/signup": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Create a new account */ post: operations["signup"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/verify-email": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Verify email address */ post: operations["verifyEmail"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/forgot-password": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Request password reset email * @description Always returns the same message whether or not the email exists (no account enumeration). * Only password-based accounts receive mail. */ post: operations["forgotPassword"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/reset-password": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Set a new password using reset token from email */ post: operations["resetPassword"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/google": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Authenticate with Google OAuth */ post: operations["googleAuth"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/change-password": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Change current user's password */ post: operations["changePassword"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/set-password": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Set initial password for platform users * @description Only allowed when the user has no password set (platform_oidc users after claiming). */ post: operations["setPassword"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/change-email": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Request email change * @description Sends a 6-digit verification code to the new email address. Code expires in 10 minutes. */ post: operations["changeEmail"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/verify-email-change": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Verify email change with code */ post: operations["verifyEmailChange"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/passkeys/register/begin": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Begin passkey registration * @description Returns a WebAuthn challenge for creating a new passkey credential. */ post: operations["passkeyRegisterBegin"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/passkeys/register/complete": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Complete passkey registration * @description When the account already has a password, passkey, or TOTP, * `X-Auth-Confirm` is required (purpose `security.passkey.register`). */ post: operations["passkeyRegisterComplete"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/passkeys/assert/begin": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Begin passkey authentication */ post: operations["passkeyAssertBegin"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/passkeys/assert/complete": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Complete passkey authentication */ post: operations["passkeyAssertComplete"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/passkeys": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** List registered passkeys */ get: operations["listPasskeys"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/passkeys/{passkey_id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; post?: never; /** * Delete a passkey * @description Removes a registered passkey. Requires recent re-authentication * (`X-Auth-Confirm` with a `rat_` token from `POST /v1/auth/reauth` * using purpose `security.passkey.delete`). Passkey or TOTP is * required when either is enrolled. Deleting the last passkey is * refused while vault passkey unlock is enabled. */ delete: operations["deletePasskey"]; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/approvals/request": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Request human approval (agent-only) * @description Ask a human to approve an action. * * Two families of action are accepted: * * * the control-plane requests `access_request`, `policy_request` * and `binding_request`, which widen the agent's own authority; and * * business actions named `namespace.verb` (`refund.create`, * `social.post`), whose meaning is carried by `summary` and `payload`. * * Actions that 1Claw itself executes on approval — `policy_change`, * `card_order`, `agent_transaction`, `agent_execution`, * `agent_sign_intent` — are created by the platform and rejected here, * because the summary a human reads would be agent-supplied while the * side effect would not be. */ post: operations["requestApproval"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/feature-quota/consume": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Count one call against a per-user feature quota * @description Atomic fixed-window counter for metered dashboard features (currently * `voice_brief`, 30 calls per hour). The limit and window are defined * server-side; the caller only names the feature. Users only. */ post: operations["consumeFeatureQuota"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/me": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Get current user profile */ get: operations["getMe"]; put?: never; post?: never; /** Delete current user account */ delete: operations["deleteMe"]; options?: never; head?: never; /** Update user profile */ patch: operations["updateMe"]; trace?: never; }; "/v1/auth/settings": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Get user security settings */ get: operations["getSecuritySettings"]; put?: never; post?: never; delete?: never; options?: never; head?: never; /** * Update user security settings * @description Disabling `require_passkey_for_vaults` requires `X-Auth-Confirm` * (purpose `security.vault_passkey.disable`) with a passkey or TOTP * when either is enrolled. * * Disabling `require_passkey_for_mfa` requires `X-Auth-Confirm` * (purpose `security.mfa_passkey.disable`) with a passkey or TOTP * when either is enrolled. */ patch: operations["updateSecuritySettings"]; trace?: never; }; "/v1/auth/human-factor-auth": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Get effective human factor auth policy * @description Returns the resolved HFA policy for treasury wallet send, swap, and export. * Precedence: user override → spend policy → platform defaults. */ get: operations["getHumanFactorAuth"]; /** Set user human factor auth policy */ put: operations["upsertHumanFactorAuth"]; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/mfa/status": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Check MFA enrollment status */ get: operations["mfaStatus"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/mfa/setup": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Begin MFA enrollment */ post: operations["mfaSetup"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/mfa/verify-setup": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Confirm MFA enrollment with a TOTP code */ post: operations["mfaVerifySetup"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/mfa/verify": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Verify MFA code during login */ post: operations["mfaVerify"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/mfa/passkey/begin": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Begin passkey MFA verification during login */ post: operations["mfaPasskeyBegin"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/mfa/passkey/complete": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Complete passkey MFA verification during login */ post: operations["mfaPasskeyComplete"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/mfa": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; post?: never; /** * Disable MFA * @description Requires a valid TOTP or recovery code in the body, or a passkey * re-auth token in `X-Auth-Confirm` (purpose `security.mfa.disable`). * Account password alone is not accepted while TOTP is enabled. */ delete: operations["mfaDisable"]; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/device/code": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Request a device authorization code */ post: operations["deviceCode"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/device/token": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Poll for device authorization token */ post: operations["deviceToken"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/device/code/{user_code}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Check device code status */ get: operations["deviceCodeStatus"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/device/approve": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Approve a CLI device login */ post: operations["deviceApprove"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/device/deny": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Deny a CLI device login */ post: operations["deviceDeny"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/api-keys": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** List personal API keys */ get: operations["listApiKeys"]; put?: never; /** Create a personal API key */ post: operations["createApiKey"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/api-keys/{key_id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; post?: never; /** Revoke an API key */ delete: operations["revokeApiKey"]; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/export-data": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Export user data (GDPR) * @description Returns a full export of the authenticated user's data including * profile, vaults, agents, secrets metadata, and policies. Intended * for GDPR data-portability requests. Only available to human users * (not agents). Requires `X-Auth-Confirm` (purpose `account.export`); * passkey or TOTP when either is enrolled. */ post: operations["exportUserData"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/devices": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * List devices for current user * @description Returns all registered mobile devices for the authenticated user. */ get: operations["listDevices"]; put?: never; /** * Register a mobile device * @description Register a new mobile device for the authenticated user. Human-only. * The device public key is used for step-up authentication challenges. */ post: operations["registerDevice"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/devices/{device_id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; post?: never; /** * Revoke a device * @description Removes a registered device, invalidating its keys and push tokens. */ delete: operations["revokeDevice"]; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/devices/{device_id}/challenge": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Create step-up auth challenge * @description Creates a cryptographic challenge bound to a specific action (e.g. approving * a high-risk transaction). The device signs the challenge nonce to prove * possession of the private key. */ post: operations["createDeviceChallenge"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/devices/{device_id}/attest": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Attest device challenge * @description Submit a signed challenge nonce to complete step-up authentication. * Returns a short-lived step-up token that can be used for the bound action. */ post: operations["attestDeviceChallenge"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/devices/{device_id}/push-token": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Register push notification token * @description Associates a push notification token (APNs or FCM) with a registered device * so the server can send approval requests and alerts. */ post: operations["registerPushToken"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/vaults": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** List vaults */ get: operations["listVaults"]; put?: never; /** Create a vault */ post: operations["createVault"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/vaults/{vault_id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Get vault details */ get: operations["getVault"]; put?: never; post?: never; /** Delete a vault */ delete: operations["deleteVault"]; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/vaults/{vault_id}/cmek": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Enable CMEK on a vault * @description Enable client-side encryption on a vault. Requires Business or Enterprise plan. * Only the key's SHA-256 fingerprint is stored — the key never touches the server. */ post: operations["enableCmek"]; /** * Disable CMEK on a vault * @description Disable client-side encryption. Existing CMEK-encrypted secrets still require * the key to decrypt. New secrets will use HSM-only encryption. */ delete: operations["disableCmek"]; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/vaults/{vault_id}/cmek-rotate": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Start server-assisted CMEK key rotation * @description Re-encrypts all secrets from the old CMEK key to the new one. * Keys are passed in headers (TLS-only) and exist in server memory * only during the rotation. Batched in groups of 100 secrets. */ post: operations["rotateCmek"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/vaults/{vault_id}/cmek-rotate/{job_id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Get CMEK rotation job status */ get: operations["getCmekRotationJob"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/vaults/{vault_id}/mpc": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Enable MPC custody on a vault * @description Enable MPC custody on an existing vault. Requires Business or Enterprise plan. * Splits secret encryption keys across multiple providers using the specified * custody mode (e.g. 2-of-2, 2-of-3). */ post: operations["enableMpc"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/vaults/{vault_id}/secrets": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** List secrets in a vault */ get: operations["listSecrets"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/vaults/{vault_id}/secrets/{path}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Retrieve a decrypted secret */ get: operations["getSecret"]; /** Store or update a secret */ put: operations["putSecret"]; post?: never; /** Delete a secret */ delete: operations["deleteSecret"]; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/vaults/{vault_id}/secret-versions/{path}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** List all versions of a secret */ get: operations["listSecretVersions"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/vaults/{vault_id}/secret-version/{path}/{version}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Retrieve a specific version of a secret */ get: operations["getSecretVersion"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/vaults/{vault_id}/secret-version-disable/{path}/{version}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Disable a specific secret version * @description Disables a version so it can no longer be read. The version is * retained for audit purposes but returns 410 on read attempts. */ post: operations["disableSecretVersion"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/vaults/{vault_id}/secret-rotate/{path}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Server-side secret rotation * @description Generates a cryptographically random value and stores it as a new * version of the secret. The previous version is preserved in history. * Requires rotate or write permission. */ post: operations["rotateSecret"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/vaults/{vault_id}/policies": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** List policies on a vault */ get: operations["listPolicies"]; put?: never; /** Create an access policy */ post: operations["createPolicy"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/vaults/{vault_id}/policies/{policy_id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; /** Update a policy */ put: operations["updatePolicy"]; post?: never; /** Revoke a policy */ delete: operations["deletePolicy"]; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/vaults/{vault_id}/env-vars": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * List environment variables * @description List all environment variables for a vault, optionally filtered by environment. */ get: operations["listEnvVars"]; put?: never; /** Create environment variable */ post: operations["createEnvVar"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/vaults/{vault_id}/env-vars/resolve": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Resolve environment variables * @description Resolve the final KEY=VALUE set for an environment with full precedence (shared < vault < branch override). * When the caller is an agent with `env_auto_resolve: true`, the `environment` query parameter may be omitted — * the server uses the agent's tagged environment from the JWT. Org setting `env.enforce_agent_environment_scope` * blocks agents from resolving vars outside their tagged environment. */ get: operations["resolveEnvVars"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/vaults/{vault_id}/env-vars/{key}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Get environment variable */ get: operations["getEnvVar"]; put?: never; post?: never; /** Delete environment variable */ delete: operations["deleteEnvVar"]; options?: never; head?: never; /** Update environment variable */ patch: operations["updateEnvVar"]; trace?: never; }; "/v1/vaults/{vault_id}/environments": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** List vault environments */ get: operations["listVaultEnvironments"]; put?: never; /** Create custom environment */ post: operations["createVaultEnvironment"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/vaults/{vault_id}/environments/{slug}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; post?: never; /** Delete custom environment */ delete: operations["deleteVaultEnvironment"]; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/enroll": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Self-enroll an agent * @description Public endpoint (no auth required). * * **With `human_email`:** Creates a pending enrollment for that account's org, * emails Allow/Deny links, and returns `approval_url` in the JSON body (use if email * is delayed). The API key is NOT returned until the human approves. * * **Name only (omit `human_email`):** Creates a link-only pending enrollment. * The response includes `approval_url`; the human opens it while signed in to * approve the agent into their org. * * Anti-spam: IP rate limiting, per-email cooldown, caps on pending rows. */ post: operations["enrollAgent"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** List agents */ get: operations["listAgents"]; put?: never; /** Register a new agent */ post: operations["createAgent"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/me": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Get the calling agent's own profile */ get: operations["getAgentSelf"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Get agent details */ get: operations["getAgent"]; put?: never; post?: never; /** Delete an agent */ delete: operations["deleteAgent"]; options?: never; head?: never; /** Update an agent */ patch: operations["updateAgent"]; trace?: never; }; "/v1/agents/{agent_id}/children": { parameters: { query?: never; header?: never; path: { agent_id: string; }; cookie?: never; }; /** List an agent's child agents */ get: operations["listChildAgents"]; put?: never; /** * Create a child agent * @description A cheap sub-agent under a parent. The child has its own API key, memory * namespaces and `action_approval_policy`; is created with a subset of the * parent's `vault_ids` and `scopes` (a superset is refused, not trimmed); * inherits the parent's vault access policies (policy lookups include the * parent's rows) and guardrails; does not count against the plan's agent cap * (capped at 50 per parent); and cannot have children of its own. Human-only. * Audited as `agent.child_created`. */ post: operations["createChildAgent"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/rotate-key": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Rotate agent API key */ post: operations["rotateAgentKey"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/rotate-identity-keys": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Rotate agent identity keys (SSH + ECDH) * @description Rotates the agent's Ed25519 SSH keypair and P-256 ECDH keypair. * New private keys are stored in the __agent-keys vault; old keys are overwritten. * User-only endpoint — agents cannot rotate their own identity keys. */ post: operations["rotateAgentIdentityKeys"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/smart-accounts": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Add a smart account (Safe) for this agent on a chain * @description Use after deploying a Safe on a new chain. Multi-chain; one Safe per chain. * Replaces any existing entry for the same chain_id. */ post: operations["addAgentSmartAccount"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/transactions": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** List agent transactions */ get: operations["listTransactions"]; put?: never; /** * Submit a transaction for signing * @description Replay protection: send an optional **Idempotency-Key** header (e.g. UUID or opaque string). * Duplicate requests with the same key within 24 hours return the cached transaction response * (no second sign/broadcast). Omit the header for non-idempotent submissions. */ post: operations["submitTransaction"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/transactions/{tx_id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Get a transaction by ID */ get: operations["getTransaction"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/transactions/sign": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Sign a transaction without broadcasting * @description Signs a transaction inside the server (or TEE when using Shroud) but does * **not** broadcast it. The caller receives the raw `signed_tx` hex and * `tx_hash` so it can submit to any RPC of its choosing. * * All agent guardrails (allowlists, value caps, daily limits) are enforced * exactly as for the submit endpoint. The signed transaction is recorded for * audit and daily-limit tracking with `status: "sign_only"`. */ post: operations["signTransaction"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/transactions/simulate": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Simulate a transaction via Tenderly */ post: operations["simulateTransaction"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/transactions/simulate-bundle": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Simulate a bundle of transactions */ post: operations["simulateBundle"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/signing-keys": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** List signing keys for an agent */ get: operations["listSigningKeys"]; put?: never; /** Provision a signing key for a chain */ post: operations["createSigningKey"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/signing-keys/{chain}/rotate": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Rotate a signing key for a chain */ post: operations["rotateSigningKey"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/signing-keys/{chain}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; post?: never; /** Deactivate a signing key for a chain */ delete: operations["deactivateSigningKey"]; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/signing-keys/{chain}/export": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Export a signing key (private key included) * @description Export the private key for an agent's signing key. Requires re-authentication * via the X-Auth-Confirm header containing the user's account password. * Human users only — agents cannot export keys. */ post: operations["exportSigningKey"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/signing-keys/{chain}/balance": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Get signing key balance * @description Returns the native token balance for the agent's signing key address * on the specified chain. */ get: operations["getSigningKeyBalance"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/signing-keys/{chain}/import": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Import a signing key for a chain * @description Import an existing private key for a specific chain. Human-only, * requires password re-authentication. */ post: operations["importSigningKey"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/bankr-keys/lease": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Lease a short-lived Bankr wallet API key * @description Provision a scoped, time-limited Bankr wallet API key for an agent. * **Privileged, deny-by-default:** agent callers need an explicit access policy * on `agents/{agent_id}/bankr/*` in the `__agent-keys` vault (JWT scope * `agents/{agent_id}/bankr/lease`). Agents may only lease for their own ID. * The `bk_usr_` key is **omitted** from the JSON response for agent JWTs — * stored server-side for Shroud resolution. Human callers receive `api_key` once. * Requires `BANKR_PARTNER_KEY` on Vault. Agent default TTL 15 min when omitted; * human/org default 1 hour (`BANKR_DEFAULT_LEASE_TTL_SECS`). Recommend 5–15 min * for autonomous agents. Max TTL 24 hours. Max 5 concurrent leases per agent. */ post: operations["leaseBankrKey"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/bankr-keys": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** List active Bankr key leases for an agent */ get: operations["listBankrKeys"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/bankr-keys/{lease_id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; post?: never; /** Revoke an active Bankr key lease */ delete: operations["revokeBankrKey"]; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/accounts": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** List agent on-chain accounts */ get: operations["listAgentAccounts"]; put?: never; /** * Provision an agent account record * @description Human-only. Creates a DB record for an EOA or Safe account (Safe onchain sync is stubbed). */ post: operations["provisionAgentAccount"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/accounts/migrate": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * EOA to Safe migration wizard * @description Human-only. Provisions counterfactual Safe and returns sweep plan. Onchain module broadcast stubbed pre-audit. */ post: operations["migrateAgentToSafe"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/accounts/{chain}/deprecate-eoa": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Mark agent EOA account deprecated */ post: operations["deprecateAgentEoa"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/accounts/{chain}/deploy": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Lazy-deploy counterfactual Safe (stub) * @description Human-only. Broadcasts Safe deployment when Guard audit completes. Returns 501 pre-audit. */ post: operations["deployAgentSafeAccount"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/org/safe/sync-allowances": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Reconcile Safe allowance targets (org admin) * @description Compiles tx_daily_limit targets for Safe agents. Onchain read/write stubbed pre-audit. */ post: operations["syncOrgSafeAllowances"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/treasury/{treasury_id}/safe/roles-sync": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Sync treasury Safe Roles module (stub) * @description Human-only. Reconciles on-chain Roles config with agent guardrails. Returns 501 pre-audit. */ post: operations["treasurySafeRolesSync"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/safe/cosign": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Enable Vault co-signer (stub) */ post: operations["enableSafeCosign"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/safe/passkey-enroll": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Enroll passkey Safe owner (stub) */ post: operations["enrollSafePasskeyOwner"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/safe/timelock": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Configure Zodiac timelock (stub) */ post: operations["configureSafeTimelock"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/safe/erc4337": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Enable ERC-4337 Safe lane (stub) */ post: operations["enableSafeErc4337"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/guardrails/replay": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Dry-run guardrail changes against recent transactions * @description Human-only. Compares draft guardrails against recent agent transactions. */ post: operations["replayAgentGuardrails"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/safe/module-registry/{chain}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** List Safe module registry entries for a chain */ get: operations["getSafeModuleRegistry"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/delegations": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * List delegations for an agent * @description List all delegations where this agent is the delegator. */ get: operations["listDelegations"]; put?: never; /** * Create a delegation * @description Grant an agent (delegator) permission to delegate tasks to another agent (delegate). * Human-only — agents cannot create their own delegations. */ post: operations["createDelegation"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/delegations/effective": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Get effective delegations * @description Get the effective delegations for an agent, including daily usage statistics. * Agents can call this on their own ID to discover what they are authorized to delegate to. */ get: operations["getEffectiveDelegations"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/delegations/{delegation_id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Get a specific delegation */ get: operations["getDelegation"]; put?: never; post?: never; /** Revoke a delegation */ delete: operations["revokeDelegation"]; options?: never; head?: never; /** * Update a delegation * @description Update delegation tools, limits, mode, or active status. Human-only. */ patch: operations["updateDelegation"]; trace?: never; }; "/v1/agents/{agent_id}/sign": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Unified signing intent (EIP-191, EIP-712, EIP-2718 types 0-4) */ post: operations["signIntent"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/bindings": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** List bindings */ get: operations["listBindings"]; put?: never; /** Create a binding */ post: operations["createBinding"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/bindings/{binding_id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Get binding */ get: operations["getBinding"]; put?: never; post?: never; /** Delete binding */ delete: operations["deleteBinding"]; options?: never; head?: never; /** Update binding */ patch: operations["updateBinding"]; trace?: never; }; "/v1/agents/{agent_id}/bindings/{binding_id}/test": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Test binding connectivity */ post: operations["testBinding"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/bindings/{binding_id}/rotate-credential": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Rotate a binding credential * @description Overwrite the stored credential for a binding without touching its config or guardrails. Human-only. The credential value is never returned. */ post: operations["rotateBindingCredential"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/execute": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Execute an intent */ post: operations["executeIntent"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/executions": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** List execution events */ get: operations["listExecutions"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/chains": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** List enabled chains */ get: operations["listChains"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/chains/{identifier}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Get chain by name or ID */ get: operations["getChain"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/admin/agents/{agent_id}/reports/dismiss": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Dismiss every open report on a directory listing * @description Platform admins only. Clears the listing's report flag and recounts. The review queue is a platform function — an org dismissing reports against its own agent is the abuse the queue exists to catch. */ post: operations["adminDismissAgentReports"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/admin/agents/{agent_id}/verification-tier": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; /** * Set a directory listing's verification tier * @description Platform admins only. Unknown tiers are refused rather than demoted to `unverified`. */ put: operations["adminSetAgentVerificationTier"]; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/admin/kms/relevel": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Move orgs onto the KEK protection level their tier and payment call for * @description Platform admins only. Examines up to `limit` orgs whose stored KEK level disagrees with the target (Pro earns HSM only with an active subscription; Team, Business and Enterprise keep HSM; the platform org is always software) and starts a migration for each: a new key at the right level, every secret and every org-scoped row re-wrapped, the old key released from the keep set 30 days after completion. The nightly consolidation job runs the same pass, 25 orgs at a time. */ post: operations["adminKmsRelevel"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/admin/chains": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** List all chains including disabled (admin) */ get: operations["adminListChains"]; put?: never; /** Add a chain (admin) */ post: operations["createChain"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/admin/chains/{chain_id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; /** Update a chain (admin) */ put: operations["updateChain"]; post?: never; /** Remove a chain (admin) */ delete: operations["deleteChain"]; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/secrets/{secret_id}/share": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Create a share link for a secret */ post: operations["createShare"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/share/{share_id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Access a shared secret */ get: operations["accessShare"]; put?: never; post?: never; /** Revoke a share link */ delete: operations["revokeShare"]; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/shares/outbound": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** List shares you have sent */ get: operations["listOutboundShares"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/shares/inbound": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** List shares sent to you */ get: operations["listInboundShares"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/shares/{share_id}/accept": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Accept an inbound share */ post: operations["acceptShare"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/shares/{share_id}/decline": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Decline an inbound share */ post: operations["declineShare"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/org/members": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** List organization members */ get: operations["listOrgMembers"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/org/agent-keys-vault": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Get the org's __agent-keys vault id * @description Returns the vault id for the caller's org agent-keys vault (used for revealing agent identity keys). Users only; 404 if the vault does not exist. */ get: operations["getAgentKeysVault"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/org/onboarding/status": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Onboarding funnel status * @description Returns welcome-bundle and MCP connection progress for the connect wizard. */ get: operations["getOnboardingStatus"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/onboarding/provision": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Provision MCP onboarding bundle * @description Creates welcome vault + sample secret, MCP agent, and a policy on the * vault. Returns one-time API key and stdio MCP config. * * The grant is `**` only when the welcome vault is newly created. If an * org already has a vault named `default`, it is reused and the agent is * granted `examples/**` instead — enough to read the sample it is asked to * verify with, without exposing secrets already kept there. * * Subject to `agent.create` control-plane consensus; see `approval_id`. */ post: operations["provisionOnboarding"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/org/status": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Organization operational status * @description Returns whether the org is emergency-frozen (blocks agent tx/execution). */ get: operations["getOrgStatus"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/org/freeze": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Emergency org-wide freeze * @description Sets organizations.frozen_at — blocks agent tx/execution until unfreeze. Owner/admin only. */ post: operations["freezeOrg"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/org/unfreeze": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Clear org-wide freeze * @description Clears organizations.frozen_at. Owner/admin only. */ post: operations["unfreezeOrg"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/org/bankr-config": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Get org Bankr partner configuration * @description Returns whether the org has configured Bankr BYOK (partner key prefix and default wallet only — never the secret). Users only. */ get: operations["getOrgBankrConfig"]; /** * Set org Bankr partner configuration * @description Store or replace the org's Bankr partner key (`bk_ptr_...`) and optional default wallet (`wlt_...`). Owner/admin only. Partner key encrypted at rest. */ put: operations["upsertOrgBankrConfig"]; post?: never; /** * Remove org Bankr partner configuration * @description Delete BYOK credentials for the org. Owner/admin only. */ delete: operations["deleteOrgBankrConfig"]; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/org/invite": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Invite a member by email */ post: operations["inviteMember"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/org/members/{user_id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; post?: never; /** Remove a member from the organization */ delete: operations["removeMember"]; options?: never; head?: never; /** Update a member's role */ patch: operations["updateMemberRole"]; trace?: never; }; "/v1/org/env-vars": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** List org shared environment variables */ get: operations["listOrgEnvVars"]; put?: never; /** Create org shared environment variable */ post: operations["createOrgEnvVar"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/org/env-vars/{key}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; post?: never; delete?: never; options?: never; head?: never; /** Update org shared environment variable */ patch: operations["updateOrgEnvVar"]; trace?: never; }; "/v1/org/env-vars/{id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; post?: never; /** Delete org shared environment variable */ delete: operations["deleteOrgEnvVar"]; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/org/env-vars/{id}/link": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Link org shared env var to a vault */ post: operations["linkOrgEnvVar"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/org/env-vars/{id}/links/{vault_id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; post?: never; /** Unlink org shared env var from a vault */ delete: operations["unlinkOrgEnvVar"]; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/billing/usage": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Get usage summary (legacy) */ get: operations["billingUsage"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/billing/history": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Get usage event history (legacy) */ get: operations["billingHistory"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/billing/subscribe": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Start a subscription via Stripe Checkout */ post: operations["billingSubscribe"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/billing/portal": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Open Stripe Customer Portal */ post: operations["billingPortal"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/billing/subscription": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Get subscription, usage, and credit summary */ get: operations["billingSubscription"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/billing/credits/topup": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Top up prepaid credits via Stripe */ post: operations["billingCreditTopup"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/billing/credits/balance": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Get credit balance */ get: operations["billingCreditBalance"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/billing/credits/transactions": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Get credit transaction ledger */ get: operations["billingCreditTransactions"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/billing/llm-token-billing": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Get LLM token billing status * @description Returns whether LLM token billing is enabled, optional Stripe billing credit balance (metered scope), and estimated cycle usage from the upcoming invoice—including per-line metered rows when Stripe returns them (amounts; quantities such as tokens when present). */ get: operations["getLlmTokenBilling"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/billing/llm-token-billing/subscribe": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Subscribe to LLM token billing * @description Creates a Stripe Checkout session for the LLM token billing pricing plan. Returns a checkout URL to redirect the user. After the user completes checkout, a webhook activates LLM billing for the org. */ post: operations["subscribeLlmTokenBilling"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/billing/llm-token-billing/disable": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Disable LLM token billing * @description Disables LLM token billing for the org and cancels all active Stripe subscriptions for the LLM pricing plan. Agents will fall back to direct provider routing. You can re-enable it at any time. */ post: operations["disableLlmTokenBilling"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/billing/llm-token-billing/cancel-duplicates": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Cancel duplicate LLM billing subscriptions * @description Cancels extra Stripe LLM billing subscriptions for the org, keeping a single primary subscription (active preferred over trialing). Does not change the org LLM billing enabled setting. */ post: operations["cancelLlmDuplicateSubscriptions"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/billing/overage-method": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; post?: never; delete?: never; options?: never; head?: never; /** Set overage payment method */ patch: operations["billingOverageMethod"]; trace?: never; }; "/v1/billing/webhooks": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Stripe webhook receiver */ post: operations["billingWebhook"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/audit/events": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Query audit events */ get: operations["queryAuditEvents"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/audit/verify": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Verify audit hash chain integrity * @description Verifies the HMAC-SHA256 integrity hash chain for audit events in the * calling organization. Returns whether the chain is valid, how many * events were verified, and the point of first break (if any). */ get: operations["verifyAuditChain"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/security/ip-rules": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** List IP rules */ get: operations["listIpRules"]; put?: never; /** Create an IP rule */ post: operations["createIpRule"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/security/ip-rules/{rule_id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; post?: never; /** Delete an IP rule */ delete: operations["deleteIpRule"]; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/treasury": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** List treasuries */ get: operations["listTreasuries"]; put?: never; /** Create a treasury (Safe multisig) */ post: operations["createTreasury"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/treasury/{treasury_id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Get treasury details */ get: operations["getTreasury"]; put?: never; post?: never; /** Delete a treasury and its signers */ delete: operations["deleteTreasury"]; options?: never; head?: never; /** Update treasury name and/or threshold */ patch: operations["updateTreasury"]; trace?: never; }; "/v1/treasury/{treasury_id}/signers": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Add a signer to a treasury */ post: operations["addTreasurySigner"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/treasury/{treasury_id}/signers/{signer_id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; post?: never; /** Remove a signer from a treasury */ delete: operations["removeTreasurySigner"]; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/treasury/{treasury_id}/access-requests": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** List access requests for a treasury */ get: operations["listTreasuryAccessRequests"]; put?: never; /** Request access to a treasury (agent-only) */ post: operations["requestTreasuryAccess"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/treasury/{treasury_id}/access-requests/{request_id}/approve": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Approve an access request */ post: operations["approveTreasuryAccess"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/treasury/{treasury_id}/access-requests/{request_id}/deny": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Deny an access request */ post: operations["denyTreasuryAccess"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/treasury/{treasury_id}/proposals": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** List proposals for a treasury */ get: operations["listTreasuryProposals"]; put?: never; /** * Create a multisig proposal * @description Create a new Safe multisig transaction proposal. The proposer must be a * treasury signer or an agent with an active delegation for the treasury. * If auto-approve rules match, the agent's signature is auto-inserted and * auto-execute fires if threshold is met. */ post: operations["createTreasuryProposal"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/treasury/{treasury_id}/proposals/{proposal_id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Get a proposal with collected signatures */ get: operations["getTreasuryProposal"]; put?: never; post?: never; /** Cancel a pending proposal (proposer only) */ delete: operations["cancelTreasuryProposal"]; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/treasury/{treasury_id}/proposals/{proposal_id}/sign": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Sign a proposal (approve or reject) * @description Submit an EIP-712 signature for a pending proposal. When approve signatures * reach the Safe threshold, auto-execute fires: signatures are collected in * address-sorted order, `execTransaction` calldata is built, and the transaction * is broadcast via RPC. */ post: operations["signTreasuryProposal"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/treasury/{treasury_id}/proposals/{proposal_id}/execute": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Force-execute a proposal if threshold is met (user-only) */ post: operations["executeTreasuryProposal"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/keys/{key_id}/client-share": { parameters: { query?: never; header?: never; path: { /** @description A treasury wallet id or an agent signing key id owned by the caller's org */ key_id: string; }; cookie?: never; }; /** * List the caller's wrapped shares for a key * @description Returns every wrap on file for this key, unopened, to the user who * stored them. `custody` tells you whether the key is `server` (1claw * holds the whole private key) or `client_tss` (threshold; neither party * can sign alone). Funding a `client_tss` wallet needs at least two wraps. */ get: operations["listClientKeyShares"]; /** * Store the customer's wrapped share of a threshold key * @description Stores ciphertext the vault cannot open: the customer's share of a * 2-party threshold signing key, wrapped in the browser under the * passkey's WebAuthn PRF output (`passkey_prf`, one wrap per credential) * or under a recovery code (`recovery_code`, one per key). The vault * keeps the blob and its salt and returns them only to the owning user. * Human users only; the passkey must have reported PRF support at * registration. Idempotent per (key, credential). */ put: operations["putClientKeyShare"]; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/keys/{key_id}/client-share/rewrap": { parameters: { query?: never; header?: never; path: { key_id: string; }; cookie?: never; }; get?: never; put?: never; /** * Add a wrap for another credential or the recovery code * @description Same write as `PUT …/client-share`, for a key that already has at * least one wrap: the browser, holding the share in memory during a * passkey session, re-wraps it under a newly added passkey's PRF * output or under the recovery code. 409 if no wrap exists yet. */ post: operations["rewrapClientKeyShare"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/keys/{key_id}/client-share/{share_id}": { parameters: { query?: never; header?: never; path: { key_id: string; share_id: string; }; cookie?: never; }; get?: never; put?: never; post?: never; /** * Remove one wrap * @description Deletes a single wrap. Wraps tied to a passkey are also removed when * that passkey is deleted. Removing the last wrap of a `client_tss` key * makes the key unrecoverable — the vault holds only its own share. */ delete: operations["deleteClientKeyShare"]; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/keys/tss/keygen/begin": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Start a 2-party threshold key generation * @description Begins a distributed key generation between the vault (party 1) and the * caller's browser (party 2, `@1claw/tss-wasm`). The result is a * `custody: client_tss` treasury wallet whose private key never exists * anywhere: the vault keeps one FROST share, the caller keeps the other, * wrapped under their passkey's PRF output. Requires a passkey with * `prf_supported: true` and no active wallet on the chain. Chains: `solana` * (Ed25519). Sessions expire after 10 minutes. */ post: operations["tssKeygenBegin"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/keys/tss/keygen/round2": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Threshold key generation, round 2 */ post: operations["tssKeygenRound2"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/keys/tss/keygen/complete": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Threshold key generation, final round * @description Needs `X-Passkey-Token` from a tx-assert with `action: tss_keygen` and * `tx_digest` = hex SHA-256 of the session id. Creates the `client_tss` * wallet and returns its address. The browser derives the same public key * package from the packages it already holds; store your share with * `PUT /v1/keys/{key_id}/client-share` next. */ post: operations["tssKeygenComplete"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/keys/{key_id}/tss/sign/begin": { parameters: { query?: never; header?: never; path: { key_id: string; }; cookie?: never; }; get?: never; put?: never; /** * Threshold signing, round 1 * @description Needs `X-Passkey-Token` from a tx-assert with `action: tss_sign` and * `tx_digest` = hex SHA-256 of `message`. The message must be a decodable * Solana transaction message; every transfer destination in it is checked * against the OFAC SDN list before the vault commits. Returns the vault's * signing commitments; nonces are single-use and expire with the session. */ post: operations["tssSignBegin"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/keys/{key_id}/tss/sign/complete": { parameters: { query?: never; header?: never; path: { key_id: string; }; cookie?: never; }; get?: never; put?: never; /** * Threshold signing, round 2 — aggregate and return the signature * @description The vault produces its share, verifies the caller's, aggregates, and * verifies the result under the group key before returning it. A bad * share is a `400`, never a published signature. */ post: operations["tssSignComplete"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/treasury/wallets/{chain}/tss/prepare": { parameters: { query?: never; header?: never; path: { chain: string; }; cookie?: never; }; get?: never; put?: never; /** * Build the unsigned message for a send from a client_tss wallet * @description Runs wallet access, the sanctions screen and spend policies on the * declared destination, fetches a recent blockhash and returns the * unsigned transaction message. Sign it with `/v1/keys/{key_id}/tss/sign/*` * and submit with `…/tss/broadcast`. */ post: operations["tssTreasuryPrepare"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/treasury/wallets/{chain}/tss/broadcast": { parameters: { query?: never; header?: never; path: { chain: string; }; cookie?: never; }; get?: never; put?: never; /** * Broadcast a threshold-signed send * @description Verifies the signature under the wallet's public key over exactly this * message, checks `to` is a transfer destination inside it, assembles the * transaction and submits it. Audited as `treasury_wallet.send`. */ post: operations["tssTreasuryBroadcast"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/runtimes/{runtime_id}/tss/holder": { parameters: { query?: never; header?: never; path: { runtime_id: string; }; cookie?: never; }; /** The runtime's registered share holder */ get: operations["getTssHolder"]; put?: never; /** * Register the runtime's sidecar as a share holder * @description Called by the runtime's agent (the Shroud sidecar, at boot) with the P-256 * public key it generated. The owner can then provision a threshold-key * share to this runtime, letting the agent co-sign below-cap sends * unattended. Re-registering replaces the key; deleting the runtime revokes * every share held by it. */ post: operations["registerTssHolder"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/keys/{key_id}/client-share/holder": { parameters: { query?: never; header?: never; path: { key_id: string; }; cookie?: never; }; /** * The sidecar fetches the wrap made for it * @description Agent-only; returns the wrap whose holder was registered by the calling agent. */ get: operations["getTssHolderShare"]; /** * Provision a threshold-key share to a runtime holder * @description The owner's browser unlocks its share with the passkey PRF and re-wraps * it to the holder's P-256 key (ECIES: ephemeral point ‖ iv ‖ AES-GCM). The * vault stores the ciphertext unopened. The wallet must be delegated to the * holder's agent. Audited as `client_share.provisioned_to_runtime`. */ put: operations["provisionTssHolderShare"]; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/tss/prepare": { parameters: { query?: never; header?: never; path: { agent_id: string; }; cookie?: never; }; get?: never; put?: never; /** * Agent declares a send from a delegated client_tss wallet * @description Runs the agent's guardrails (chains, allowlists, caps, daily limits, * approval policy) and the sanctions screen on the declared call, builds * the unsigned message and records it as a prepared intent. Only a * prepared message can enter `/tss/sign/begin`. Requires a treasury * delegation and a share provisioned to the agent's runtime. */ post: operations["agentTssPrepare"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/tss/sign/begin": { parameters: { query?: never; header?: never; path: { agent_id: string; }; cookie?: never; }; get?: never; put?: never; /** * Agent threshold signing, round 1 * @description The message must be a live prepared intent for this agent and key; its transfers are screened again. */ post: operations["agentTssSignBegin"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/tss/sign/complete": { parameters: { query?: never; header?: never; path: { agent_id: string; }; cookie?: never; }; get?: never; put?: never; /** Agent threshold signing, round 2 */ post: operations["agentTssSignComplete"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/tss/broadcast": { parameters: { query?: never; header?: never; path: { agent_id: string; }; cookie?: never; }; get?: never; put?: never; /** * Broadcast an agent's threshold-signed send * @description Verifies the signature under the wallet key, checks the message is the * prepared one, re-runs the agent's guardrails, records the transaction * (daily limits count it) and submits. Audited as `treasury_wallet.send` * with `via: runtime_share_holder`. */ post: operations["agentTssBroadcast"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/treasury/passkey-safes": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** List your passkey-owned Safes */ get: operations["listPasskeySafes"]; put?: never; /** * Create a Safe owned by your passkey * @description An EVM Safe (v1.4.1) whose only owner is Safe's WebAuthn shared signer, * configured with this passkey's P-256 public key. No private key exists * anywhere: signing a transaction is a WebAuthn assertion whose challenge * is the SafeTx hash. The address is counterfactual (CREATE2) until the * first `execute` deploys it. Chains: base, optimism, arbitrum, polygon * (RIP-7212 precompile + fallback verifier), ethereum, sepolia, base-sepolia. * The passkey must have been registered on the domain making this * request (its rpId): a credential from `1claw.xyz` cannot sign on * `1claw.co`, so such a passkey is refused here (400) rather than * producing a Safe no browser here can sign for. */ post: operations["createPasskeySafe"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/treasury/passkey-safes/{id}": { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; get?: never; put?: never; post?: never; /** * Forget a passkey Safe * @description Deactivates the record only; the Safe and its funds stay on-chain under the passkey. */ delete: operations["deactivatePasskeySafe"]; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/treasury/passkey-safes/{id}/prepare": { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; get?: never; put?: never; /** * Compute the SafeTx hash for a call from a passkey Safe * @description Runs the sanctions screen and spend policies on the call, reads the * Safe's on-chain nonce (0 if not yet deployed), and returns the SafeTx * hash — the raw 32 bytes are the WebAuthn challenge to sign with * `userVerification: "required"`. */ post: operations["preparePasskeySafeTx"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/treasury/passkey-safes/{id}/execute": { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; get?: never; put?: never; /** * Relay a passkey-signed Safe transaction * @description Recomputes the SafeTx hash, verifies the WebAuthn assertion locally * (this passkey, this hash, a dashboard origin, UV flag set), wraps it in * Safe's contract-signature format and relays `execTransaction` — deploying * the Safe first if needed — from your Ethereum treasury wallet, which pays * gas and is not an owner. Audited as `passkey_safe.executed`. */ post: operations["executePasskeySafeTx"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/treasury/passkey-safes/{id}/grants": { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; /** List agent spending grants on a passkey Safe */ get: operations["listPasskeySafeGrants"]; put?: never; /** * Prepare an agent spending grant (Allowance Module) * @description Gives one agent's server-custody Ethereum signing key a bounded, on-chain * allowance from this Safe through Safe's Allowance Module v1.0.0: one Safe * transaction (delegatecall into MultiSendCallOnly) that enables the module if * needed, adds the agent's key as a delegate and sets the allowance per reset * period. Returns the grant (`pending`) and the SafeTx for the owner's passkey * to sign; pass `operation` and `grant_id` from `prepare` to `execute`. The cap * is enforced by the module on-chain — 1claw holding the delegate key gives it * exactly the allowance and nothing more. Audited as `passkey_safe.grant_activated`. */ post: operations["createPasskeySafeGrant"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/treasury/passkey-safes/{id}/grants/{grant_id}/revoke": { parameters: { query?: never; header?: never; path: { id: string; grant_id: string; }; cookie?: never; }; get?: never; put?: never; /** * Prepare a grant revocation * @description Prepares `AllowanceModule.removeDelegate(delegate, true)` for the owner's * passkey to sign; `execute` with `grant_id` relays it and marks the grant * `revoked`. Audited as `passkey_safe.grant_revoked`. */ post: operations["revokePasskeySafeGrant"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/passkey-safes/{safe_id}/spend": { parameters: { query?: never; header?: never; path: { agent_id: string; safe_id: string; }; cookie?: never; }; get?: never; put?: never; /** * Spend from a passkey-owned Safe under an active grant * @description Agent credential only. Runs the agent's guardrails (chains, allowlists, caps, * daily limits, approval policy) and the sanctions screen, reads the module's * current allowance and nonce, signs the Allowance Module transfer hash with the * agent's Ethereum signing key, and relays `executeAllowanceTransfer` from the * Safe owner's Ethereum treasury wallet. Above the on-chain remaining allowance * the request is refused before any gas is spent; the module would refuse it * anyway. Counts as one signature. Audited as `passkey_safe.allowance_spent`. */ post: operations["spendFromPasskeySafeGrant"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/treasury/wallets/generate": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Generate multi-chain wallets for the authenticated user * @description Generates keypairs for the requested chains (or all supported chains if omitted). * Private keys are stored in a per-org `__treasury-keys` vault with tier-appropriate * MPC custody. Skips chains where the user already has an active wallet. Available * on all tiers (counts toward wallet quota). Human users only — agents get 403. */ post: operations["generateTreasuryWallets"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/treasury/wallets": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** List the authenticated user's treasury wallets */ get: operations["listTreasuryWallets"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/treasury/wallets/{chain}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Get the user's active wallet for a specific chain */ get: operations["getTreasuryWallet"]; put?: never; post?: never; /** Deactivate the user's wallet for a specific chain */ delete: operations["deactivateTreasuryWallet"]; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/treasury/wallets/{chain}/export": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Export the private key for a treasury wallet * @description Returns the raw private key hex for the user's active wallet on * the given chain. Requires re-authentication via the `X-Auth-Confirm` * header (account password). Audit-logged as `treasury_wallet.export`. * Human users only. */ post: operations["exportTreasuryWallet"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/treasury/wallets/{chain}/rotate": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Rotate the user's wallet key for a chain * @description Generates a new keypair, deactivates the old wallet, and creates a * new active wallet. The old private key version is retained in the * vault for audit. Counts toward wallet quota (does not require a paid plan). */ post: operations["rotateTreasuryWallet"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/treasury/wallets/{chain}/balance": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Get wallet balance * @description Returns the native and token balances for the user's active wallet * on the specified chain. */ get: operations["getTreasuryWalletBalance"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/treasury/wallets/{chain}/send": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Send from treasury wallet * @description Signs and broadcasts a transaction from the user's active wallet on * the specified chain. Requires re-authentication via `X-Auth-Confirm` * header (account password). Human users only. */ post: operations["sendFromTreasuryWallet"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/treasury/wallets/{chain}/swap": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Swap tokens via DEX aggregator * @description Executes a token swap through a DEX aggregator from the user's active * wallet on the specified chain. Requires re-authentication via * `X-Auth-Confirm` header (account password). Human users only. */ post: operations["swapFromTreasuryWallet"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/treasury/wallets/{chain}/import": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Import a treasury wallet * @description Import an existing private key as a treasury wallet. Human-only, * requires password re-authentication via X-Auth-Confirm header. */ post: operations["importTreasuryWallet"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/treasury/wallets/auth-policy": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Get effective human factor auth policy for embedded clients * @description Returns the resolved human factor auth (HFA) policy governing treasury * wallet send, swap, and export, plus the number of passkeys registered * for the calling user. Intended for embedded wallet clients; equivalent * to GET /v1/auth/human-factor-auth with an additional passkey count. * Precedence: user override → platform app → spend policy → defaults. */ get: operations["getTreasuryAuthPolicy"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/treasury/wallets/spend-policy": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Get effective spend policy for current user * @description Returns the effective spend policy governing the authenticated user's * wallet transactions. Resolves from per-user override (if set) or the * app-wide default. Returns null if no policy is configured. */ get: operations["getEffectiveSpendPolicy"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/treasury/wallets/inference-budget": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Get inference budget for current user * @description Returns the user's remaining LLM inference allowance when connected via a platform app. * Includes allowance, spent, remaining USD, per-request cap, and billing period end. */ get: operations["getUserInferenceBudget"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/webhooks": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** List webhooks */ get: operations["listWebhooks"]; put?: never; /** Register a webhook */ post: operations["createWebhook"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/webhooks/{id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Get webhook */ get: operations["getWebhook"]; put?: never; post?: never; /** Delete webhook */ delete: operations["deleteWebhook"]; options?: never; head?: never; /** Update webhook */ patch: operations["updateWebhook"]; trace?: never; }; "/v1/admin/settings": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** List platform settings */ get: operations["adminListSettings"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/admin/settings/{key}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; /** Update a platform setting */ put: operations["adminUpdateSetting"]; post?: never; /** Delete a platform setting */ delete: operations["adminDeleteSetting"]; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/admin/x402": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Get x402 payment config */ get: operations["adminGetX402Config"]; /** Update x402 payment config */ put: operations["adminUpdateX402Config"]; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/admin/users": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** List all platform users */ get: operations["adminListUsers"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/admin/users/{user_id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; post?: never; /** Delete a user (cascade) */ delete: operations["adminDeleteUser"]; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/admin/orgs/{org_id}/limits": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Get org limits */ get: operations["adminGetOrgLimits"]; /** Update org limits */ put: operations["adminUpdateOrgLimits"]; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/admin/orgs/{org_id}/billing-tier": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; /** * Set org billing tier (without Stripe) * @description Manually set an organization's billing tier to free, pro, business, or enterprise. * For testing, manual upgrades, and trial grants — does not create a Stripe subscription. * Setting to "pro", "business", or "enterprise" sets period_end to now + duration_days (default 365). * Setting to "free" clears subscription data. Use duration_days: 90 for a 3-month trial. */ put: operations["adminSetBillingTier"]; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/admin/usage/reset": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Reset all API usage events (testing) * @description Deletes every row in `usage_events` for all organizations. Resets monthly * request counts used for free-tier / x402 quota. Does not change prepaid credit * balances or Stripe. **Platform admin only** (same guard as other `/v1/admin/*` routes). */ post: operations["adminResetUsageEvents"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/admin/usage/reset-for-user": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Reset API usage for a user's organization * @description Looks up a registered user by email and deletes all `usage_events` rows for that * user's `org_id`. Resets free-tier / monthly quota for the whole org (not other orgs). * **Platform admin only.** */ post: operations["adminResetUsageForUserByEmail"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/health": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Service health check */ get: operations["healthCheck"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/health/hsm": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** HSM connectivity check */ get: operations["healthHsm"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/shroud/attestation": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * TEE attestation proof (public) * @description Public endpoint returning the TEE attestation proof for Shroud. * Returns the GCE Confidential VM identity token and image hash so * customers can verify Shroud is running inside a Confidential VM * before signing contracts. Served from shroud.1claw.xyz. */ get: operations["getShroudAttestation"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/shroud/inspect-content": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Inspect text for security threats * @description Standalone content inspection (MCP `inspect_content` parity). Scans for command * injection, encoding tricks, social engineering, PII, and suspicious URLs. * Fail-closed — returns `safe: false` when high/critical threats match. * Accepts plt_ platform keys, agent JWTs, and user JWTs. */ post: operations["inspectContent"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/shroud/activity": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * List Shroud activity events * @description Returns recent Shroud proxy activity for the organization (LLM requests, inspections, policy actions). */ get: { parameters: { query?: { /** @description Filter by agent ID */ agent_id?: string; /** @description Filter by action (allowed, blocked, warned) */ action?: string; /** @description Maximum events to return */ limit?: number; /** @description Pagination offset */ offset?: number; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Activity events */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { events?: components["schemas"]["ShroudActivityEvent"][]; total?: number; }; }; }; /** @description Unauthorized */ 401: { headers: { [name: string]: unknown; }; content?: never; }; }; }; put?: never; /** * Ingest Shroud activity event (internal) * @description Called by the Shroud proxy to record activity events. Not intended for external use. */ post: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["IngestShroudActivityRequest"]; }; }; responses: { /** @description Event recorded */ 201: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthorized */ 401: { headers: { [name: string]: unknown; }; content?: never; }; }; }; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/shroud/threat-summary": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Shroud threat analytics summary * @description Aggregated threat metrics for the organization from `shroud_activity` (detectors, blocked counts, recent flagged requests). Query `period` selects the window; the previous window of equal length is used for request volume trend. */ get: { parameters: { query?: { /** @description Rolling window ending now */ period?: "1h" | "24h" | "7d" | "30d"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Threat summary */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ShroudThreatSummary"]; }; }; /** @description Invalid period */ 400: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthorized */ 401: { headers: { [name: string]: unknown; }; content?: never; }; }; }; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/apps": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * List platform apps * @description List all platform apps in the organization. */ get: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description List of platform apps */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PlatformAppResponse"][]; }; }; }; }; put?: never; /** * Register a platform app * @description Register a new platform app for building on top of 1Claw. Returns an API key (plt_ prefix) that must be saved immediately. */ post: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["CreatePlatformAppRequest"]; }; }; responses: { /** @description Platform app created */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PlatformAppCreatedResponse"]; }; }; /** @description Invalid request */ 400: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Only human users can register platform apps */ 403: { headers: { [name: string]: unknown; }; content?: never; }; }; }; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/apps/{appId}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Get platform app details */ get: { parameters: { query?: never; header?: never; path: { appId: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Platform app details */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PlatformAppResponse"]; }; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; put?: never; post?: never; /** Delete platform app */ delete: { parameters: { query?: never; header?: never; path: { appId: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Soft-deleted; slug released for reuse within the org */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PlatformAppDeleteResponse"]; }; }; /** @description Only human users can delete platform apps */ 403: { headers: { [name: string]: unknown; }; content?: never; }; }; }; options?: never; head?: never; /** Update platform app */ patch: { parameters: { query?: never; header?: never; path: { appId: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["UpdatePlatformAppRequest"]; }; }; responses: { /** @description Updated platform app */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PlatformAppResponse"]; }; }; }; }; trace?: never; }; "/v1/platform/apps/{appId}/transfer-ownership": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Transfer platform app to another organization * @description Moves the platform app record to another organization. Requires org * owner/admin in the source org and step-up auth (`X-Auth-Confirm`, * purpose `platform.app.transfer`). End-user connections and provisioned * resources remain in their original organizations. */ post: operations["transferPlatformAppOwnership"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/apps/{appId}/rotate-key": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Rotate platform API key * @description Generate a new API key for the platform app. The old key is immediately invalidated. Returns the new key (one-time). */ post: { parameters: { query?: never; header?: never; path: { appId: string; }; cookie?: never; }; requestBody?: { content: { "application/json": { /** * Format: date-time * @description Optional expiration for the new key. */ api_key_expires_at?: string | null; }; }; }; responses: { /** @description New key generated */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { /** @description The new API key (shown once) */ api_key?: string; api_key_prefix?: string; /** Format: date-time */ api_key_expires_at?: string | null; }; }; }; /** @description Only human users can rotate platform keys */ 403: { headers: { [name: string]: unknown; }; content?: never; }; }; }; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/apps/{appId}/stats": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Get platform app statistics * @description Returns aggregate statistics about a platform app's connected users, bootstraps, and grants. */ get: operations["getPlatformAppStats"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/apps/{appId}/webhooks": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Platform webhook delivery catalog * @description Returns whether `webhook_url` is configured and the event types delivered to * the platform app webhook (payload includes `connection_id` when applicable). * Org-scoped webhook subscriptions (`GET /v1/webhooks`) are separate. */ get: operations["getPlatformWebhooks"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/apps/{appId}/rotate-webhook-secret": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Rotate webhook secret * @description Generate a new webhook signing secret for the platform app. The old secret is immediately invalidated. Returns the new secret (one-time). */ post: operations["rotatePlatformWebhookSecret"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/apps/{appId}/templates": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** List templates */ get: { parameters: { query?: never; header?: never; path: { appId: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description List of templates */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PlatformTemplateResponse"][]; }; }; }; }; put?: never; /** * Create bootstrap template * @description Create a template that defines what vault, agents, and policies to bootstrap for each connected user. */ post: { parameters: { query?: never; header?: never; path: { appId: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["CreateTemplateRequest"]; }; }; responses: { /** @description Template created */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PlatformTemplateResponse"]; }; }; }; }; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/apps/{appId}/templates/{template_id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Get a bootstrap template * @description Returns the full template spec for a platform app. plt_ or user JWT. */ get: operations["getPlatformTemplate"]; put?: never; post?: never; /** Delete a bootstrap template */ delete: operations["deletePlatformTemplate"]; options?: never; head?: never; /** * Update a bootstrap template * @description Update an existing template's name, description, spec, or active status. */ patch: operations["updatePlatformTemplate"]; trace?: never; }; "/v1/platform/apps/{appId}/fleets/{template_id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Fleet summary for a template * @description Every agent this template provisioned, as one cohort: how many there are, how they split across the template versions they were built from, and how many a previous rollout declined to touch. plt_ or user JWT. */ get: operations["getFleet"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/apps/{appId}/fleets/{template_id}/agents": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** List the agents in a fleet */ get: operations["listFleetAgents"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/apps/{appId}/fleets/{template_id}/bulk-patch": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Patch every agent in a fleet * @description Applies one patch to every agent in the cohort. The field allowlist is deliberately narrower than a single-agent PATCH: guardrails and capability flags (intents_api_enabled, execution_intents_enabled) cannot be changed here, because at cohort scale nobody reviews the change per agent. Read the allowlist from bulk_patchable_fields on the fleet summary rather than hard-coding it. A field outside it returns 400 naming the field. */ post: operations["bulkPatchFleet"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/apps/{appId}/fleets/{template_id}/rollout": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Roll the current template version out to its fleet * @description Brings every agent in the cohort up to the template's current version. An agent changed outside fleet control is skipped rather than corrected, and the fields that caused the skip are recorded on it. force=true overrides that skip but still cannot carry a guardrail or a capability flag. dry_run=true reports what would happen and claims nothing, so it never blocks a real rollout. Only one rollout may run per template at a time; a second returns 409. */ post: operations["rolloutFleet"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/apps/{appId}/fleets/{template_id}/pause": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Deactivate every agent in a fleet * @description Sets is_active=false on the whole cohort. The blast radius is the point: this exists for the moment an operator needs a thousand agents to stop at once. */ post: operations["pauseFleet"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/apps/{appId}/templates/{template_id}/preview": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Preview resolved template spec * @description Resolves `{{params.*}}` and `{{subject.*}}` placeholders in a template spec * without provisioning resources. Useful for validating parameterized bootstrap templates. */ post: { parameters: { query?: never; header?: never; path: { appId: string; template_id: string; }; cookie?: never; }; requestBody?: { content: { "application/json": components["schemas"]["TemplatePreviewRequest"]; }; }; responses: { /** @description Resolved template spec */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["TemplatePreviewResponse"]; }; }; 404: components["responses"]["NotFound"]; }; }; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/users/upsert": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Provision or look up a platform user * @description Upserts a user using either an OIDC subject_token (verified against the platform app's JWKS) or an email address. Returns the user handle and connection ID. */ post: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["UpsertPlatformUserRequest"]; }; }; responses: { /** @description Existing user found */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PlatformUserResponse"]; }; }; /** @description New user created */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PlatformUserResponse"]; }; }; /** @description User exists in a different organization. Contains a link_required payload with an OAuth authorize URL for cross-org consent. */ 409: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PlatformUserLinkRequiredResponse"]; }; }; }; }; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/siwe/challenge": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Issue SIWE nonce * @description Creates a one-time nonce for Sign-In With Ethereum user provisioning. * Requires platform (`plt_`) authentication. The nonce expires in 5 minutes. */ post: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: { content: { "application/json": components["schemas"]["SiweChallengeRequest"]; }; }; responses: { /** @description Nonce issued */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["SiweChallengeResponse"]; }; }; /** @description SIWE domain not configured */ 400: { headers: { [name: string]: unknown; }; content?: never; }; }; }; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/apps/{appId}/users": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * List connected users * @description List all users connected to this platform app. */ get: { parameters: { query?: never; header?: never; path: { appId: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Connected users */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { users: components["schemas"]["PlatformConnectedUserResponse"][]; }; }; }; }; }; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/connections/{connectionId}/bootstrap": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Bootstrap resources for a connected user * @description Executes a template to create vault, agent, and policies for the connected user. Returns a claim URL and token for the user to claim their resources. */ post: { parameters: { query?: never; header?: never; path: { connectionId: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["BootstrapRequest"]; }; }; responses: { /** @description Resources bootstrapped */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["BootstrapResponse"]; }; }; }; }; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/connections/{connectionId}/reissue-claim": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Reissue a claim URL * @description Mints a fresh 10-minute claim token for an already-bootstrapped connection without re-provisioning resources. Use when the original claim URL has expired. */ post: { parameters: { query?: never; header?: never; path: { connectionId: string; }; cookie?: never; }; requestBody?: { content: { "application/json": { /** @description Optional redirect URL after claim */ return_to?: string; }; }; }; responses: { /** @description New claim URL issued */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { claim_url?: string; claim_token?: string; /** @description Seconds until expiry (600 = 10 min) */ expires_in?: number; /** Format: uuid */ connection_id?: string; }; }; }; /** @description Connection not yet bootstrapped */ 400: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Connection not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/connections/{connectionId}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Get connection details * @description Returns connection status, claim state, wallet address, and provisioned resource IDs. * Use for polling the claim loop after bootstrap. */ get: { parameters: { query?: never; header?: never; path: { connectionId: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Connection details */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ConnectionDetailResponse"]; }; }; 404: components["responses"]["NotFound"]; }; }; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/connections/{connectionId}/usage": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Get per-connection usage * @description Returns inference spend for the current UTC month for this connection. */ get: { parameters: { query?: never; header?: never; path: { connectionId: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Usage summary */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ConnectionUsageResponse"]; }; }; 404: components["responses"]["NotFound"]; }; }; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/connections/{connectionId}/entitlements": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * List entitlement evaluations * @description Returns on-chain entitlement watch status for the connection. */ get: { parameters: { query?: never; header?: never; path: { connectionId: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Entitlement watches */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["EntitlementsListResponse"]; }; }; 404: components["responses"]["NotFound"]; }; }; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/connections/{connectionId}/entitlements/refresh": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Refresh entitlement evaluations * @description Triggers an immediate entitlement monitor cycle for this connection's org. */ post: { parameters: { query?: never; header?: never; path: { connectionId: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Refresh accepted */ 202: { headers: { [name: string]: unknown; }; content?: never; }; 404: components["responses"]["NotFound"]; }; }; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/apps/{appId}/audit": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Platform audit log * @description Returns audit events related to this platform app. */ get: { parameters: { query?: { limit?: number; offset?: number; }; header?: never; path: { appId: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Audit events */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { events?: Record[]; }; }; }; }; }; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/connected-apps": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * List connected apps (user side) * @description Returns platform apps connected to the calling user's account. */ get: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Connected apps */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { connected_apps?: components["schemas"]["ConnectedAppResponse"][]; }; }; }; }; }; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/connected-apps/{connectionId}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; post?: never; /** * Disconnect a platform app * @description Disconnect the calling user from a platform app. */ delete: { parameters: { query?: never; header?: never; path: { connectionId: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Disconnected */ 204: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Connection not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; options?: never; head?: never; /** * Update connection delegation * @description Toggle delegation and update delegation scopes for a connected platform app. User-only. */ patch: operations["updateConnectionDelegation"]; trace?: never; }; "/v1/platform/connections/{connectionId}/delegation-log": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Delegation audit log * @description List delegated actions performed by a platform app on behalf of this user. */ get: operations["getDelegationLog"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/connections/{connectionId}/grant": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Grant platform app access to vaults/agents * @description User-authenticated. Grant the platform app access to selected vaults and agents. * Validates user ownership of all requested resources. Creates platform_user_grants * entries and merges resource IDs into the connection record. */ post: { parameters: { query?: never; header?: never; path: { connectionId: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["GrantResourcesRequest"]; }; }; responses: { /** @description Grants created */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["GrantResourcesResponse"]; }; }; /** @description No vault_ids or agent_ids provided */ 400: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Resource not owned by caller */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Connection not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/connections/{connectionId}/grants": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * List active resource grants for a connection * @description User-authenticated. Returns active (non-revoked) grants for the connection. */ get: { parameters: { query?: never; header?: never; path: { connectionId: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Grant list */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["GrantListResponse"]; }; }; /** @description Connection not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/connections/{connectionId}/grants/{grantId}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; post?: never; /** * Revoke a resource grant * @description User-authenticated. Revoke a specific resource grant by ID. */ delete: { parameters: { query?: never; header?: never; path: { connectionId: string; grantId: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Grant revoked */ 204: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Grant not found or already revoked */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/claim/{token}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Preview a claim token * @description Verify a claim token and preview what was provisioned (app name, vaults, agents, policies). * Public endpoint — the token itself is the authentication. */ get: { parameters: { query?: never; header?: never; path: { /** @description The `ct_` prefixed claim token from the bootstrap response */ token: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Claim preview */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ClaimPreviewResponse"]; }; }; /** @description Invalid or expired claim token */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; put?: never; /** * Redeem a claim token * @description Redeem a one-time claim token, marking the connection as claimed. * Public endpoint — the token itself is the authentication. Returns 409 if already claimed, 410 if expired. */ post: { parameters: { query?: never; header?: never; path: { /** @description The `ct_` prefixed claim token from the bootstrap response */ token: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Claim redeemed */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ClaimRedeemResponse"]; }; }; /** @description Invalid claim token */ 404: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Claim token already used */ 409: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Claim token has expired */ 410: { headers: { [name: string]: unknown; }; content?: never; }; }; }; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/apps/{appId}/spend-policies": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * List spend policies for app * @description Returns all spend policies configured for the platform app. */ get: operations["listSpendPolicies"]; put?: never; /** * Create wallet spend policy * @description Create an app-wide spend policy that governs what embedded wallet users * can do with their wallets. Policies apply to all connected users by default * and can be overridden per-user via connection-level policies. */ post: operations["createSpendPolicy"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/apps/{appId}/spend-policies/{policyId}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Get a spend policy by ID */ get: operations["getSpendPolicy"]; put?: never; post?: never; /** Delete a spend policy */ delete: operations["deleteSpendPolicy"]; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/connections/{connectionId}/spend-policy": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Get effective spend policy for a connection * @description Returns the effective spend policy for the connected user, resolving * per-user overrides before app-level defaults. Requires plt_ platform auth. */ get: operations["getConnectionSpendPolicy"]; /** * Set per-user spend policy override * @description Replace the per-user spend policy for a connected user (deactivates the * previous active row, then inserts). Requires plt_ platform auth. * Optional `Idempotency-Key` header must cover the full request body — reusing * the same key with different parameters returns 409. */ put: operations["setUserSpendPolicy"]; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/connections/{connectionId}/approvals": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * List approvals for a platform connection * @description Returns approvals assigned to the connection's user, filtered to agents * provisioned on the connection. Requires plt_ platform auth. */ get: operations["listConnectionApprovals"]; put?: never; /** Create an approval on a platform connection */ post: operations["createConnectionApproval"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/connections/{connectionId}/approvals/{approvalId}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Get a connection-scoped approval */ get: operations["getConnectionApproval"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/connections/{connectionId}/pending-approvals": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * List pending consensus approvals for a connection * @description Returns pending approvals for agents provisioned on the connection, * including `action_payload` and `payload_hash` for consensus UX. * Requires plt_ platform auth. */ get: operations["listConnectionPendingApprovals"]; put?: never; /** * Create a pending consensus approval for a connection agent * @description Platform apps submit over-cap or consensus-gated actions on behalf of a * connected user's agent. When `policy_id` is omitted, the server resolves the * matching agent `consensus_trigger` policy from `action_payload` (chain, to, value). * Returns **202** with `pending_approval_id` and `payload_hash` for decide/execute. * Requires plt_ auth; agent must be provisioned on the connection. */ post: operations["createConnectionPendingApproval"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/connections/{connectionId}/pending-approvals/{approvalId}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Get a connection-scoped pending approval (with payload_hash) */ get: operations["getConnectionPendingApproval"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/connections/{connectionId}/pending-approvals/{approvalId}/decide": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Decide a pending approval for a connection user * @description Platform apps vote on behalf of the connected user after verifying intent * out-of-band (e.g. wallet mandate). Requires `payload_hash` matching the * pending row. Accepts `decision`: `approve` or `reject` (aliases `approved` / * `rejected`). plt_ auth only; scoped to agents on the connection. */ post: operations["decideConnectionPendingApproval"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/connections/{connectionId}/approvals/{approvalId}/decide": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Decide a mobile/agent approval for a connection user * @description Platform apps decide agent approval requests on behalf of the connected user. * Accepts `decision`: `approved` or `rejected` (aliases `approve` / `reject`). * plt_ auth only. */ post: operations["decideConnectionApproval"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/connections/{connectionId}/signing-keys": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * List signing keys for a connection agent * @description Returns public signing-key metadata (chain, address, public_key, curve) for * agent(s) provisioned on the connection. Never includes private keys. * When multiple agents exist, pass `agent_id` query param. plt_ auth only. */ get: operations["listConnectionSigningKeys"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/connections/{connectionId}/signing-keys/{chain}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Get a signing key for a connection agent by chain * @description Returns public signing-key metadata for one chain on a connection agent. * Network names (e.g. `base`, `sepolia`) resolve to canonical signing keys * (e.g. `ethereum`). Never includes private keys. plt_ auth only. */ get: operations["getConnectionSigningKey"]; put?: never; post?: never; /** * Deactivate a signing key for a connection agent * @description Deactivates the signing key for an agent provisioned on the connection. * When multiple agents exist, pass `agent_id` query param. plt_ auth only. */ delete: operations["deactivateConnectionSigningKey"]; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/connections/{connectionId}/agents/{agentId}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Alias for PATCH on this path — same handler, same limited settings. Present because some clients cannot send PATCH. */ post: operations["postConnectionAgent"]; delete?: never; options?: never; head?: never; /** * Update limited agent settings for a connection * @description Platform-scoped agent update for connected end-users. Allows enabling Intents API, * Execution Intents, and updating the default system prompt without human dashboard access. * Agent must be provisioned on the connection. plt_ auth only. */ patch: operations["patchConnectionAgent"]; trace?: never; }; "/v1/platform/connections/{connectionId}/portfolio": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Portfolio for connection agents * @description Aggregates signing-key and smart-account balances for agents provisioned on * the connection. plt_ auth only. */ get: operations["getConnectionPortfolio"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/connections/{connectionId}/balances": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Balances alias for connection portfolio * @description Alias of `GET .../portfolio`. plt_ auth only. */ get: operations["getConnectionBalances"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/connections/{connectionId}/automations": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** List automations for connection agents */ get: operations["listConnectionAutomations"]; put?: never; /** Create automation for a connection agent */ post: operations["createConnectionAutomation"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/connections/{connectionId}/automations/{automationId}/runs/{runId}/cancel": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Cancel an automation run (connection-scoped) */ post: operations["cancelConnectionAutomationRun"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/connections/{connectionId}/memory/{namespace}/{key}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Get agent memory entry (connection-scoped) */ get: operations["getConnectionMemory"]; /** Upsert agent memory entry (connection-scoped) */ put: operations["putConnectionMemory"]; post?: never; /** Delete agent memory entry (connection-scoped) */ delete: operations["deleteConnectionMemory"]; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/connections/{connectionId}/runtimes": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Create a runtime for a connection agent * @description Creates a Cloud Runtime in the end-user's org for an agent on this connection. * Use instead of `POST /v1/runtimes` with a plt_ key (which resolves to the platform org). * App must verify user intent out-of-band (e.g. wallet mandate) before calling. */ post: operations["createConnectionRuntime"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/connections/{connectionId}/runtimes/{runtimeId}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Get a connection runtime (plt_ scoped) * @description Returns a runtime provisioned on this connection. Use instead of * `GET /v1/runtimes/{id}` with a plt_ key (which resolves to the platform org). */ get: operations["getConnectionRuntime"]; put?: never; post?: never; /** * Delete a connection runtime (plt_ scoped) * @description Removes a runtime the app provisioned on this connection. A running * runtime is stopped at the provider first and any runtime add-on * subscription is cancelled before the record is removed. Scoped like * the GET: the connection must belong to the app and list the runtime. * This is the cleanup path for a mis-provisioned runtime; * `DELETE /v1/runtimes/{id}` does not accept a plt_ key. */ delete: operations["deleteConnectionRuntime"]; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/connections/{connectionId}/passkeys/enroll/begin": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Begin passkey enrollment for a connected user (always 403) * @deprecated * @description **This endpoint always returns 403 and cannot be made to work.** * The description here previously said platform apps should use it * instead of `POST /v1/auth/passkeys/register/begin`, which was * wrong and cost integrators a WebAuthn ceremony to discover. * * A passkey enrolled this way is login-capable: it can be asserted * through the public sign-in flow to mint a full, non-delegated * user session, so an app that enrolled one would hold a credential * stronger than the delegation boundary it operates under. The * capability was removed for that reason and will not return. * * **A passkey is enrolled by the user, in their own session**, via * `POST /v1/auth/passkeys/register/begin`. For a connected user * that means completing the claim flow on the connection first. * * To *use* a passkey a connected user already has, see: * - `GET /v1/platform/connections/{connectionId}/passkeys` — * whether the confirm step can be offered at all. * - `POST /v1/platform/connections/{connectionId}/passkeys/tx-assert/begin` * and `.../complete` — ask that user to touch their * authenticator over a specific digest. */ post: operations["connectionPasskeyEnrollBegin"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/connections/{connectionId}/passkeys/enroll/complete": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Complete passkey enrollment for a connected user (always 403) * @deprecated * @description **This endpoint always returns 403.** See * `POST /v1/platform/connections/{connectionId}/passkeys/enroll/begin` * for why, and for the paths that do work. */ post: operations["connectionPasskeyEnrollComplete"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/connections/{connectionId}/passkeys": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Whether a connected user can be asked for a passkey touch * @description Answers one question: can this app offer the passkey confirm * step to this user? No credential material is returned — not * credential ids, not public keys, not enrolment times. * * `count` is what matters. Passkeys are bound to the domain they * were registered on, so an account can hold credentials that this * domain cannot offer; `count` reports only those usable on * `rp_id`, while `registered_count` is the raw total. Branch on * `has_passkey`. */ get: operations["listConnectionPasskeys"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/connections/{connectionId}/passkeys/tx-assert/begin": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Ask a connected user to touch their authenticator * @description Begins a WebAuthn assertion bound to `tx_digest`, for the user on * this connection. The connection in the path is the addressing * that `POST /v1/auth/passkeys/tx-assert/begin` lacks: that route * resolves the *calling* principal, so with a `plt_` key it looks * up the app itself and reports no passkeys. An app never needs to * hold an email to name one of its users. * * Returns 404 when the user has no passkey usable on this domain — * check `GET /v1/platform/connections/{connectionId}/passkeys` * first and only offer the step when `has_passkey` is true. */ post: operations["connectionPasskeyTxAssertBegin"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/connections/{connectionId}/passkeys/tx-assert/complete": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Verify the touch and return proof of it * @description Verifies the assertion — origin, rpIdHash, the user-verified * flag, the signature, and a sign count that must increase, which * is what catches a cloned authenticator — and returns a * short-lived token proving this user touched their authenticator * over that digest. * * The token records that a platform app requested it. That * provenance is deliberate: it proves the touch to your * application, and it is **refused** as authorization for a * 1Claw treasury transfer. A user consenting to your action has * not consented to moving funds, and those remain a separate * assertion from the user's own session. */ post: operations["connectionPasskeyTxAssertComplete"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/connections/{connectionId}/agents/{agentId}/chat": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Chat with a connection agent (plt_ scoped) * @description Send a chat message to an agent provisioned on this connection, acting as the * connected end-user. Use instead of `POST /v1/agents/{id}/chat` with a plt_ key. */ post: operations["connectionAgentChat"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/approvals": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * List approvals * @description Humans get their own approval queue. An agent caller gets only the * approvals it created (`agent_id` = caller) — enough to recover one whose * id was lost across a restart, never the organization's queue. Supports * filtering by status and pagination. */ get: operations["listApprovals"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/approvals/{approval_id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Get approval details * @description Returns details for a single approval by ID. */ get: operations["getApproval"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/approvals/{approval_id}/cancel": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Cancel a pending approval (requester) * @description Withdraws a pending approval. Callable by the agent that requested it or * the human it was addressed to. First answer wins: if the approval was * already decided or expired, the existing record is returned unchanged * (200) rather than an error — the caller's next question is what the * answer was. A cancellation is delivered to webhook subscribers as * `approval.decided` with `decision: "cancelled"`, and audited as * `approval.cancelled`. */ post: operations["cancelApproval"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/approvals/{approval_id}/status": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Poll approval status (agent-only) * @description Lightweight status poll for agents waiting on human approval. * Returns `status` and `expires_at` only. Agents may only poll * approvals they created (`agent_id` must match the caller). */ get: operations["getApprovalStatus"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/approvals/{approval_id}/decide": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Approve or reject * @description Submit a decision (approve or reject) for a pending approval. * Human-only. The approval must be in `pending` status. * For `card_order` approvals, approving auto-executes the x402 payment; * rejecting marks the card as `rejected`. * Risk tier 2+ approvals require step-up authentication via * `X-Auth-Confirm` (account password or `rat_` re-auth token from * `POST /v1/auth/reauth/begin` + `complete`). Risk tier 3 requires * passkey or TOTP re-auth token. */ post: operations["decideApproval"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/approvals/quick-decide": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * One-click approve or deny (email link) * @description Public endpoint (no Bearer auth). The `token` query param is the * authenticator — SHA-256 hashed, single-use, 7-day TTL. On success * redirects to `{public_url}/approvals/{id}?decided=true`. * Auto-executes approved `card_order` and `policy_change` actions. */ get: operations["quickDecideApproval"]; put?: never; /** One-click approve or deny, as an API call. The GET on this path is the preview an email link opens; this is the decision itself. */ post: operations["quickDecide"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/deposit-destinations": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** List deposit destinations */ get: operations["listDepositDestinations"]; put?: never; /** Create deposit destination */ post: operations["createDepositDestination"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/deposit-destinations/{id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Get deposit destination */ get: operations["getDepositDestination"]; put?: never; post?: never; delete?: never; options?: never; head?: never; /** Update deposit destination status */ patch: operations["updateDepositDestination"]; trace?: never; }; "/v1/internal-accounts": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** List internal accounts */ get: operations["listInternalAccounts"]; put?: never; /** Create internal account */ post: operations["createInternalAccount"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/internal-accounts/{id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Get internal account */ get: operations["getInternalAccount"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/internal-accounts/{id}/ledger": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Get account ledger */ get: operations["getInternalAccountLedger"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/internal-transfers": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Transfer between internal accounts */ post: operations["createInternalTransfer"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/fiat/onramp/session": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Create fiat onramp session */ post: operations["createFiatOnrampSession"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/fiat/offramp/initiate": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Initiate fiat offramp */ post: operations["initiateFiatOfframp"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/social-login": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Social login (Google, Apple, Discord) */ post: operations["socialLogin"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/passkeys/tx-assert/begin": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Begin passkey transaction authorization * @description Requires `tx_digest` — SHA-256 hex of the canonical digest for the * treasury action being authorized (`send` or `swap`). The server * recomputes this digest on send/swap and rejects passkey tokens that * do not match. */ post: operations["passkeyTxAssertBegin"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/passkeys/tx-assert/complete": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Complete passkey transaction authorization */ post: operations["passkeyTxAssertComplete"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/email-otp/send": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Send email OTP code * @description Sends a 6-digit one-time code to the specified email address. * No authentication required. Rate-limited per IP and per email. */ post: operations["sendEmailOtp"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/email-otp/verify": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Verify email OTP and get JWT * @description Verifies the 6-digit code sent to the user's email. Optionally * auto-provisions treasury wallets for the specified chains. Returns a JWT * for subsequent API calls. * * An unrecognized address is rejected unless the request carries * `platform_app_id` or sets `allow_signup`. */ post: operations["verifyEmailOtp"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/oauth/authorize": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Get OAuth consent info * @description Returns information about the platform app requesting authorization so the * UI can display a consent screen. Used by the 1Claw-hosted consent page. */ get: operations["getOAuthConsent"]; put?: never; /** * Submit OAuth consent decision * @description The user approves or denies the authorization request. On approval, returns * a redirect URL containing the authorization code. On denial, returns a * redirect URL with an error parameter. */ post: operations["submitOAuthConsent"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/x402/topup": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * x402 ledger top-up (agent door) * @description The wallet rail for Shroud (Shroud AI plan). Without `X-PAYMENT` the response is a * **402** quote (`x402Version`, `accepts[]` with `payTo`, `maxAmountRequired`, `resource`) * for `amount_usd` (default $1) of USDC on Base. With a signed EIP-3009 `X-PAYMENT` * the facilitator verifies it, the proof is claimed once, the payer wallet's org * ledger is credited in micro-USD, and the facilitator settles. * * **Payment is the account.** An unknown wallet's first settled top-up provisions a * shadow org, one Shroud-enabled agent and one `sk-shroud-v1` router key keyed on the * wallet (returned once as `router_key`), after screening the wallet against the OFAC * SDN list (fails closed when the list is missing or stale) and the caller's region * against the custody geofence. Same wallet = same org on every later top-up. The * response always carries a ≤60 s `access_token` for the wallet's agent so the * gateway can serve the paid request immediately. The Shroud gateway drives this for * `Authorization: Bearer x402` requests and relays the quote or the result. */ post: operations["x402Topup"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/oauth/token": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Exchange authorization code for tokens * @description Standard OAuth 2.0 token endpoint. Exchanges an authorization code for an * access token and optional OIDC ID token. Supports PKCE via `code_verifier`. */ post: operations["exchangeOAuthToken"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/oauth/userinfo": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Get authenticated user info (OIDC UserInfo) * @description Standard OIDC UserInfo endpoint. Returns claims about the authenticated user * based on the granted scopes. */ get: operations["getOAuthUserInfo"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/oauth/revoke": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Revoke an OAuth token (RFC 7009) * @description Revokes an access token or refresh token. The authorization server * invalidates the token so it can no longer be used. Follows RFC 7009. */ post: operations["revokeOAuthToken"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/oauth/consents/{app_id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; post?: never; /** * Revoke consent for a platform app * @description Revokes the user's previously granted OAuth consent for a specific platform app. * All active tokens issued to the app are invalidated and the consent record is deleted. */ delete: operations["revokeOAuthConsent"]; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/risk/events": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * List risk events * @description Returns risk events detected by the risk engine, ordered by most recent first. * Filter by severity or principal type. */ get: operations["listRiskEvents"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/risk/verdicts": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * List risk verdicts * @description Returns all active risk verdicts for the caller's organization. */ get: operations["listRiskVerdicts"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/risk/verdicts/{principal_type}/{principal_id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Get risk verdict for a principal * @description Returns the current risk verdict for a specific user or agent. */ get: operations["getRiskVerdict"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/risk/honeytokens": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * List honeytokens * @description Returns all honeytokens (canary secrets) configured for the caller's organization. */ get: operations["listHoneytokens"]; put?: never; /** * Create a honeytoken * @description Register a secret path as a honeytoken (canary). Any access to this secret * triggers a risk event and increments the trigger counter. */ post: operations["createHoneytoken"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/risk/honeytokens/{id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; post?: never; /** * Delete a honeytoken * @description Remove a honeytoken registration. The underlying secret is not affected. */ delete: operations["deleteHoneytoken"]; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/tokens": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** List known tokens */ get: operations["listKnownTokens"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/chains/{chain_name}/tokens": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** List tokens for a specific chain */ get: operations["listTokensByChain"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/admin/tokens": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Create a known token (admin only) */ post: operations["createKnownToken"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/admin/tokens/{token_id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; post?: never; /** Delete a known token (admin only) */ delete: operations["deleteKnownToken"]; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/pay/settings": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; post?: never; delete?: never; options?: never; head?: never; /** * Set an agent's payment guardrails * @description Human callers only. These are the numbers every payment decision is measured against — the per-payment cap, the daily limit, the recipient allowlist, whether a passkey is required at all, and whether the agent may hold a spending grant. An agent that could set them would be setting its own ceiling. Omitted fields are left alone; values can currently be set but not cleared. */ patch: operations["updatePaySettings"]; trace?: never; }; "/v1/agents/{agent_id}/pay/prepare": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Prepare an x402 payment from a 402 challenge * @description Send the exact bytes the paywall served. The vault parses them, pins the amount that will actually be signed (not the `maxAmountRequired` ceiling), computes the digest a person will authorize, and stores the preimage so the authorize page renders from what the vault saw rather than what the caller claims. `authorization` in the response says what the payment needs next: `allow`, `require_passkey`, `require_grant`, or `deny: `. */ post: operations["preparePayment"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/pay/sign": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Sign a prepared x402 payment * @description Evaluates the agent's payment policy, redeems a passkey assertion or consumes a spending grant, then signs. The daily limit is charged at signing time: a payment that is signed and then lost still consumed authority, and only a vault-verified reconciliation returns it. Returns the `X-PAYMENT` header value, never a key. */ post: operations["signPayment"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/pay/grants/prepare": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Prepare a spending grant (step one of two) * @description Fixes the grant terms and a server-side nonce and returns the `grant_digest` the person must assert over with a passkey (`action=x402_grant`). Then call `POST .../pay/grants` with the same terms, the digest, and the passkey token. Preparations are single-use, bound to the caller and agent, and expire after ten minutes. The nonce never leaves the server, so the digest cannot be recomputed for different terms. Human callers only; terms are validated against the agent's maximum cap and window here as well. */ post: operations["preparePayGrant"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/pay/grants": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Create a spending grant * @description Human callers only. Requires a passkey assertion over the digest of exactly these terms, and stays within the agent's own maximum cap and window — a grant is a delegation inside the limits already set, not a way around them. */ post: operations["createPayGrant"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/pay/{payment_id}/result": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Report the outcome of a payment * @description Best-effort reporting. Moves the audit trail forward and nothing else — `settled: false` does **not** release daily-limit headroom, and the response says `limit_released: false` so the caller need not infer it. */ post: operations["reportPaymentResult"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/pay/{payment_id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Payment status */ get: operations["getPayment"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/pay-sessions/{session_id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Read a pay session (authorize page and CLI poll) * @description Requires the token of the human the session was raised for, not an agent token and not merely a member of the same org. A session UUID is not authorization once the response can carry signing credentials. */ get: operations["getPaySession"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/pay-sessions/{session_id}/authorize": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Authorize a pay session with a passkey assertion * @description Called by the authorize page after the person touches their authenticator. The assertion is redeemed here against this session's own payment digest and the session is marked authorized; no token is handed back to be polled for, so nothing worth stealing is left in the row. Requires the token of the human the session was raised for. */ post: operations["authorizePaySession"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/pay-grants/{grant_id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; post?: never; /** Revoke a spending grant */ delete: operations["revokePayGrant"]; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/cards/order": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Order a payment card (x402) * @description Order a prepaid or gift card for an agent. Drives the x402 payment flow server-side using the agent's Ethereum signing key (funded with USDC on Base). Requires `cards_enabled` on the agent and a Pro or higher plan. An `Idempotency-Key` header is required. When `card_require_approval` is true (default), the order is held in `awaiting_approval` until a human approves via the dashboard, mobile app, or email one-click link; payment runs only after approval. */ post: operations["orderCard"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/cards": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * List payment cards * @description List cards for the caller (agents see only their own). Always masked (last4 only). */ get: operations["listCards"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/cards/import": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Import a card (human-only) * @description Manually import an existing card. Full storage mode — PAN stored encrypted, CVV as a one-time-read secret. Human-only. */ post: operations["importCard"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/cards/gift-cards/search": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Search gift-card brands * @description Search available Laso gift-card brands/servers for the org's Laso account. */ post: operations["searchGiftCards"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/cards/{card_id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Get a payment card * @description Get a single card (masked — last4 only). */ get: operations["getCard"]; put?: never; post?: never; delete?: never; options?: never; head?: never; /** Update a card's reveal policy (human-only) */ patch: operations["updateCard"]; trace?: never; }; "/v1/cards/{card_id}/reveal": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Reveal card details * @description Reveal full card details (PAN/CVV or gift-card redemption). Humans must re-authenticate with their account password via the `X-Auth-Confirm` header. Agents may reveal only when a human has enabled a per-card reveal policy. Once revealed, the card can be used anywhere up to its balance — 1Claw has no further control. */ post: operations["revealCard"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/cards/{card_id}/void": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Void a card * @description 1Claw-level lock that blocks all further reveals/refreshes. Forward-looking only — a card revealed before void remains live. */ post: operations["voidCard"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/cards/{card_id}/refresh": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Refresh a card's balance * @description Proxy Laso refresh to update balance/status. Rate-limited to once per 5 minutes per card (429 on exceed). */ post: operations["refreshCard"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/automations": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** List automations */ get: operations["listAutomations"]; put?: never; /** Create automation */ post: operations["createAutomation"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/automations/{automationId}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Get automation */ get: operations["getAutomation"]; put?: never; post?: never; /** Delete automation */ delete: operations["deleteAutomation"]; options?: never; head?: never; /** Update automation */ patch: operations["updateAutomation"]; trace?: never; }; "/v1/automations/{automationId}/trigger": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Trigger automation */ post: operations["triggerAutomation"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/automations/{automationId}/runs": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** List automation runs */ get: operations["listAutomationRuns"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/automations/{automationId}/runs/{runId}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Get automation run * @description Get details of a single automation run including step results and context. */ get: operations["getAutomationRun"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/automations/assist/draft": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Draft automation from natural language */ post: operations["assistDraftAutomation"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/automations/assist/session": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Mint short-lived Assist session token */ post: operations["assistAutomationSession"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/automations/webhook/{automationId}/{token}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Public webhook trigger */ post: operations["webhookTriggerAutomation"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/automations/{automationId}/rotate-webhook-token": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Rotate webhook token */ post: operations["rotateAutomationWebhookToken"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/automations/{automationId}/runs/{runId}/cancel": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Cancel a running automation run * @description Cancel a run that is currently in `running` or `awaiting_approval` status. * Returns the updated run with status `cancelled`. */ post: operations["cancelAutomationRun"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/automations/{automationId}/runs/{runId}/resume": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Resume a run parked on an approval * @description An `approval_request` step parks the run in `awaiting_approval` and stops the * clock. Deciding that approval — via the API, the one-tap email link or the * phone — resumes the run automatically: `approved` continues from the next * step, `rejected` fails the run with the reason. This route is the hand-off * for a decision made elsewhere: it marks the approval approved on the caller's * behalf and continues the run. Human-only. Idempotent — a run that is not * parked is returned unchanged. Later steps see the approval step's output as * `{status, approval_id}` and the optional `payload` as `{{resume.*}}`. A * parked run that nobody decides within 72 hours becomes `timed_out`. * Emits `automation.run.resumed`. */ post: operations["resumeAutomationRun"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/automations/presets": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * List automation presets * @description Public preset gallery of ready-to-use automation templates. */ get: operations["listAutomationPresets"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/automations": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Create agent automation (agent-only) * @description Agent-scoped create for simple manual or webhook automations from chat/runtime tools. * Allowed step types: log, notify, memory_get, memory_put, wait (max 10). * Cron, swap, http, and transaction steps require human dashboard setup. * Requires agent JWT; agent_id in path must match the caller. */ post: operations["createAgentAutomation"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/runtimes": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** List runtimes */ get: operations["listRuntimes"]; put?: never; /** Create runtime */ post: operations["createRuntime"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/runtimes/{runtimeId}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Get runtime */ get: operations["getRuntime"]; put?: never; post?: never; /** Delete runtime */ delete: operations["deleteRuntime"]; options?: never; head?: never; /** Update runtime */ patch: operations["updateRuntime"]; trace?: never; }; "/v1/runtimes/{runtimeId}/start": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Start runtime */ post: operations["startRuntime"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/runtimes/{runtimeId}/stop": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Stop runtime */ post: operations["stopRuntime"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/runtimes/{runtimeId}/logs": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Get runtime logs */ get: operations["getRuntimeLogs"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/runtimes/slug-check/{slug}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Check slug availability */ get: operations["checkSlugAvailability"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/runtimes/{runtimeId}/shell/session": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Create interactive shell session * @description Human-only. Creates a short-lived WebSocket session token for the * runtime's PTY terminal. Requires step-up auth via `password`, * `totp_code`, `passkey_credential`, or `reauth_token` (from * `POST /v1/auth/reauth` with purpose `runtime_shell`). * Runtime must have `shell_access_enabled` and be running. * Enabling shell on a running runtime may require stop/start, or * the server may auto-reconcile the sidecar on connect. */ post: operations["createShellSession"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/runtimes/{runtimeId}/shell/passkey/begin": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Begin shell passkey assertion * @description Human-only. Starts a WebAuthn assertion ceremony for shell * step-up auth (social/Google users without a password). */ post: operations["beginShellPasskey"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/runtimes/{runtimeId}/chat": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Chat with a running runtime agent * @description Human-only. Proxies to the runtime container's OpenAI-compatible * `POST /v1/chat/completions` (hermes / openclaw / openclaude / opencode chat bridge). * Starts the runtime if stopped. Streams SSE when `Accept: text/event-stream` * or `stream: true`. Conversation history is ephemeral (pass `messages`). * Requires a public URL (shell access, Shroud sidecar, or HTTP hosting). */ post: operations["runtimeChat"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/memory": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** List memory namespaces */ get: operations["listMemoryNamespaces"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/memory/{namespace}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** List entries in namespace */ get: operations["listMemoryEntries"]; put?: never; post?: never; /** Delete a memory namespace and every entry in it. Destructive and not reversible; there is no per-entry confirmation. */ delete: operations["deleteMemoryNamespace"]; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/memory/{namespace}/{key}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Get memory entry */ get: operations["getMemoryEntry"]; /** Put memory entry */ put: operations["putMemoryEntry"]; post?: never; /** Delete memory entry */ delete: operations["deleteMemoryEntry"]; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/memory/search": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Semantic search */ post: operations["searchMemory"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/card": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Get agent card * @description Public endpoint returning the agent's discovery card metadata. */ get: operations["getAgentCard"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/directory": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Public agent directory * @description Browse the public directory of discoverable agents. */ get: operations["listDirectory"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/org-directory": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * List org agents * @description List agents within the caller's organization for sub-agent discovery. * Returns agents with their capabilities, enabling agent-to-agent * coordination and discovery within an org. Requires authentication. */ get: operations["listOrgDirectory"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/discovery": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; post?: never; delete?: never; options?: never; head?: never; /** Update discovery settings */ patch: operations["updateDiscoverySettings"]; trace?: never; }; "/v1/platform/marketplace": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Public marketplace * @description Browse the public platform marketplace of listed apps and agents. Returns approved platform apps with category, tags, pricing summaries, and screenshots. */ get: operations["listMarketplace"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/chat": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Send chat message * @description Send a message to an agent and receive a response via Shroud LLM. * Supports SSE streaming when Accept: text/event-stream is set. * * Agents can call this endpoint on other agents within the same * organization for inter-agent communication (agent-to-agent chat). * The caller must be authenticated and belong to the same org as * the target agent. */ post: operations["sendChatMessage"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/chat/conversations": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * List conversations * @description List all chat conversations for an agent. */ get: operations["listChatConversations"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/chat/conversations/{conversation_id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Get conversation * @description Get a conversation with its full message history. */ get: operations["getChatConversation"]; put?: never; post?: never; /** * Archive conversation * @description Archive (soft-delete) a chat conversation. */ delete: operations["deleteChatConversation"]; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/channels": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * List channels * @description List all messaging channels for an agent. */ get: operations["listChannels"]; put?: never; /** * Register channel * @description Register a new external messaging channel (Telegram, WhatsApp, Discord) * for an agent. Human-only. Returns the channel with its webhook URL. */ post: operations["createChannel"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/channels/{channel_id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; post?: never; /** * Delete channel * @description Delete a messaging channel. Human-only. */ delete: operations["deleteChannel"]; options?: never; head?: never; /** * Update channel * @description Update a channel's name, active status, or config. Human-only. */ patch: operations["updateChannel"]; trace?: never; }; "/v1/agents/{agent_id}/channels/{channel_id}/send": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Send outbound message * @description Send an outbound message via a registered channel. */ post: operations["sendChannelMessage"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/channels/{channel_id}/messages": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Channel message history * @description List inbound and outbound messages for a channel. */ get: operations["listChannelMessages"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/channels/{channel_id}/test": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Test channel connectivity * @description Send a test message through the channel to verify connectivity and credentials. */ post: operations["testChannel"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/webhooks/telegram/{webhook_path}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Telegram webhook * @description Public webhook endpoint for receiving Telegram bot updates. */ post: operations["telegramWebhook"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/webhooks/whatsapp/{webhook_path}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * WhatsApp webhook verification * @description Verification endpoint for WhatsApp Cloud API webhook setup. */ get: operations["whatsappWebhookVerify"]; put?: never; /** * WhatsApp webhook * @description Public webhook endpoint for receiving WhatsApp Cloud API events. */ post: operations["whatsappWebhook"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/apps/{app_id}/usage": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Usage for every connection on an app * @description Billable activity for the current month, grouped by end-user connection, * **plus what could not be charged to one**. * * The `unattributed` block is not an implementation detail. Summing only the * per-connection numbers gives a figure that will not match the invoice you * are reconciling against, and the gap is usage that belongs to a real * end-user we cannot name. * * Two kinds, deliberately kept apart: * * * `none` — no platform linkage at all. Normal for most traffic, not a problem. * * `ambiguous` — the agent belongs to several connections and no * `X-Platform-Connection` header said which. This usage belongs to * *someone*. `has_ambiguous_usage` flags it so you do not have to notice * a non-zero nested number. * * `totals` is derived from the parts, never queried separately, so it cannot * disagree with its own breakdown. */ get: operations["getAppUsage"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/apps/{app_id}/usage/export": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Usage as CSV for billing reconciliation * @description The same report as `GET /usage`, as CSV. Includes the `ambiguous`, `none` * and `total` rows — a CSV listing only connections looks complete and is * not, and whoever imports it has no way to tell. */ get: operations["exportAppUsage"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/org/apply": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Apply a chart * @description Create what the chart describes. Human users only. * * **Apply calls the same handlers the HTTP routes call.** Creating a vault * runs five gates before anything is written — the delegation scope, a name * check, control-plane consensus, a creation rate limit and the tier quota * — and creating an agent runs its own. A reconciler that wrote through the * repositories would skip all of them and would look, in review, exactly * like one that did not. * * So if your org has consensus configured on `vault.create`, applying a * chart queues an approval exactly as a dashboard click would. That resource * comes back as `awaiting_approval` rather than failing the whole chart. * * Resource kinds, in the order apply walks them: `vault`, `agent`, * `policy` (one per path pattern, named `vault:agent:path`), `connector` * (`agent/binding_name`; `authorization_url` on the result when a person * still has to sign in) and `binding` (`agent/name`, from * `spec.agents[].bindings` — declared in full with `binding_type`, `config`, * `guardrails.allowed_hosts` and an optional `credential: {vault_ref, path}` * pointing into a chart vault). A dependent resource whose vault or agent * was queued for approval this run is `skipped` with "waiting on …" and is * created by the next apply. * * Per-resource results: `created`, `patched`, `unchanged`, `skipped`, * `refused`, `awaiting_approval`, `failed`. `needs_attention` is true when * the chart is not fully applied — something is waiting on a person, whether * an approval, an OAuth sign-in, or a resource that drifted and was left * alone. * * Save `applied_state` to `.1claw/apply-state.json`. It records what apply * set, which is what lets the next run tell drift from a first apply. * * Apply creates, and patches an agent's `description`/`system_prompt` in * place through the same `update_agent` gate a dashboard edit takes. Policy * permissions, binding config and guardrails, connector presets and vault * fields are create-only: a difference is `refused` with the endpoint that * owns the change. It does not delete or prune. An apply that silently * deletes is an apply nobody runs twice. */ post: operations["applyChart"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/org/approval-learning/shadow-report": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * What would have been approved automatically * @description Every approval decision is observed, per **fingerprint bucket** — the * action, the amount band, whether the recipient was new, and who they * were. This reports the buckets a person has approved without exception, * and what promoting one would write into an agent's policy. * * Observing is not acting. In the default `shadow` mode nothing changes who * gets asked; `can_promote` is false and the promote endpoint refuses. * * Each suggestion carries `would_write_rule` — the actual rule, built by the * same function promotion uses, so the report cannot promise something * promotion would refuse. */ get: operations["getApprovalLearningShadowReport"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/org/approval-learning/{profile_id}/promote": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Turn an observed pattern into a policy rule * @description Writes a rule into the named agent's `action_approval_policy`. Human users * only, and only when the organisation is in `enforce` mode. * * **The rule covers only what was actually approved.** Five approved $5 * refunds to one customer produce `{ refund.create, asks above $10, that * recipient }` — a $49 request does not match it and still reaches a human. * * Refused when: fewer than five consecutive approvals; *any* past rejection * on the bucket (a long recent run must not hide a history of refusals); the * bucket is for a recipient never paid before; the amount band has no upper * edge; or the action grants or destroys authority. * * `widen_to_action_type` drops the amount and recipient constraints. It is * never the default and should be an explicit choice in your UI, not a * checkbox someone skims past. * * The written rule is marked `promoted_from_learning` so an operator can * tell it apart from one they wrote, and it replaces any existing rule for * the same action type — appending would leave two rules where only the * first ever applies. */ post: operations["promoteApprovalLearningProfile"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/policy-presets": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Named starting points for an agent's policy * @description Four presets an operator can choose between without reading a policy * document. Public — a description of what 1Claw offers, not tenant data. * * Each carries a `headline`: the one-line consequence someone should read * before choosing it, in the words they would use. */ get: operations["listPolicyPresets"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/policy-preset/preview": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * What a preset would change * @description Compiles a preset against this agent and reports which fields it would * **widen** — loosen relative to what the agent can already do. * * Widening detection errs toward flagging: a false positive costs one extra * approval, a false negative is a limit raised without review. Enabling a * capability widens; disabling does not. Raising a cap widens; setting a * first cap does not, because absent means unlimited. */ post: operations["previewPolicyPreset"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/directory/jobs": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * List directory jobs * @description Open jobs across every org (the board is cross-org by design). Pass `mine=true` to list this org's own jobs in every status instead. */ get: operations["listDirectoryJobs"]; put?: never; /** * Post a job to the directory board * @description Posts a task other orgs' agents can bid on. * * **`title` and `description` are inspected before they are stored.** They will be * read by other parties' language models, which makes this board a prompt-injection * distribution channel. High-confidence injection is refused with 400 naming the * field; lower-confidence content is stored with `content_warning: true` and every * response wraps it in an untrusted-content envelope. * * Limit: 10 open jobs per org. */ post: operations["createDirectoryJob"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/directory/jobs/{job_id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Get one job * @description Open jobs are public. A job in any other status is visible only to the org that posted it — an awarded or cancelled job is not board content. */ get: operations["getDirectoryJob"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/directory/jobs/{job_id}/bids": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * List bids on a job (poster only) * @description Bid contents belong to the poster alone — a competing bidder reading this list would learn every rival's price. */ get: operations["listDirectoryJobBids"]; put?: never; /** * Bid on a job * @description **Agents only** — a human posts work, an agent offers to do it. The agent must be * `discoverable`: appearing on someone's bid list is a public act. * * `summary` is inspected exactly as job text is. One bid per agent per job — * re-bidding replaces the previous bid rather than stacking, because a poster * reading five bids from one agent cannot tell which is current. * * Limit: 50 bids per agent per day. */ post: operations["createDirectoryJobBid"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/directory/jobs/{job_id}/accept/{bid_id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Award a job to a bid (poster only) * @description Awards the job and returns an A2A handoff pointing at the bidder's own `a2a_url`. **1Claw does not execute the task** — it says where to send it. The award is atomic and guarded on the job still being open, so two posters racing to award different bids cannot both succeed; the loser gets 409. */ post: operations["acceptDirectoryJobBid"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/directory/jobs/{job_id}/cancel": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Cancel a job (poster only) */ post: operations["cancelDirectoryJob"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/directory/jobs/{job_id}/complete": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Mark a job complete (poster or awarded agent) */ post: operations["completeDirectoryJob"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/policy-preset/cedar": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * The Cedar a preset compiles to (Feature 6 Phase B) * @description Returns the Cedar policy text a preset produces for this agent, already * validated against the deployed Cedar schema. **Read-only — it creates no * policy.** The wizard's Advanced tab shows this before anything is written. * * **The text is not the whole policy.** The presets denominate limits in USD * ("$100 a day", "ask above $25") and the Cedar schema exposes transaction * value only as `value_gwei`, a native-token amount. Converting needs a live * price, and a price baked into policy text is wrong the moment it is written * and stays wrong silently — so the compiler does not convert. The USD limits * come back in `residual_guardrails`, still enforced by the agent's guardrail * columns where a live price is applied at evaluation time. * * A UI must show `residual_guardrails` alongside the text. Presenting the * Cedar alone would read as complete while permitting every amount. * * Policies are created in **shadow** mode: they report what they would decide * without deciding it, until an operator promotes them. */ post: operations["exportPolicyPresetCedar"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/policy-preset": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Apply a policy preset * @description **Applies through the agent update handler**, not by writing guardrail * columns. A preset that wrote them directly would be a way around the * guardrail widening approval flow wearing a friendlier interface. * * So if the preset loosens something and your organisation gates that, you * get the same **202 with a pending approval** you would get from editing * the agent by hand — not a quietly applied change. Pass `approval_id` * once that approval is granted. */ post: operations["applyPolicyPreset"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/trust": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * What a listed agent has earned * @description Everything a publisher writes — name, description, tags — is a claim. * These are the parts they cannot write: whether a human reviewed the * listing, how many people installed it, what they rated it. * * Public, because its purpose is to be read by someone deciding whether to * install a stranger's agent. Only listed agents have public trust. * * **A listing with reports shows no badges at all.** "Platform reviewed" * beside an active complaint tells a reader the opposite of what they need. * An average rating appears only from three reviews — one rating is not an * average. */ get: operations["getAgentTrust"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/report": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Report a listed agent * @description Human users only — an agent reporting another agent is a way to bury a * competitor's listing at machine speed. * * The response does not include the report count. Telling a reporter how * close a listing is to being flagged tells them how many more to file. */ post: operations["reportAgent"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/review": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Rate an agent you have used * @description One review per person per agent; a second replaces the first. You cannot * review an agent from your own organisation. * * Comments are shown only once moderated. The rating counts either way — a * number is harder to abuse than free text. */ post: operations["reviewAgent"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/peers": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Create a peer and name its observers * @description Human users only. Creating a peer decides which agents may read a model * of a person, and an agent that could do that could add itself. * * Idempotent on `(org, peer_type, peer_ref)`. Observers are **merged**, not * replaced — a second call adding one agent does not revoke the others * already watching. Every named observer must be an agent in this * organisation, so a typo or an id copied from elsewhere is an error rather * than a silent no-op that leaves an operator believing an agent is * watching when none is. */ post: operations["createPeer"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/peers/{peer_id}/export": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Everything held about this person * @description The whole behavioural profile plus the raw observations behind it. Human * users only, behind strong-factor re-auth — this is exactly what a stolen * session would want. * * Each fact carries `why_we_believe_this`: its provenance, including * tombstones for observations that have since expired. An export listing * conclusions without their basis answers only the easy half of the * question. */ get: operations["exportPeerData"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/peers/{peer_id}/data": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; post?: never; /** * Forget this person * @description Deletes the peer, its facts and its observations. Human users only, * behind strong-factor re-auth, and irreversible. * * Returns counts of what was removed — "deleted" with no numbers is not * something anyone can check. The audit entry records that a deletion * happened and deliberately omits the identifier someone asked to have * forgotten. */ delete: operations["deletePeerData"]; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/peers/{peer_id}/facts": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; post?: never; delete?: never; options?: never; head?: never; /** * Correct what the system believes * @description Human users only. A correction **pins** the fact: the background * processor will not re-derive over it, because someone correcting what a * system believes about them outranks the inference that got it wrong. * * The correction is appended to the fact's provenance as a `human` entry, * so the record shows both what was inferred and that a person disagreed. */ patch: operations["editPeerFact"]; trace?: never; }; "/v1/peers/{peer_id}/context": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * A context blob for prompt injection * @description What this person's history suggests, as prose an agent can put in a * prompt. Best-supported facts first, so a tight budget drops the * least-supported beliefs rather than an arbitrary tail — and a fact a * human corrected sorts ahead of everything, because a correction someone * took the trouble to make is the last thing to cut. * * Never truncates mid-line: half a sentence about a person is worse than * one fewer sentence. A peer with no facts returns an empty string rather * than a header claiming to describe someone. * * The blob ends by saying these are observations and not instructions, * because an agent reading it needs to know the difference. */ get: operations["getPeerContext"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/peer-context": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * An agent's own peer context * @description Resolves the peer from the agent's platform connection, so an agent does * not need to know a peer id. * * An agent may only ask for its own — otherwise this route would be a way * to read a peer through an agent that observes it, from one that does not. * The observer check still applies: being the agent named in the path is * not the same as observing that connection's peer. */ get: operations["getAgentPeerContext"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/peers/{peer_id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * A peer's profile and derived facts * @description A peer is a shared model of one human, across the agents serving them. * * **An agent reaches a peer only by being named in its observer list.** * Being in the same organisation, the same platform connection, or holding * a broad scope grants nothing. A peer with no observers is readable by no * agent at all — forgetting to set observers must not expose someone's * behavioural profile to every agent in the org. * * A peer in another organisation returns 404, the same as an unknown id: * whether one exists elsewhere is not something a caller should learn. * * Each fact carries `provenance` — why it is believed. Entries for events * that have since expired become tombstones keeping the shape of what was * seen without the content, so a belief about a person always has a * recoverable basis. */ get: operations["getPeer"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/peers/{peer_id}/events": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Record something observed about a person */ post: operations["recordPeerEvent"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/peers/{peer_id}/predict-approval": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * How has this person decided this before? * @description Answers two different questions, and keeps them apart on purpose. * * `likelihood` is an **observation about a person** — how they have decided * comparable requests before. Comparable means the same fingerprint bucket, * not the same action type: three approvals of $5 say nothing about $500. * * `suggest_auto` is a **statement about a policy**. It is true only where a * rule the operator already wrote would auto-approve this exact case. It is * never derived from `likelihood`, and a confident model never becomes new * authority. It is false, with `blocked_reason`, when: * * * no rule covers the action (`no_matching_rule`); * * a rule says a human decides (`rule_requires_approval`); * * the amount is above the rule's own threshold (`above_configured_threshold`); * * the derived risk tier is above the lowest (`risk_tier_requires_step_up`); * * the action grants or destroys authority (`action_is_sensitive`). * * The policy consulted is the calling agent's own, so a prediction cannot * inherit authority from another agent that happens to observe the same * person. */ post: operations["predictApproval"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/peers/by-connection/{connection_id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Resolve the peer for a platform connection */ get: operations["getPeerByConnection"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/org/apply/diff": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * What would this chart change? * @description Reconcile a chart against the org without changing anything. Human users * only — a chart provisions agents, vaults and access policies, so an agent * that could apply one could grant itself access to a vault it cannot * currently read. * * A POST rather than a GET because the chart is the request body, and a GET * carrying a body is one many proxies and clients drop or mangle. Read-only * either way. * * The plan reports five outcomes per resource: * * * `create` — not present, would be created. * * `patch` — present, differs only in fields safe to change in place. * * `unchanged` — present and matching. * * `skipped_drifted` — **changed outside this chart**, so left alone. * Someone edited it by hand for a reason; overwriting that because a file * says otherwise is how a deployment tool destroys an incident fix. * * `refused` — the chart asks for a change apply will not make. Guardrail * fields are never patched here: editing them routes through the guardrail * approval flow, and a reconciler writing them directly would be a way * around it. * * Pass `applied_state` from `.1claw/apply-state.json` so drift can be told * from a first run — a pre-existing resource is not drifted, it was simply * not created by this chart. */ post: operations["diffChart"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/notification-targets": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** List your notification targets */ get: operations["listNotificationTargets"]; put?: never; /** * Add a notification target * @description Where approvals and automation output reach a human: a phone number, an * https webhook, an email address, or a push token. * * An SMS target is created **unverified** and stays that way until someone * proves they hold the number. Adding a number must not itself be an * authorisation — otherwise a session borrowed for five minutes leaves * behind a number that can approve things long after it is gone. An * unverified target still receives notifications; it just cannot reply to * decide one. */ post: operations["createNotificationTarget"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/notification-targets/{id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; post?: never; /** Remove a notification target */ delete: operations["deleteNotificationTarget"]; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/notification-targets/{id}/verify/start": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Text a verification code to an SMS target * @description Sends a six-digit code from the same channel the target's notifications * will come from — a code arriving from a different number than the one * the recipient will later see is a code they are right to distrust. * * Expires in 10 minutes. Five wrong answers void it. */ post: operations["startNotificationTargetVerification"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/notification-targets/{id}/verify": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Submit the verification code */ post: operations["completeNotificationTargetVerification"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/webhooks/sms/{webhook_path}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Inbound SMS webhook (Twilio) * @description Called by Twilio when someone texts the channel's number. Public, because * the provider calls it — so the `X-Twilio-Signature` header is the only * thing establishing that a message is genuine, and it is verified over the * exact public URL and every POST parameter. * * A verified signature proves the message came from Twilio, **not** that it * came from the right person: anyone who knows the number can text it and * their message arrives correctly signed. So the sending number must also * match a *verified* SMS notification target. * * A reply may decide an approval only when its server-derived * `risk_tier` is 1. Anything higher is answered with a link to confirm in * the app; replying cannot decide it. When more than one approval is * pending, a bare YES/NO is answered with a request for the reference code * rather than applied to a guess. * * Always answers 200 with TwiML — a non-2xx makes Twilio retry a message * that was deliberately refused. The exception is a bad signature, which is * 403, because a persistently failing signature is a misconfiguration as * often as an attack and silence would hide both. */ post: operations["smsWebhook"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/webhooks/discord/{webhook_path}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Discord webhook * @description Public webhook endpoint for receiving Discord bot interactions. */ post: operations["discordWebhook"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/oauth/providers": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * List OAuth providers * @description Returns the list of supported OAuth providers with their metadata, * available scopes, and authorization URLs. No authentication required. */ get: operations["listOAuthProviders"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/connectors/presets": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * List connector presets * @description The catalogue of pre-built connectors — Gmail, Slack, GitHub and the rest. * Each preset carries the OAuth provider and scopes to request, plus the * binding config and host/path guardrails the agent will execute under. * * No authentication required: this describes what 1Claw supports, not * anything belonging to an organisation. */ get: operations["listConnectorPresets"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/connectors": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * List installed connectors * @description Connectors installed on this agent, and whether each one has actually * been connected — an install creates the binding, but the binding is not * usable until the OAuth round trip completes. */ get: operations["listInstalledConnectors"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/connectors/{slug}/install": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Install a connector * @description Creates a binding from the preset — base URL, allowed hosts, allowed * paths — and starts the OAuth flow for it. Send the user to the returned * `authorization_url` to finish; until they do, the binding exists but * holds no credential. * * Human users only. Installing gives an agent reach into a third-party * account, and the flow it starts is a person's browser. * * Idempotent by binding name: re-installing re-runs the OAuth flow against * the existing binding rather than creating a second one holding a second * token for the same account. A name already taken by a binding that is * not this connector returns 409. */ post: operations["installConnector"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/oauth/connect": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Initiate OAuth connection * @description Start an OAuth authorization flow for the specified agent and provider. * Returns the authorization URL to redirect the user to. Human-only. */ post: operations["connectOAuth"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/event-subscriptions": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** List an agent's event subscriptions */ get: operations["listEventSubscriptions"]; put?: never; /** * Subscribe to a connector event source * @description Pairs an installed connector binding with one of its preset's event * sources (see `event_sources` on `GET /v1/connectors/presets`). 1Claw * then polls the source through the binding — same host and path * allowlists, same credential, same SSRF guard — keeps the item ids it has * seen, and dispatches each new item as an automation event of * `event_type`, so an automation with `trigger_type: event` and * `event_filter: { "event_type": "gmail.message.received" }` reacts within * one poll interval instead of on a cron it has to dedupe itself. * * The first poll primes the subscription: it records what already exists * and emits nothing, so a new subscription does not replay the inbox. At * most 25 new items are emitted per poll (oldest first); lists come from * the source's first page only. Failures back off exponentially on the * interval and switch the subscription off after 20 in a row. * * Human users only; the agent needs Execution Intents enabled. At most 20 * subscriptions per agent. The event payload is * `{ "event_type", "payload": { "subscription_id", "binding_id", "binding", "connector", "item" } }`. */ post: operations["createEventSubscription"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/event-subscriptions/{id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; post?: never; /** * Delete an event subscription * @description Human users only. */ delete: operations["deleteEventSubscription"]; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/event-subscriptions/{id}/poll": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Poll an event subscription now * @description Runs one poll immediately instead of waiting for the interval. The first * poll of a fresh subscription primes it; a subscription switched off by * repeated failures is switched back on if the poll succeeds. Human users * only. A failed poll returns 400 with the source's error and is recorded * on the subscription like a scheduled failure. */ post: operations["pollEventSubscriptionNow"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/router-keys": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * List router keys * @description Every router key of the agent, live and revoked, without secrets. */ get: operations["listRouterKeys"]; put?: never; /** * Mint a router key (sk-shroud-v1) * @description Creates an `sk-shroud-v1-<32>` static Bearer for the Shroud gateway, mapped to this * agent. A stock OpenAI or Anthropic SDK sends it as `Authorization: Bearer …` with * `base_url` set to the gateway; the gateway exchanges it key-only for the agent's * token. The plaintext key is returned **once**. Up to 20 live keys per agent. * Human users only; the agent must have `shroud_enabled: true`. */ post: operations["createRouterKey"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/router-keys/{key_id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; post?: never; /** * Revoke a router key * @description Revokes the key. The gateway stops accepting it within 60 s (router-key tokens * live at most that long and the gateway re-exchanges on expiry). Idempotent. * Human users only. */ delete: operations["revokeRouterKey"]; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/tool-bindings": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** List secret → tool bindings */ get: operations["listToolBindings"]; put?: never; /** * Create a secret → tool binding (rehydration policy) * @description Authorises the enclave to rehydrate the `⟦sk:…⟧` placeholder for `secret_path` * into `tool_name` at `arg_path` — and only when the call's destination host is one * of `destination_hosts`. Redaction replaces vault secrets in prompts with * deterministic placeholders the model can place but never read; a placeholder is * substituted back only inside an authorised tool-call argument, at the moment the * enclave performs the call (`execution_mode: "tee"`). No binding, wrong argument, * wrong host, bad checksum or an unknown tag is a 403 at execution time. Human users * only; up to 200 per agent. */ post: operations["createToolBinding"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/tool-bindings/{binding_id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; post?: never; /** Delete a secret → tool binding */ delete: operations["deleteToolBinding"]; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/oauth/connections": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * List OAuth connections * @description List all active OAuth connections for the specified agent. */ get: operations["listOAuthConnections"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/oauth/disconnect/{binding_id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Disconnect OAuth connection * @description Disconnect an OAuth connection by revoking tokens and removing the binding. * Human-only. */ post: operations["disconnectOAuth"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/oauth/app-credentials": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * List OAuth app credentials * @description List stored OAuth app credentials for the agent. Client secrets * are never returned in the response. */ get: operations["listOAuthAppCredentials"]; put?: never; /** * Save OAuth app credentials * @description Store custom OAuth app credentials (client ID/secret) for a provider. * Allows the agent to use a BYOA (Bring Your Own App) OAuth application * instead of 1Claw's shared credentials. Human-only. */ post: operations["saveOAuthAppCredentials"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/oauth/app-credentials/{provider_slug}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; post?: never; /** * Delete OAuth app credentials * @description Remove stored OAuth app credentials for a specific provider. Human-only. */ delete: operations["deleteOAuthAppCredentials"]; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/oauth/callback": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * OAuth callback * @description Public callback URL that OAuth providers redirect to after user authorization. * Exchanges the authorization code for tokens and redirects to the dashboard. */ get: operations["oauthConnectCallback"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/org/cedar-policies": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * List Cedar policies * @description List all Cedar policies for the organization. */ get: operations["listCedarPolicies"]; put?: never; /** * Create a Cedar policy * @description Create a new Cedar policy for the organization. Team+ tier required. */ post: operations["createCedarPolicy"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/org/cedar-policies/{id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Get a Cedar policy * @description Retrieve a specific Cedar policy by ID. */ get: operations["getCedarPolicy"]; put?: never; post?: never; /** * Delete a Cedar policy * @description Delete a Cedar policy by ID. */ delete: operations["deleteCedarPolicy"]; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/org/cedar-policies/test": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Test Cedar policy evaluation * @description Evaluate the organization's Cedar policies against a test request. */ post: operations["testCedarPolicy"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/org/opa-policies": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * List OPA policies * @description List all OPA policies for the organization. */ get: operations["listOpaPolicies"]; put?: never; /** * Create an OPA policy * @description Create a new OPA Rego policy for the organization. Business+ tier required. */ post: operations["createOpaPolicy"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/org/opa-policies/{id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Get an OPA policy * @description Retrieve a specific OPA policy by ID. */ get: operations["getOpaPolicy"]; put?: never; post?: never; /** * Delete an OPA policy * @description Delete an OPA policy by ID. */ delete: operations["deleteOpaPolicy"]; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/org/opa-policies/test": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Test OPA policy evaluation * @description Evaluate the organization's OPA policies against a test input. */ post: operations["testOpaPolicy"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/org/settings/policy-backend": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Get policy backend settings * @description Returns the org's Cedar/OPA enforcement configuration. Default mode is shadow. * Owner/admin only. */ get: operations["getPolicyBackendSettings"]; put?: never; post?: never; delete?: never; options?: never; head?: never; /** * Update policy backend settings * @description Configure backend (builtin, cedar, opa, builtin+cedar, builtin+opa), mode (shadow/enforce), * scope actions, and circuit breaker behavior. Owner/admin only. */ patch: operations["updatePolicyBackendSettings"]; trace?: never; }; "/v1/org/policy-shadow-report": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Get policy shadow divergence report * @description Returns divergence statistics when running Cedar/OPA in shadow mode. * Owner/admin only. */ get: operations["getPolicyShadowReport"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/org/guardrail-shadow-report": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Get guardrail shadow divergence report * @description Returns Convention 6 shadow-mode violations (`guardrail_shadow.would_deny` audit events) * grouped by reason code. Owner/admin only. */ get: operations["getGuardrailShadowReport"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/org/guardrail-revisions": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * List guardrail revision history * @description Audit trail of agent and binding guardrail changes. Owner/admin only. */ get: operations["listGuardrailRevisions"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/org/contract-abis": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * List contract ABIs * @description List org contract ABIs, optionally filtered by chain. Owner/admin only. */ get: operations["listContractAbis"]; put?: never; /** * Register a contract ABI * @description Upload an org-scoped ABI for transaction decoding. Owner/admin only. */ post: operations["createContractAbi"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/org/contract-abis/{id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Get a contract ABI */ get: operations["getContractAbi"]; put?: never; post?: never; /** Delete a contract ABI */ delete: operations["deleteContractAbi"]; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/pending-approvals": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** List pending approvals */ get: operations["listPendingApprovals"]; put?: never; /** * Submit action for approval * @description Submit a signing or transaction action that matches a consensus policy trigger. */ post: operations["submitPendingApproval"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/pending-approvals/{id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Get pending approval details */ get: operations["getPendingApproval"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/pending-approvals/{id}/approve": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Approve or reject a pending approval */ post: operations["approvePendingApproval"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/pending-approvals/{id}/execute": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Execute an approved action * @description Human-only. Marks the approval as executed after verifying signatures. */ post: operations["executePendingApproval"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/pending-approvals/{id}/cancel": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Cancel a pending approval */ post: operations["cancelPendingApproval"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/org/sub-orgs": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * List sub-organizations * @description List all sub-organizations under the current org. */ get: operations["listSubOrgs"]; put?: never; /** * Create a sub-organization * @description Create a new sub-organization under the current org. */ post: operations["createSubOrg"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/org/sub-orgs/{sub_org_id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Get a sub-organization * @description Retrieve a specific sub-organization by ID. */ get: operations["getSubOrg"]; put?: never; post?: never; /** * Archive a sub-organization * @description Archive (soft-delete) a sub-organization. */ delete: operations["deleteSubOrg"]; options?: never; head?: never; /** * Update a sub-organization * @description Update sub-organization name, description, or billing model. */ patch: operations["updateSubOrg"]; trace?: never; }; "/v1/org/sub-orgs/{sub_org_id}/users": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Add a user to a sub-organization * @description Add a user to a sub-organization with a specified role. */ post: operations["addSubOrgUser"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/org/sub-orgs/{sub_org_id}/permissions": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Grant permissions to a sub-organization * @description Grant a permission scope to the sub-organization. */ post: operations["grantSubOrgPermission"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/org/sub-orgs/{sub_org_id}/permissions/{permission}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; post?: never; /** * Revoke a sub-organization permission * @description Revoke a specific permission scope from the sub-organization. */ delete: operations["revokeSubOrgPermission"]; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/org/sub-orgs/{sub_org_id}/wallets/generate": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Generate wallets for a sub-organization * @description Generate treasury wallets for specified chains within the sub-org. */ post: operations["generateSubOrgWallets"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/portfolio": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Get unified portfolio * @description Returns an aggregated view of all wallet balances (treasury wallets, * signing keys, smart accounts) with USD estimates. */ get: operations["getPortfolio"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/smart-accounts/import": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Import an existing Safe smart account * @description Import an existing Safe smart account for an agent. Optionally verifies * on-chain that the agent's EOA is a signer on the Safe. */ post: operations["importSmartAccount"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/treasury/wallets/access-policies": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** List wallet access policies for the org */ get: operations["listWalletAccessPolicies"]; put?: never; /** * Create a wallet access policy * @description Create a role-based wallet access policy granting an agent, user, role, * or platform app specific permissions on treasury wallets within a scope * (org-wide, platform app, or single wallet). Requires Pro+ tier. */ post: operations["createWalletAccessPolicy"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/treasury/wallets/access-policies/{id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; post?: never; /** Delete a wallet access policy */ delete: operations["deleteWalletAccessPolicy"]; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/credential-recovery/request": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Initiate credential recovery * @description Start a credential recovery request for MFA reset, passkey reset, * or password reset. Requires admin approval per org policy. */ post: operations["requestCredentialRecovery"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/credential-recovery/requests": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * List recovery requests for the org * @description Admin/owner only. Returns pending, approved, and rejected recovery requests. */ get: operations["listCredentialRecoveryRequests"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/credential-recovery/requests/{id}/approve": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Approve a recovery request * @description Admin/owner approves a pending recovery request. May return a one-time recovery code. */ post: operations["approveCredentialRecovery"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/credential-recovery/requests/{id}/execute": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Execute an approved credential recovery request * @description Execute an approved credential recovery request after the delay window has elapsed. Only org owners or admins can execute. */ post: operations["executeCredentialRecovery"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/org/credential-recovery-policy": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Get org credential recovery policy */ get: operations["getCredentialRecoveryPolicy"]; put?: never; post?: never; delete?: never; options?: never; head?: never; /** Update org credential recovery policy */ patch: operations["updateCredentialRecoveryPolicy"]; trace?: never; }; "/v1/agents/batch-delete": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** batch delete agents */ post: operations["batch_delete_agents"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/enroll/approve": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Authenticated: consume token, create agent, return API key once. **Email-bound pending:** caller must belong to the same org and match `human_email`. */ post: operations["approve_enrollment"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/enroll/deny": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Authenticated: consume token and delete pending enrollment (deny). **Email-bound:** caller org and email must match the pending row. **Link-only:** */ post: operations["deny_enrollment"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/enroll/{pairing_id}/status": { parameters: { query: { /** @description The `poll_token` from the enrol response. */ poll: string; }; header?: never; path: { pairing_id: string; }; cookie?: never; }; /** Public: pairing status — the agent learns the decision and collects its key once */ get: operations["getEnrollmentStatus"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/enroll/pending": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Public: validate enrollment token and return pending info for the dashboard (agent name, expires_at). Used so the UI can show 'Approve agent X?' witho */ get: operations["get_enrollment_pending"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/channels/{channel_id}/refresh-webhook": { parameters: { query?: never; header?: never; path: { agent_id: string; channel_id: string; }; cookie?: never; }; get?: never; put?: never; /** Re-register the provider webhook for this channel (repairs a stale or revoked subscription). */ post: operations["refresh_channel_webhook"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/channels/{channel_id}/repair": { parameters: { query?: never; header?: never; path: { agent_id: string; channel_id: string; }; cookie?: never; }; get?: never; put?: never; /** Repair a channel: alias of refresh-webhook, re-registers the provider webhook for this channel. */ post: operations["repair_channel_webhook"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/eoa": { parameters: { query?: never; header?: never; path: { agent_id: string; }; cookie?: never; }; /** Get the agent's EVM address (no private key exposure). */ get: operations["get_agent_eoa"]; put?: never; /** Generate an EVM EOA for an agent. Creates a secp256k1 key, stores it in the __agent-keys vault, and records the derived address on the agent record. */ post: operations["generate_agent_eoa"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/rotate-signer-key": { parameters: { query?: never; header?: never; path: { agent_id: string; }; cookie?: never; }; get?: never; put?: never; /** Rotate the agent's EVM signer key. Generates a new secp256k1 key, builds a swapOwner UserOp on the Safe, signs with the old key, submits to bundler, a */ post: operations["rotate_signer_key"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/smart-accounts/{chain_id}": { parameters: { query?: never; header?: never; path: { agent_id: string; chain_id: string; }; cookie?: never; }; get?: never; put?: never; post?: never; /** delete smart account */ delete: operations["delete_smart_account"]; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/unlock-platform": { parameters: { query?: never; header?: never; path: { agent_id: string; }; cookie?: never; }; get?: never; put?: never; /** User-only. Clears platform_locked when the app is no longer actively connected. */ post: operations["unlock_agent_platform"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/audit/export": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** export audit events */ get: operations["export_audit_events"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/credential-recovery/requests/{id}/cancel": { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; get?: never; put?: never; /** cancel request */ post: operations["cancel_request"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/migration-status": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** What the account is currently anchored on, and what has to happen next. The ordering is the part people get wrong, so it lives here rather than being */ get: operations["migration_status"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/passkeys/vault-assert/begin": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Begin a passkey assertion that unlocks vault secret reads for users who have `require_passkey_for_vaults` enabled. */ post: operations["vault_assert_begin"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/passkeys/vault-assert/complete": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Returns a short-lived `passkey_token` for the `X-Passkey-Token` header on secret reads. */ post: operations["vault_assert_complete"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/reauth/begin": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** start a re-authentication ceremony. For passkey: returns a WebAuthn challenge. For password: returns immediately (no challenge needed). */ post: operations["reauth_begin"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/reauth/complete": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** verify re-authentication and issue a single-use token. */ post: operations["reauth_complete"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/social/disconnect": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Sever every social identity link, so a social account that once owned this login can no longer reach it. The case this exists for: someone leaves a c */ post: operations["disconnect_social"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/sso/authorize": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** returns JSON with authorization_url for WorkOS Hosted Auth. */ get: operations["sso_authorize"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/sso/callback": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** exchange code for profile, find/create user, redirect to dashboard with token. */ get: operations["sso_callback"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/auth/sso/status": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** returns whether SSO is configured (for dashboard to show/hide SSO button). */ get: operations["sso_status"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/billing/llm-models": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** get llm models */ get: operations["get_llm_models"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/billing/llm-pricing": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** get llm pricing */ get: operations["get_llm_pricing"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/billing/promo/redeem": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** get llm billing status */ get: operations["get_llm_billing_status"]; put?: never; /** redeem promo */ post: operations["redeem_promo"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/billing/promo/validate": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** validate promo */ get: operations["validate_promo"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/chains/rpc": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Proxy a single JSON-RPC call to the chain's RPC URL. Only read-only methods in ALLOWED_RPC_METHODS are allowed (Treasury balances, Safe deployment, et */ post: operations["chain_rpc_proxy"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/fiat/webhooks": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Receive completion events from fiat partners (MoonPay signed body or generic JSON). */ post: operations["fiat_webhook"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/memory/shared-namespaces": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** list shared namespaces */ get: operations["list_shared_namespaces"]; put?: never; /** create shared namespace */ post: operations["create_shared_namespace"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/memory/shared-namespaces/{id}": { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; get?: never; put?: never; post?: never; /** delete shared namespace */ delete: operations["delete_shared_namespace"]; options?: never; head?: never; /** update shared namespace */ patch: operations["update_shared_namespace"]; trace?: never; }; "/v1/onboarding/journey": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** record which path a user chose. The dashboard already had `track()` calls for the wizard, but they POST to a dashboard route that does not exist, so */ post: operations["record_journey"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/org/env-vars/{id}/delete": { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; get?: never; put?: never; /** delete org env var */ post: operations["delete_org_env_var"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/org/kek-custody": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** Get current custody mode and share metadata */ get: operations["get_custody"]; put?: never; /** Setup Shamir key custody */ post: operations["setup_custody"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/org/kek-custody/reconstruct": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** list org env vars */ get: operations["list_org_env_vars"]; put?: never; /** TEE-bound reconstruction request */ post: operations["reconstruct"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/org/settings": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** list org settings */ get: operations["list_org_settings"]; put?: never; post?: never; delete?: never; options?: never; head?: never; /** update org setting */ patch: operations["update_org_setting"]; trace?: never; }; "/v1/platform/apps/by-slug/{slug}/branding": { parameters: { query?: never; header?: never; path: { slug: string; }; cookie?: never; }; /** Public, returns app name + logo. */ get: operations["app_branding"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/apps/{app_id}/automations": { parameters: { query?: never; header?: never; path: { app_id: string; }; cookie?: never; }; /** list platform automations */ get: operations["list_platform_automations"]; put?: never; /** upsert user */ post: operations["upsert_user"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/connected-apps/{connection_id}/unlock-resources": { parameters: { query?: never; header?: never; path: { connection_id: string; }; cookie?: never; }; get?: never; put?: never; /** Unlocks platform-locked resources for a disconnected (or active) connection the user owns. */ post: operations["unlock_connection_resources"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/connections/{connection_id}/memory": { parameters: { query?: never; header?: never; path: { connection_id: string; }; cookie?: never; }; /** list connection memory namespaces */ get: operations["list_connection_memory_namespaces"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/connections/{connection_id}/memory/{namespace}": { parameters: { query?: never; header?: never; path: { connection_id: string; namespace: string; }; cookie?: never; }; /** list connection memory entries */ get: operations["list_connection_memory_entries"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/connections/{connection_id}/otel/topology": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Topology for one connection's agents * @description The same graph as `/v1/otel/topology`, restricted to what this connection's agents reach: the agents, the policies they hold, the vaults those grant, the chains they sign on and the systems they call. Restricted before the 500-node cap, so a large org's cap cannot cut the connection's own agents out. Walking is directed (agent → policy → vault), so a vault shared with another tenant's agent does not reveal that agent. * * A `plt_` key sees one connection's agents, never the end-user's org: that org may hold agents from other platforms or the user's own. The set is agents attributed to the connection plus the ones listed on it, constrained to the connection's org. A connection that does not belong to the calling app is a 404. */ get: operations["get_platform_connection_otel_topology"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/connections/{connection_id}/otel/threats": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Open threats on one connection's agents * @description `/v1/otel/threats` filtered to the connection's agents, same ranking (blast radius, then recency). * * A `plt_` key sees one connection's agents, never the end-user's org: that org may hold agents from other platforms or the user's own. The set is agents attributed to the connection plus the ones listed on it, constrained to the connection's org. A connection that does not belong to the calling app is a 404. */ get: operations["get_platform_connection_otel_threats"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/connections/{connection_id}/otel/summary": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Posture score and counts for one connection's agents * @description `/v1/otel/summary` over a smaller world: the posture score uses the connection's agents' trust scores and the resources they reach; threat and pending-approval counts are the connection's agents' only. * * A `plt_` key sees one connection's agents, never the end-user's org: that org may hold agents from other platforms or the user's own. The set is agents attributed to the connection plus the ones listed on it, constrained to the connection's org. A connection that does not belong to the calling app is a 404. */ get: operations["get_platform_connection_otel_summary"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/connections/{connection_id}/otel/stream": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Live signal stream for one connection's agents (SSE) * @description The same protocol as `/v1/otel/stream` — `Last-Event-ID` resume, `event: gap` on a stale cursor or a lagged subscriber — filtered to signals whose agent is one of the connection's. Signals with no agent (a human's own dashboard actions) are never emitted here. The agent set is fixed at connect time; an agent added later appears on the next connect. * * Stream slots are counted per platform app (five), not per connection. * * A `plt_` key sees one connection's agents, never the end-user's org: that org may hold agents from other platforms or the user's own. The set is agents attributed to the connection plus the ones listed on it, constrained to the connection's org. A connection that does not belong to the calling app is a 404. */ get: operations["get_platform_connection_otel_stream"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/connections/{connection_id}/resources": { parameters: { query?: never; header?: never; path: { connection_id: string; }; cookie?: never; }; /** list connection resources */ get: operations["list_connection_resources"]; put?: never; /** create app policy */ post: operations["create_app_policy"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/link-account": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Authenticated user links their account to a platform app. Used by the dashboard `/connect/{slug}/link` consent flow for cross-org users. */ post: operations["link_account"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/orphaned-resources": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** platform-locked agents/vaults with no active connection. */ get: operations["list_orphaned_platform_resources"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/reports/request": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Public (no auth). Submits lead info, sends email with download link. */ post: operations["request_report"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/runtimes/{runtime_id}/chat/conversations": { parameters: { query?: never; header?: never; path: { runtime_id: string; }; cookie?: never; }; /** list runtime chat conversations */ get: operations["list_runtime_chat_conversations"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/runtimes/{runtime_id}/chat/conversations/{conversation_id}": { parameters: { query?: never; header?: never; path: { runtime_id: string; conversation_id: string; }; cookie?: never; }; /** get runtime chat conversation */ get: operations["get_runtime_chat_conversation"]; put?: never; post?: never; /** Archives a runtime chat session so the next message starts a fresh conversation. */ delete: operations["archive_runtime_chat_conversation"]; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/runtimes/{runtime_id}/chat/diagnostics": { parameters: { query?: never; header?: never; path: { runtime_id: string; }; cookie?: never; }; /** Human-only snapshot of chat auth wiring: which platform env vars Vault will inject on the next Start and which upstream URL chat proxies to. */ get: operations["runtime_chat_diagnostics"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/runtimes/{runtime_id}/chat/unlock": { parameters: { query?: never; header?: never; path: { runtime_id: string; }; cookie?: never; }; get?: never; put?: never; /** Step-up (password or passkey reauth token, purpose=`runtime_chat`) unlocks dashboard runtime chat for 15 minutes — same trust bar as Shell/Logs. */ post: operations["unlock_runtime_chat"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/otel/stream": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * SSE stream of this org's telemetry signals * @description Server-sent events carrying spans, metrics and events for the caller's organization. Human users only: an agent must not be able to subscribe to org-wide telemetry. * * Every message carries an `id:` field. On reconnect, send the last one back as the `Last-Event-ID` header to resume. If that id has fallen out of the server's buffer, or came from another replica, the stream opens with an `event: gap` message and the client must refetch topology rather than assume continuity. A `gap` is also emitted, without closing the connection, when a subscriber falls behind. */ get: operations["stream_otel_signals"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/otel/threats": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Durable threat register for the org, worst reach first * @description Threats are ranked by blast radius — the size of the affected agent's topology neighbourhood (vaults + connectors + chains) — not by recency or severity alone, so the row an operator should look at first is first. Ties fall back to recency. * * `shadow: true` marks a threat the trust engine produced while running in recommend-only mode. Those are shown with a badge and never acted on automatically. * * Evidence carries trace and span ids and a note. It never contains secret values or HTTP bodies. */ get: operations["list_otel_threats"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/org/settings/otel-export": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Read the org's OTLP export configuration * @description Owner or admin, Team tier and above. Returns header *names* only — the values are the customer's collector credentials and never round-trip through the browser. */ get: operations["get_otel_export_config"]; put?: never; post?: never; delete?: never; options?: never; head?: never; /** * Update the org's OTLP export configuration * @description Every field is optional and only present fields change. The endpoint is validated *and DNS-resolved* on save: HTTPS only, no embedded credentials, and refused if any resolved address is private, loopback, link-local, metadata or ULA. A URL that resolves to a private address is the SSRF, and it is refused here rather than left in the database looking configured. * * `headers` replaces the whole map when present and is encrypted at rest under the org's key. Omit it to change other fields without touching stored header values you cannot read back. * * Transport is OTLP over HTTP with JSON encoding, posted to `/v1/traces`, `/v1/metrics` and `/v1/logs`. What leaves is exactly what the org's own dashboard stream carries — signals already through the collector's redaction pass. */ patch: operations["patch_otel_export_config"]; trace?: never; }; "/v1/org/settings/otel-export/test": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Send one synthetic span to the configured endpoint * @description Re-resolves the endpoint at send time and pins the connection to the resolved address, with redirects disabled. Rate-limited to 5 per minute per org: even a validated endpoint is an outbound request the caller chose the target of. */ post: operations["test_otel_export"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/otel/metrics": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Time-bucketed rollups from durable tables * @description Volume, denials and latency over a window. Sourced from durable tables, never from in-process counters: an in-memory histogram is per-replica and resets on deploy, so a 24h chart drawn from one disagrees between instances and is wrong after every release. * * Every bucket in the range is returned, including empty ones. A quiet hour is a zero, not a missing point — a line chart given a hole joins across it as though nothing happened. * * `step` may be widened from what was requested when the window would otherwise produce more than 500 buckets. The response echoes the window and step actually used, so a chart can label its own resolution rather than the one it asked for. */ get: operations["get_otel_metrics"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/otel/agents/{agent_id}/trust": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * The breakdown behind one agent's trust score * @description The topology carries a single 0-100 trust number per agent. This is what it is made of: each weighted component (`null` when this deployment has no source for it — not measured, not zero), a 24-hour history for a sparkline, and the agent's last audit actions. Actions and resource types only; audit `metadata` is where secret paths live and it is not returned. * * Scores are `shadow` until the engine is promoted out of recommend-only mode; an agent the engine has not yet reached returns `score: null` and `shadow: true`. * * Human users only. An agent id outside the caller's org is a 404, not a 403, so the response does not confirm the id exists. */ get: operations["get_otel_agent_trust"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/otel/flows": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Who actually read from which vault * @description Reachability (the topology's policy edges) says who *could* read a vault. This says who *did*, counted from `audit_events.action = 'secret.read'` — the durable record every read already writes — grouped by agent and vault. That is what lets a Sankey ribbon's width be a count of real reads rather than a guess. * * Agent actors only; a human reading a secret through the dashboard is not an agent flow. Deleted agents and vaults are kept and labelled as such — a read that happened is still a read. */ get: operations["get_otel_flows"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/otel/summary": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Posture score and the counts behind it * @description `posture_score` is the mean agent trust score, less a penalty per open critical threat scaled by the fraction of the organization that threat can reach. Scaling by fraction rather than count is what makes the number comparable between a seven-agent org and a fifty-agent one. * * It returns 100 when there are no agents, and also while the trust engine is still in shadow mode and no scores exist yet — absence of data is not evidence of compromise. It never goes below 0. * * `top_threats` uses the same ranking as `/v1/otel/threats`, so clicking through from the summary lands on the same first row. */ get: operations["get_otel_summary"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/otel/topology": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Agent, vault, policy, connector and chain graph for the org * @description A snapshot of the organization's resources and how they connect. Human users only. * * Capped at 500 nodes. When the cap applies, `truncated` is true and `total_nodes` reports the count before capping — a client must not present a truncated graph as complete. Agents are kept in preference to everything else, and edges that lose an endpoint to the cap are removed. * * Agent `status` is derived at request time, never stored, so it cannot go stale. */ get: operations["get_otel_topology"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/runtimes/{runtime_id}/logs/stream": { parameters: { query?: never; header?: never; path: { runtime_id: string; }; cookie?: never; }; /** SSE live log streaming */ get: operations["stream_runtime_logs"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/runtimes/{runtime_id}/logs/unlock": { parameters: { query?: never; header?: never; path: { runtime_id: string; }; cookie?: never; }; get?: never; put?: never; /** Step-up (password or passkey reauth token) unlocks log fetch/stream for 15 minutes. */ post: operations["unlock_runtime_logs"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/runtimes/{runtime_id}/rebuild": { parameters: { query?: never; header?: never; path: { runtime_id: string; }; cookie?: never; }; get?: never; put?: never; /** Phase 1: invalidate the cached image tag and return the runtime to `stopped`. Next `start` re-pulls the image; for `source_repo` runtimes the entrypoi */ post: operations["rebuild_runtime"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/runtimes/{runtime_id}/restart": { parameters: { query?: never; header?: never; path: { runtime_id: string; }; cookie?: never; }; get?: never; put?: never; /** Force stop (best-effort) then start. Recovers stale `running` rows and proxy timeouts where the client never received the start response. */ post: operations["restart_runtime"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/vaults/{vault_id}/secret-version-disable/{*path_and_version}": { parameters: { query?: never; header?: never; path: { vault_id: string; }; cookie?: never; }; get?: never; put?: never; /** Disable a specific version so it can no longer be read (but is retained for audit). */ post: operations["disable_version"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/vaults/{vault_id}/secret-version/{*path_and_version}": { parameters: { query?: never; header?: never; path: { vault_id: string; }; cookie?: never; }; /** get secret version */ get: operations["get_secret_version"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/vaults/{vault_id}/unlock-platform": { parameters: { query?: never; header?: never; path: { vault_id: string; }; cookie?: never; }; get?: never; put?: never; /** unlock vault platform */ post: operations["unlock_vault_platform"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/webinars/register": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** Public (no auth). Registers for a webinar, sends confirmation + calendar invite. */ post: operations["register_webinar"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/runtimes/templates": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** The provisionable runtime templates, with licence and whether the agent needs its own vendor account */ get: operations["list_runtime_templates"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/automations/step-types": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** The automation step vocabulary an automation may use */ get: operations["list_automation_step_types"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/platform/apps/{app_id}/runtimes": { parameters: { query?: never; header?: never; path: { app_id: string; }; cookie?: never; }; /** Runtimes belonging to a platform app */ get: operations["list_platform_runtimes"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/browser/devices": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** List the browser bridges paired to this organization. Revoked devices are included: 'was this machine ever paired' is the question asked after a laptop goes missing. */ get: operations["list_browser_devices"]; put?: never; /** Pair a browser bridge and mint its credential. Human callers only, behind a step-up re-auth: pairing is what gives a browser the standing to ask for credentials later. */ post: operations["pair_browser_device"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/browser/devices/{id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; post?: never; /** Revoke a paired bridge. This is what makes a leaked bb_ credential stop working. */ delete: operations["revoke_browser_device"]; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/browser/credentials": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** List this org's browser credential bindings */ get: operations["list_browser_credentials"]; put?: never; /** Define a binding: which secret may be typed, and into which hosts. Humans only, behind a step-up — an agent that could create one could nominate any path it liked as fillable. */ post: operations["create_browser_credential"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/browser/credentials/{id}": { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; get?: never; put?: never; post?: never; /** Remove a browser credential binding */ delete: operations["delete_browser_credential"]; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{id}/browser/sessions": { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; get?: never; put?: never; /** Open a browser session. Accepts a paired bridge credential only — an agent token is refused, so a session cannot be bootstrapped on an unpaired machine. */ post: operations["create_browser_session"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{id}/browser/fills": { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; get?: never; put?: never; /** Authorise one credential fill. Requires the bridge credential *and* an agent JWT — neither alone is sufficient. */ post: operations["authorize_browser_fill"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{id}/browser/fills/consume": { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; get?: never; put?: never; /** Redeem a grant for the credential it authorised. Takes the browser session token and the bridge credential, and refuses an agent principal — the agent asks which binding, the bridge collects the answer. */ post: operations["consume_browser_fill"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/v1/agents/{agent_id}/chat/unlock": { parameters: { query?: never; header?: never; path: { agent_id: string; }; cookie?: never; }; get?: never; put?: never; /** Unlock an agent's chat history for reading */ post: operations["unlock_agent_chat"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; } export type webhooks = Record; export interface components { schemas: { OtelTopology: { nodes: { /** @description Namespaced by kind, e.g. `agent:`. */ id: string; /** @enum {string} */ kind: "agent" | "vault" | "policy" | "connector" | "chain"; label: string; /** * @description Agents only. Derived, not stored. * @enum {string} */ status?: "compromised" | "warn" | "suspended" | "ok"; /** @description Agents only. Absent until the trust engine has scored the agent. */ trust?: number; }[]; edges: { from: string; to: string; /** @enum {string} */ kind: "calls" | "grants" | "holds" | "signs"; }[]; truncated: boolean; /** @description Node count before the cap. */ total_nodes: number; /** @description Present and true only for synthetic data. */ fixture?: boolean; }; OtelThreatList: { /** Format: uuid */ id: string; /** Format: uuid */ agent_id: string; /** @enum {string} */ class: "prompt_injection" | "policy_breach" | "spend_anomaly" | "key_exfil" | "off_hours" | "consensus_bypass" | "trust_breach"; /** @enum {string} */ severity: "critical" | "warn"; detected_by: string; /** @enum {string} */ status: "open" | "acknowledged" | "resolved"; shadow: boolean; evidence?: Record[]; blast_radius: { vaults?: number; connectors?: number; chains?: number; }; /** @description Sum of the blast radius. The sort key. */ blast_radius_size: number; resolved_by?: string | null; /** Format: date-time */ created_at?: string; /** Format: date-time */ updated_at?: string; }[]; OtelSummary: { posture_score: number; open_threats: number; open_critical: number; pending_approvals: number; agent_count: number; /** @description At most five, same ranking as /v1/otel/threats. */ top_threats: Record[]; }; UpdatePayGuardrailsRequest: { pay_enabled?: boolean; pay_max_usd?: string | null; pay_daily_limit_usd?: string | null; /** @description Recipients an unattended agent may pay. Null is not a wildcard — for an unattended agent it means no one. */ pay_payto_allowlist?: string[] | null; /** @description Defaults true. Turning it off is what "unattended" means. */ pay_require_passkey?: boolean; pay_require_approval?: boolean; pay_grant_mode_enabled?: boolean; pay_grant_max_usd?: string | null; pay_grant_max_ttl_secs?: number | null; }; PayPrepareRequest: { /** @description The exact bytes the paywall served, base64. Sent verbatim rather than parsed by the caller: the digest a person authorizes is computed from this preimage, so anything reinterpreted first would fall outside the binding. */ challenge_b64: string; /** @example GET */ method: string; /** Format: uri */ resource_url: string; /** @description Reused by a caller retrying after a crash so one 402 cannot become two payments. Generated server-side when absent. */ idempotency_key?: string; /** * @description A request, not an instruction — the vault decides. * @enum {string} */ mode?: "strict" | "session" | "auto"; }; PayPrepareResponse: { /** Format: uuid */ session_id?: string; payment_digest?: string; sign_idempotency_key?: string; quote?: { [key: string]: unknown; }; /** Format: date-time */ valid_before?: string | null; /** Format: date-time */ expires_at?: string; /** @description allow | require_passkey | require_grant | deny: */ authorization?: string; /** @description The paywall's window is under 30 seconds and may expire while a person is reading the authorize page. */ short_window?: boolean; }; PaySignRequest: { /** Format: uuid */ session_id: string; /** @enum {string} */ mode?: "strict" | "session" | "auto"; /** * Format: uuid * @description Offer a specific grant; absent means the newest live one. */ grant_id?: string; }; PaySignResponse: { /** Format: uuid */ payment_id?: string; /** @description The X-PAYMENT header value. The signature, never the key. */ payment_header?: string; amount_usd?: string; pay_to?: string; /** Format: uuid */ grant_id?: string | null; }; PayResultRequest: { http_status?: number; /** @description Null means the caller could not tell — a timeout after the header was sent, where the payment may or may not have been presented. */ settled?: boolean | null; error?: string | null; }; CreatePayGrantRequest: { cap_usd: string; ttl_secs: number; /** @description Null means any recipient; an empty list means none. The two stay distinguishable all the way down to the digest. */ allowed_paytos?: string[] | null; /** @description The digest the person actually asserted over. Compared against the digest of the terms being stored, so a token obtained for a small, tightly scoped grant cannot create a large open one. */ grant_digest: string; }; OrderCardRequest: { /** @enum {string} */ kind: "prepaid" | "gift_card"; /** * @description USD amount to load onto the card. * @example 25.00 */ amount_usd: string; /** @description Optional Laso gift-card server/brand id (gift cards only). */ laso_server_id?: string; /** @description Optional country (prepaid cards; defaults to US). */ country?: string; }; /** @description Masked card view — never contains PAN/CVV. */ CardResponse: { /** Format: uuid */ id: string; /** Format: uuid */ agent_id?: string | null; /** @enum {string} */ issuer: "laso" | "manual"; /** @enum {string} */ kind: "prepaid" | "gift_card"; brand?: string; last4?: string; exp_month?: number; exp_year?: number; currency: string; order_amount_usd?: string; balance?: string; /** @enum {string} */ status: "ordering" | "pending" | "ready" | "depleted" | "expired" | "voided" | "orphaned_payment" | "awaiting_approval" | "rejected"; /** @enum {string} */ storage_mode: "reference" | "full"; reveal_policy: { [key: string]: unknown; }; /** * Format: uuid * @description Linked approval when status is awaiting_approval */ approval_id?: string; /** Format: date-time */ void_after?: string; /** Format: date-time */ created_at: string; /** Format: date-time */ updated_at: string; }; CardListResponse: { cards: components["schemas"]["CardResponse"][]; }; /** @description Revealed card details — sensitive. Returned only by the reveal endpoint. */ CardRevealResponse: { /** Format: uuid */ id: string; pan?: string; cvv?: string; exp_month?: number; exp_year?: number; brand?: string; /** @description Gift-card redemption payload (URL/code/PIN) when applicable. */ redemption?: { [key: string]: unknown; }; disclaimer: string; }; /** @description Human-settable per-card reveal policy + lifecycle controls. */ UpdateCardRequest: { agent_reveal?: boolean; max_reveals?: number; /** Format: date-time */ reveal_expires_at?: string | null; /** Format: date-time */ void_after?: string | null; }; ImportCardRequest: { pan: string; cvv: string; exp_month: number; exp_year: number; brand?: string; currency?: string; balance?: string; /** Format: uuid */ agent_id?: string; }; SearchGiftCardsRequest: { query?: string; country?: string; }; /** @description RFC 7807 error envelope */ ProblemDetails: { type?: string; title?: string; status?: number; detail?: string; }; ResetUsageEventsResponse: { /** * Format: int64 * @description Number of usage_events rows removed */ deleted_events: number; }; ResetUsageForUserEmailRequest: { /** Format: email */ email: string; }; ResetUsageForUserEmailResponse: { /** Format: int64 */ deleted_events: number; /** Format: uuid */ org_id: string; /** Format: uuid */ user_id: string; email: string; display_name: string; }; LoginRequest: { /** Format: email */ email: string; /** Format: password */ password: string; }; LoginResponse: { access_token?: string; token_type?: string; expires_in?: number; refresh_token?: string; mfa_required?: boolean; mfa_token?: string; /** * @description When MFA is required, which second factor to collect * @enum {string} */ mfa_method?: "totp" | "passkey"; }; TokenResponse: { access_token: string; token_type: string; expires_in?: number; refresh_token?: string; mfa_required?: boolean; mfa_token?: string; /** @enum {string} */ mfa_method?: "totp" | "passkey"; /** * Format: uuid * @description Agent token exchange only — the resolved agent id. */ agent_id?: string; /** @description Agent token exchange only — vaults the agent is bound to. */ vault_ids?: string[]; entitlements?: components["schemas"]["AgentEntitlements"]; }; /** @description Returned on agent token exchange. The flags a client needs to decide which tools to offer, as of the moment the token was minted. treasury_signer and has_delegations are derived from the agent's treasury signer rows and active delegations and are not present on the agent profile. */ AgentEntitlements: { intents_api: boolean; execution_intents: boolean; execution_require_tee: boolean; intents_require_tee: boolean; cards: boolean; memory: boolean; shroud: boolean; discoverable: boolean; treasury_signer: boolean; has_delegations: boolean; }; /** @description Exactly one credential, decided by the agent's auth_method: api_key for api_key agents, oidc_token for oidc_client_credentials agents. mTLS agents send neither and present a client certificate through the TLS terminator. */ AgentTokenRequest: { /** * Format: uuid * @description Optional for api_key agents (ocv_ keys auto-resolve from their prefix). Required for OIDC and mTLS agents, which have no key to look up by. */ agent_id?: string; /** @description The ocv_ key, for auth_method api_key. */ api_key?: string; /** @description Token minted by the agent's OIDC provider, for auth_method oidc_client_credentials. Verified against the issuer and audience on the agent record, so nothing long-lived is stored where the agent runs. */ oidc_token?: string; /** @description Optional DPoP public key (JWK) binding the issued JWT to a client keypair. */ dpop_jwk?: { [key: string]: unknown; }; }; UserApiKeyTokenRequest: { api_key: string; }; /** * @description RFC 8693 token-exchange request body. `subject_token_type` * accepts the standard JWT URI or 1claw's API-key URI: * - `urn:ietf:params:oauth:token-type:jwt` * - `urn:1claw:params:oauth:token-type:api-key` */ TokenExchangeRequest: { /** @enum {string} */ grant_type: "urn:ietf:params:oauth:grant-type:token-exchange"; /** @description 1claw JWT or `ocv_` API key authorising the exchange. */ subject_token: string; /** @enum {string} */ subject_token_type: "urn:ietf:params:oauth:token-type:jwt" | "urn:1claw:params:oauth:token-type:api-key"; /** * Format: uri * @description Required `aud` claim for the issued federation token (must be in agent's allowlist). * @example https://api.anthropic.com */ audience: string; /** @description Optional space-separated subset of the agent's existing scopes. */ scope?: string; /** @description Optional. Defaults to `urn:ietf:params:oauth:token-type:jwt`. */ requested_token_type?: string; }; TokenExchangeResponse: { /** @description RS256-signed federation JWT. */ access_token: string; issued_token_type: string; token_type: string; expires_in: number; scope?: string; }; SignupRequest: { /** Format: email */ email: string; /** Format: password */ password: string; display_name?: string; }; SignupResponse: { message?: string; email?: string; access_token?: string; token_type?: string; }; GoogleAuthRequest: { id_token: string; }; ChangePasswordRequest: { current_password: string; new_password: string; }; ForgotPasswordRequest: { /** Format: email */ email: string; }; ForgotPasswordResponse: { message: string; /** * @description Outcome of the reset request: * - email_sent: password reset email dispatched * - no_account: no account found for the email * - social_account: account uses Google/SSO sign-in * - invalid: request was malformed * @enum {string} */ status: "email_sent" | "no_account" | "social_account" | "invalid"; }; ResetPasswordRequest: { token: string; new_password: string; }; ResetPasswordResponse: { message?: string; }; MfaStatusResponse: { enabled?: boolean; eligible?: boolean; totp_enabled?: boolean; passkey_mfa_enabled?: boolean; }; MfaSetupResponse: { otpauth_uri?: string; secret?: string; }; MfaVerifySetupRequest: { code: string; }; MfaVerifySetupResponse: { recovery_codes?: string[]; }; MfaVerifyRequest: { code: string; mfa_token: string; }; MfaDisableRequest: { /** @description TOTP or recovery code */ code?: string; /** * @deprecated * @description Deprecated. Password is no longer sufficient to disable MFA. */ password?: string; }; DeviceCodeRequest: { client_id: string; /** * Format: email * @description Account email; only that user may approve the code in the dashboard. */ email: string; }; DeviceCodeResponse: { device_code?: string; user_code?: string; /** Format: uri */ verification_uri?: string; expires_in?: number; interval?: number; }; DeviceTokenRequest: { device_code: string; grant_type: string; }; DeviceTokenResponse: { access_token?: string; token_type?: string; expires_in?: number; error?: string; email?: string; user_id?: string; org_id?: string; }; DeviceApproveRequest: { user_code: string; }; UserProfileResponse: { /** Format: uuid */ id?: string; email?: string; display_name?: string; auth_method?: string; role?: string; email_verified?: boolean; marketing_emails?: boolean; totp_enabled?: boolean; /** Format: date-time */ created_at?: string; }; UpdateProfileRequest: { display_name?: string; marketing_emails?: boolean; }; CreateApiKeyRequest: { name: string; scopes?: string[]; /** Format: date-time */ expires_at?: string; }; ApiKeyResponse: { /** Format: uuid */ id?: string; name?: string; key_prefix?: string; scopes?: string[]; is_active?: boolean; /** Format: date-time */ created_at?: string; /** Format: date-time */ expires_at?: string; /** Format: date-time */ last_used_at?: string; }; ApiKeyCreatedResponse: { key?: components["schemas"]["ApiKeyResponse"]; /** @description Full key (shown once) */ api_key?: string; }; ApiKeyListResponse: { keys?: components["schemas"]["ApiKeyResponse"][]; }; CreateVaultRequest: { /** @description Unique within the organization. Trimmed before it is stored, and the trimmed value is what must be unique. Counted in characters, not bytes. */ name: string; description?: string; /** @description MPC custody mode to enable at creation (e.g. "2-of-2", "2-of-3") */ mpc_custody?: string; }; VaultResponse: { /** Format: uuid */ id: string; name: string; description?: string; created_by?: string; created_by_type?: string; /** Format: date-time */ created_at: string; /** @description Whether client-managed encryption is enabled */ cmek_enabled?: boolean; /** @description SHA-256 fingerprint of the CMEK key (64 hex chars) */ cmek_fingerprint?: string; /** @description MPC custody mode (e.g. "2-of-2", "2-of-3"), absent when MPC is not enabled */ mpc_custody?: string; /** @description Number of shares required to reconstruct the key */ mpc_threshold?: number; /** @description List of MPC share providers (e.g. ["server", "client"]) */ mpc_providers?: string[]; }; VaultListResponse: { vaults?: components["schemas"]["VaultResponse"][]; }; EnableCmekRequest: { /** @description SHA-256 hex fingerprint of the CMEK key (64 chars) */ fingerprint: string; }; CmekRotateRequest: { /** @description SHA-256 hex fingerprint of the new CMEK key */ new_fingerprint: string; }; CmekRotationJobResponse: { /** Format: uuid */ id: string; /** Format: uuid */ vault_id: string; old_fingerprint?: string; new_fingerprint?: string; /** @enum {string} */ status: "pending" | "running" | "completed" | "failed"; total_secrets: number; processed: number; error?: string; /** Format: date-time */ started_at?: string; /** Format: date-time */ completed_at?: string; /** Format: date-time */ created_at: string; }; EnableMpcRequest: { /** @description MPC custody mode (e.g. "2-of-2", "2-of-3") */ mpc_custody: string; }; PutSecretRequest: { /** * @description Secret type (generic, password, api_key, certificate, private_key, ssh_key, env) * @default generic */ type: string; value: string; metadata?: { [key: string]: unknown; }; /** Format: date-time */ expires_at?: string; rotation_policy?: { [key: string]: unknown; }; max_access_count?: number; }; SecretMetadataResponse: { /** Format: uuid */ id: string; path: string; type: string; version: number; metadata?: { [key: string]: unknown; }; /** Format: date-time */ created_at: string; /** Format: date-time */ expires_at?: string; /** @description Whether this version has been disabled (retained for audit but unreadable) */ is_disabled?: boolean; }; /** @description Returned when a secret is created or updated. Extends SecretMetadataResponse with an optional client_share for MPC vaults. */ SecretCreatedResponse: { /** Format: uuid */ id: string; path: string; type: string; version: number; metadata?: { [key: string]: unknown; }; /** Format: date-time */ created_at: string; /** Format: date-time */ expires_at?: string; /** @description Base64-encoded client key share. Returned only for MPC 2-of-2 vaults. The client must store this share securely — it is not persisted server-side. */ client_share?: string; }; SecretResponse: { /** Format: uuid */ id: string; path: string; type: string; value: string; version: number; metadata?: { [key: string]: unknown; }; created_by?: string; /** Format: date-time */ created_at: string; /** Format: date-time */ expires_at?: string; /** @description Whether this secret value is CMEK-encrypted (requires client-side decryption) */ cmek_encrypted?: boolean; }; SecretListResponse: { secrets?: components["schemas"]["SecretMetadataResponse"][]; }; SecretVersionListResponse: { versions?: components["schemas"]["SecretMetadataResponse"][]; }; RotateSecretRequest: { /** @description Length of the generated value (default 32) */ length?: number; /** * @description Character set for the generated value (default hex) * @enum {string} */ charset?: "hex" | "base64" | "alphanumeric" | "ascii"; /** @description Override the secret type (defaults to existing secret's type) */ type?: string; }; CreatePolicyRequest: { secret_path_pattern: string; /** @enum {string} */ principal_type: "user" | "agent"; principal_id: string; permissions: string[]; conditions?: { [key: string]: unknown; }; /** Format: date-time */ expires_at?: string; /** * @default allow * @enum {string} */ effect: "allow" | "deny"; /** @default 0 */ priority: number; attribute_conditions?: { [key: string]: unknown; }; consensus_trigger?: components["schemas"]["ConsensusTrigger"]; tx_conditions?: components["schemas"]["TxConditions"]; /** * Format: uuid * @description Optional completed approval ID for control-plane consensus bypass. When control-plane consensus policies match, resubmit with this field after the approval has been executed. */ approval_id?: string; /** * @description Policy schema version. Version 1 = legacy field-matching only. * Version 2 = expression engine support in tx_conditions. * @default 2 */ policy_schema_version: number; }; UpdatePolicyRequest: { permissions?: string[]; conditions?: { [key: string]: unknown; }; /** Format: date-time */ expires_at?: string; /** * @default allow * @enum {string} */ effect: "allow" | "deny"; /** @default 0 */ priority: number; attribute_conditions?: { [key: string]: unknown; }; consensus_trigger?: components["schemas"]["ConsensusTrigger"]; tx_conditions?: components["schemas"]["TxConditions"]; /** * Format: uuid * @description Optional completed approval ID for control-plane consensus bypass. */ approval_id?: string; }; PolicyResponse: { /** Format: uuid */ id: string; /** Format: uuid */ vault_id: string; secret_path_pattern: string; principal_type: string; principal_id: string; permissions: string[]; conditions?: { [key: string]: unknown; }; /** Format: date-time */ expires_at?: string; created_by?: string; created_by_type?: string; /** Format: date-time */ created_at: string; /** * @default allow * @enum {string} */ effect: "allow" | "deny"; /** @default 0 */ priority: number; attribute_conditions?: { [key: string]: unknown; }; consensus_trigger?: components["schemas"]["ConsensusTrigger"]; tx_conditions?: components["schemas"]["TxConditions"]; /** @description Policy schema version (1 = legacy, 2 = expression engine) */ policy_schema_version?: number; }; PolicyListResponse: { policies?: components["schemas"]["PolicyResponse"][]; }; EnrollAgentRequest: { /** @description Display name for the new agent */ name: string; /** * Format: email * @description Optional. If set, pending enrollment is bound to that 1Claw account email * and Allow/Deny links are emailed. If omitted, only `approval_url` is used * (link-only enrollment; human must open the URL while signed in). */ human_email?: string; /** @description Optional agent description */ description?: string; /** * @description Pairing ceremony. The agent's own Ed25519 public key (`ssh-ed25519 AAAA…` * or base64 of the raw 32 bytes). Its `SHA256:` fingerprint is shown to the * human on the approval page for visual verification, and the agent * collects its API key itself by polling * `GET /v1/agents/enroll/{pairing_id}/status?poll=` — no key * in an email, nothing to copy. `1claw agent enroll --pair` does all of this. */ public_key?: string; }; EnrollAgentResponse: { /** * Format: uuid * @description UUID of the created agent (nil UUID until approved — uniform response) */ agent_id?: string; /** @description Status message (worded to limit email enumeration where applicable) */ message?: string; /** * Format: uri * @description Present when a pending enrollment was created and the client should show * this link (email flow includes it as a fallback; name-only flow requires it). */ approval_url?: string; /** * Format: uuid * @description Pairing only. */ pairing_id?: string; /** @description Pairing only. `SHA256:` of the key, as `ssh-keygen -lf` prints it. Show it to the human. */ fingerprint?: string; /** @description Pairing only. Presented as `?poll=` on the status endpoint. Shown once. */ poll_token?: string; /** Format: date-time */ expires_at?: string; }; EnrollmentStatusResponse: { /** Format: uuid */ pairing_id?: string; /** @enum {string} */ status?: "pending" | "approved" | "denied" | "expired"; agent_name?: string; fingerprint?: string | null; /** Format: uuid */ agent_id?: string; /** @description Present exactly once, on the first poll after approval; the pairing is then closed. */ api_key?: string; vault_ids?: string[]; }; CreateAgentRequest: { /** @description Default LLM provider for automations and Shroud. */ default_llm_provider?: string; /** @description Default LLM model for automations and Shroud. */ default_llm_model?: string; /** @description List this agent in the cross-org agent directory. */ discoverable?: boolean; /** @description Description shown on the public directory listing. */ public_description?: string; /** @description Tags shown on the public directory listing. */ public_tags?: string[]; /** @description Skip creating the default access policy for this agent. */ skip_default_policy?: boolean; /** @description Address screening policy applied to transaction recipients. */ address_screening_policy?: { [key: string]: unknown; }; /** @description Enable durable key-value and semantic memory for this agent. Required before PUT /v1/agents/{agent_id}/memory/{namespace}/{key} will accept a write; without it that endpoint returns 403. */ memory_enabled?: boolean; /** @description Namespaces this agent may use. Empty or omitted means unrestricted. */ memory_namespace_allowlist?: string[]; /** * Format: int32 * @description Maximum size of a single memory entry value. Null uses the platform default (64 KiB). */ memory_max_entry_bytes?: number | null; name: string; description?: string; /** * @description Authentication method. api_key generates a one-time key; mtls requires client_cert_fingerprint; oidc_client_credentials requires oidc_issuer and oidc_client_id. * @default api_key * @enum {string} */ auth_method: "api_key" | "mtls" | "oidc_client_credentials"; scopes?: string[]; /** Format: date-time */ expires_at?: string; /** @default false */ intents_api_enabled: boolean; tx_to_allowlist?: string[]; /** @description Maximum value per transaction in native major units for the transacting chain family (ETH on EVM, BTC on Bitcoin, SOL on Solana, XRP, ADA, TRX). */ tx_max_value?: string; /** @description Rolling daily spend cap in native major units, enforced per chain family at signing time. */ tx_daily_limit?: string; /** * @deprecated * @description Deprecated alias for tx_max_value. Same unit semantics (native major units, not ETH-only). */ tx_max_value_eth?: string; /** * @deprecated * @description Deprecated alias for tx_daily_limit. */ tx_daily_limit_eth?: string; tx_allowed_chains?: string[]; /** @description Per-agent token TTL in seconds (overrides global default) */ token_ttl_seconds?: number | null; /** @description Restrict agent to specific vault UUIDs (empty = all vaults in org) */ vault_ids?: string[]; /** @description SHA-256 fingerprint of the client certificate (required for mTLS auth) */ client_cert_fingerprint?: string; /** @description OIDC issuer URL (required for oidc_client_credentials auth) */ oidc_issuer?: string; /** @description OIDC client ID (required for oidc_client_credentials auth) */ oidc_client_id?: string; /** * @description Enable Shroud LLM Proxy for this agent * @default false */ shroud_enabled: boolean; shroud_config?: components["schemas"]["ShroudConfig"]; /** @description Default system prompt for agent chat when requests do not override it. */ system_prompt?: string; /** * @description Enable Execution Intents (bindings and execute endpoint) for this agent * @default false */ execution_intents_enabled: boolean; /** @description Guardrails applied to all execution intents for this agent */ execution_guardrails?: { [key: string]: unknown; }; /** * @description When true, transaction/sign requests must arrive via a TEE host (Pro+ only) * @default false */ intents_require_tee: boolean; /** * @description When true, execute requests must arrive via TEE and all direct secret reads are blocked (Pro+ only) * @default false */ execution_require_tee: boolean; /** @description Token contract/mint addresses this agent may interact with. Empty = unrestricted. */ tx_token_allowlist?: string[]; /** * @description When true, only tokens in the known_tokens registry may be used. * @default false */ tx_known_tokens_only: boolean; /** @description Allowed XRP Ledger transaction types (Payment, TrustSet, etc.). Empty = all allowed. */ xrpl_allowed_tx_types?: string[]; /** * @description Per-chain guardrail overrides. Keys are signing chains (ethereum, bitcoin, solana, xrp, cardano, tron). * Each value may include max_value, daily_limit, to_allowlist, token_allowlist, max_per_day, * overhead_budget, max_ata_creates_per_day, max_fee_per_gas_gwei, max_gas_limit, * gas_daily_budget_native (UTC-day cumulative EVM gas estimate in native units). * Strictest of global and per-chain limits wins. Daily limits apply per chain family spend, not cross-chain totals. */ per_chain_guardrails?: { [key: string]: unknown; }; /** @description Max transactions per UTC calendar day. Null = unlimited. */ tx_max_per_day?: number | null; /** @description Per-chain daily overhead budget in native units (e.g. {"solana":"0.5","xrp":"100"}). */ tx_overhead_budget?: { [key: string]: string; } | null; /** @description Solana wallet addresses whose ATAs may be created. Empty = unrestricted. */ solana_ata_allowlist?: string[]; /** @description Whether this agent may order payment cards (x402 card ordering). Pro+ tier. */ cards_enabled?: boolean; /** @description Maximum USD amount for a single card order. */ card_max_order_usd?: string; /** @description Maximum cumulative USD spent ordering cards per rolling 24h window. */ card_daily_limit_usd?: string; /** @description Allowed x402 payTo recipients for card orders (empty = built-in Laso recipients). */ card_payto_allowlist?: string[]; /** @description Whether agents may reveal card details subject to per-card reveal policy. */ card_reveal_enabled?: boolean; /** * @description When true, card orders route through the human approval queue before x402 payment. * @default true */ card_require_approval: boolean; /** @description Graduated transaction approval policy (HITL thresholds). Separate from hard guardrails. */ tx_approval_policy?: { [key: string]: unknown; } | null; /** * @description Which business actions this agent must ask a human about, and above what * amount. `{}` means no per-action rules. * * Shape: `{ "default_mode": "deny|approve|allow", "rules": [ { "action_type": * "refund.create", "mode": "approve", "require_for_amount_above_usd": "50", * "summary_template": "Refund {{amount_usd}} to {{customer_email}}" } ] }`. * * A rule can only raise the bar. Editing this is classified as a guardrail * widening, so it routes through the same approval flow as loosening a * transaction limit. Malformed rules are rejected on write rather than * ignored at request time. */ action_approval_policy?: { [key: string]: unknown; } | null; /** * @description EIP-712 escalation when typed_data matches no allowlist — deny (403) or route to HITL (approve). * @enum {string} */ typed_data_policy?: "deny" | "approve"; /** * @description Simulation failure escalation — deny (422) or route to HITL (approve). * @enum {string} */ simulation_failure_policy?: "deny" | "approve"; /** * @description Block unlimited ERC-20 approvals (max uint256 / setApprovalForAll). * @default false */ tx_block_unlimited_approvals: boolean; /** @description Max transactions to the same recipient address per UTC day. */ tx_per_recipient_max_per_day?: number | null; /** @description Max native-unit spend to the same recipient per UTC day. */ tx_per_recipient_daily_limit?: string | null; /** @description Cap on first-time recipient spend in native units. */ new_recipient_cap_native?: string | null; /** @description Per-transaction USD cap (requires price oracle). */ tx_max_value_usd?: string | null; /** @description Rolling 24h USD spend cap (requires price oracle). */ tx_daily_limit_usd?: string | null; /** * @description Raw digest signing policy — allow, deny, or route to HITL (approve). * @default allow * @enum {string} */ raw_signing_policy: "allow" | "deny" | "approve"; /** @description personal_sign guardrails (message allowlist, max bytes, etc.). */ personal_sign_policy?: { [key: string]: unknown; }; /** * @description Allow ERC-4337 gasless UserOperations. * @default false */ allow_erc4337: boolean; /** * @description Allow EIP-7702 (tx type 4) set-code transactions. * @default false */ allow_eip7702: boolean; /** * Format: date-time * @description Optional expiration time for the agent's API key. */ api_key_expires_at?: string | null; /** @description Named environment for this agent (production, preview, development, or custom). */ environment?: string; /** * @description When true, the environment tag cannot be changed after creation. * @default false */ environment_locked: boolean; /** * @description When true, env var resolve endpoints auto-fill environment from this agent's tag. * @default false */ env_auto_resolve: boolean; /** * Format: uuid * @description Optional completed approval ID for control-plane consensus bypass when creating an agent under a control-plane governance policy. */ approval_id?: string; }; UpdateAgentRequest: { /** @description Smart account address associated with this agent. */ smart_account_address?: string; /** @description Chain name for the smart account. */ smart_account_chain?: string; /** * Format: int32 * @description EVM chain id for the smart account. */ smart_account_chain_id?: number; /** @description Smart account deployment nonce. */ smart_account_nonce?: string; /** @description Smart account initialisation data. */ smart_account_init_data?: { [key: string]: unknown; }; /** @description Allow this agent to sign arbitrary messages. */ message_signing_enabled?: boolean; /** @description EIP-712 domains this agent may sign under. */ eip712_domain_allowlist?: { [key: string]: unknown; }; /** @description Default policy applied to EIP-712 signing requests. */ eip712_default_policy?: string; /** @description Allow this agent to sign raw digests. */ raw_signing_enabled?: boolean; /** @description Default LLM provider for automations and Shroud. */ default_llm_provider?: string | null; /** @description Default LLM model for automations and Shroud. */ default_llm_model?: string | null; /** @description List this agent in the cross-org agent directory. */ discoverable?: boolean; /** @description Description shown on the public directory listing. */ public_description?: string | null; /** @description Tags shown on the public directory listing. */ public_tags?: string[]; /** @description Enable durable key-value and semantic memory for this agent. Required before PUT /v1/agents/{agent_id}/memory/{namespace}/{key} will accept a write; without it that endpoint returns 403. */ memory_enabled?: boolean; /** @description Namespaces this agent may use. Empty or omitted means unrestricted. */ memory_namespace_allowlist?: string[]; /** * Format: int32 * @description Maximum size of a single memory entry value. Null uses the platform default (64 KiB). */ memory_max_entry_bytes?: number | null; name?: string; scopes?: string[]; is_active?: boolean; /** Format: date-time */ expires_at?: string; intents_api_enabled?: boolean; tx_to_allowlist?: string[]; /** @description Maximum value per transaction in native major units for the transacting chain family (ETH on EVM, BTC on Bitcoin, SOL on Solana, XRP, ADA, TRX). */ tx_max_value?: string; /** @description Rolling daily spend cap in native major units, enforced per chain family at signing time. */ tx_daily_limit?: string; /** * @deprecated * @description Deprecated alias for tx_max_value. Same unit semantics (native major units, not ETH-only). */ tx_max_value_eth?: string; /** * @deprecated * @description Deprecated alias for tx_daily_limit. */ tx_daily_limit_eth?: string; tx_allowed_chains?: string[]; token_ttl_seconds?: number | null; vault_ids?: string[]; /** @description Enable/disable Shroud LLM Proxy */ shroud_enabled?: boolean; shroud_config?: components["schemas"]["ShroudConfig"]; /** @description Default system prompt for agent chat (null clears). */ system_prompt?: string | null; /** @description Enable/disable Execution Intents for this agent */ execution_intents_enabled?: boolean; /** @description Guardrails applied to all execution intents for this agent */ execution_guardrails?: { [key: string]: unknown; }; /** @description When true, transaction/sign requests must arrive via a TEE host (Pro+ only) */ intents_require_tee?: boolean; /** @description When true, execute requests must arrive via TEE and all direct secret reads are blocked (Pro+ only) */ execution_require_tee?: boolean; /** @description Max transactions per UTC calendar day. Null = unlimited. */ tx_max_per_day?: number | null; /** @description Per-chain daily overhead budget in native units. */ tx_overhead_budget?: { [key: string]: string; } | null; /** @description Solana wallet addresses whose ATAs may be created. */ solana_ata_allowlist?: string[]; /** @description Whether this agent may order payment cards (x402 card ordering). Pro+ tier. */ cards_enabled?: boolean; /** @description Maximum USD amount for a single card order. null clears. */ card_max_order_usd?: string | null; /** @description Maximum cumulative USD spent ordering cards per rolling 24h window. null clears. */ card_daily_limit_usd?: string | null; /** @description Allowed x402 payTo recipients for card orders (empty = built-in Laso recipients). */ card_payto_allowlist?: string[]; /** @description Whether agents may reveal card details subject to per-card reveal policy. */ card_reveal_enabled?: boolean; /** @description When true, card orders route through the human approval queue before x402 payment. */ card_require_approval?: boolean; /** @description Graduated transaction approval policy (HITL thresholds). */ tx_approval_policy?: { [key: string]: unknown; } | null; /** * @description Which business actions this agent must ask a human about, and above what * amount. `{}` means no per-action rules. * * Shape: `{ "default_mode": "deny|approve|allow", "rules": [ { "action_type": * "refund.create", "mode": "approve", "require_for_amount_above_usd": "50", * "summary_template": "Refund {{amount_usd}} to {{customer_email}}" } ] }`. * * A rule can only raise the bar. Editing this is classified as a guardrail * widening, so it routes through the same approval flow as loosening a * transaction limit. Malformed rules are rejected on write rather than * ignored at request time. */ action_approval_policy?: { [key: string]: unknown; } | null; /** * @description EIP-712 escalation policy. * @enum {string|null} */ typed_data_policy?: "deny" | "approve" | null; /** * @description Simulation failure escalation policy. * @enum {string|null} */ simulation_failure_policy?: "deny" | "approve" | null; /** @description Block unlimited ERC-20 approvals (max uint256 / setApprovalForAll). */ tx_block_unlimited_approvals?: boolean; /** @description Max transactions to the same recipient per UTC day. Null clears. */ tx_per_recipient_max_per_day?: number | null; /** @description Max native spend to same recipient per UTC day. Null clears. */ tx_per_recipient_daily_limit?: string | null; /** @description First-time recipient native cap. Null clears. */ new_recipient_cap_native?: string | null; /** @description Per-tx USD cap. Null clears. */ tx_max_value_usd?: string | null; /** @description Rolling 24h USD spend cap. Null clears. */ tx_daily_limit_usd?: string | null; /** * @description Raw digest signing policy. * @enum {string} */ raw_signing_policy?: "allow" | "deny" | "approve"; /** @description personal_sign guardrails JSON. */ personal_sign_policy?: { [key: string]: unknown; }; /** @description Allow ERC-4337 gasless UserOperations. */ allow_erc4337?: boolean; /** @description Allow EIP-7702 (tx type 4). */ allow_eip7702?: boolean; /** @description When true, clears circuit-breaker auto-suspension (human owner/admin only). */ clear_auto_suspended?: boolean; /** * @description Enable OIDC federation (RFC 8693 token-exchange) for this agent. * When true, the agent may call POST /v1/auth/federated-token to mint * federation tokens for the audiences listed in `federation_audiences`. */ federation_enabled?: boolean; /** * @description Allowlist of `aud` values the federation token-exchange may issue * tokens for (e.g. `["https://api.anthropic.com"]`). Empty array * blocks all federation requests (zero-trust default). */ federation_audiences?: string[]; /** * @description Per-agent TTL override for federation tokens (seconds). NULL falls * back to the global default (`ONECLAW_JWT_FEDERATED_TOKEN_EXPIRY_SECS`). * Hard-capped at 3600 seconds. */ federated_token_ttl_seconds?: number | null; /** @description Token contract/mint addresses this agent may interact with. Empty = unrestricted. */ tx_token_allowlist?: string[]; /** * @description When true, only tokens in the known_tokens registry may be used. * @default false */ tx_known_tokens_only: boolean; /** @description Allowed XRP Ledger transaction types (Payment, TrustSet, etc.). Empty = all allowed. */ xrpl_allowed_tx_types?: string[]; /** * @description Per-chain guardrail overrides. Keys are signing chains (ethereum, bitcoin, solana, xrp, cardano, tron). * Each value may include max_value, daily_limit, to_allowlist, token_allowlist (legacy *_eth keys accepted), * max_fee_per_gas_gwei, max_gas_limit, gas_daily_budget_native (UTC-day cumulative EVM gas in native units). * Strictest of global and per-chain limits wins. Daily limits apply per chain family spend, not cross-chain totals. */ per_chain_guardrails?: { [key: string]: unknown; }; /** * Format: date-time * @description Optional expiration time for the agent's API key. Set to null to clear. */ api_key_expires_at?: string | null; /** @description Named environment for this agent (production, preview, development, or custom). */ environment?: string | null; /** @description When true, the environment tag cannot be changed after creation. */ environment_locked?: boolean; /** @description When true, env var resolve endpoints auto-fill environment from this agent's tag. */ env_auto_resolve?: boolean; /** @description Per-environment guardrail overrides keyed by environment slug. */ per_environment_guardrails?: { [key: string]: unknown; }; /** @description Recipient address screening policy. `mode` may be `off`, `deny`, or `approve`. */ address_screening_policy?: { [key: string]: unknown; }; /** * Format: uuid * @description Approved policy_change id when applying a queued guardrail widening. Resubmit PATCH with this field after the approval has been approved via POST /v1/approvals/{approval_id}/decide. */ approval_id?: string; }; AgentResponse: { /** * @description A `child` is a sub-agent under `parent_agent_id` that inherits its parent's policies and does not count against the plan's agent cap. * @enum {string} */ agent_type?: "standard" | "child"; /** * Format: uuid * @description Present on child agents. */ parent_agent_id?: string; /** @description Whether durable key-value and semantic memory is enabled. Omitted when false: the server skips serializing this field unless it is true, so an absent key means disabled. */ memory_enabled?: boolean; /** @description Namespaces this agent may use. Omitted when empty, which means unrestricted. */ memory_namespace_allowlist?: string[]; /** * Format: int32 * @description Maximum size of a single memory entry value. Omitted when unset, which means the platform default (64 KiB). */ memory_max_entry_bytes?: number | null; /** Format: uuid */ id: string; name: string; description?: string; /** @enum {string} */ auth_method: "api_key" | "mtls" | "oidc_client_credentials"; scopes?: string[]; is_active: boolean; intents_api_enabled: boolean; tx_to_allowlist?: string[]; /** @description Maximum value per transaction in native major units for the transacting chain family (ETH on EVM, BTC on Bitcoin, SOL on Solana, XRP, ADA, TRX). */ tx_max_value?: string; /** @description Rolling daily spend cap in native major units, enforced per chain family at signing time. */ tx_daily_limit?: string; /** * @deprecated * @description Deprecated alias for tx_max_value. Same unit semantics (native major units, not ETH-only). */ tx_max_value_eth?: string; /** * @deprecated * @description Deprecated alias for tx_daily_limit. */ tx_daily_limit_eth?: string; /** @description Sum of today's spend across all chain families in major units. Prefer tx_spent_today_by_chain. */ tx_spent_today?: string; /** * @deprecated * @description Deprecated alias for tx_spent_today. */ tx_spent_today_eth?: string; tx_allowed_chains?: string[]; token_ttl_seconds?: number | null; vault_ids?: string[]; /** @description SHA-256 fingerprint of the client certificate (mTLS agents) */ client_cert_fingerprint?: string; /** @description OIDC issuer URL (oidc_client_credentials agents) */ oidc_issuer?: string; /** @description OIDC client ID (oidc_client_credentials agents) */ oidc_client_id?: string; /** @description Ed25519 SSH public key (base64-encoded, auto-generated at creation) */ ssh_public_key?: string; /** @description P-256 ECDH public key (base64 SEC1 uncompressed point, auto-generated at creation) */ ecdh_public_key?: string; /** @description Whether this agent routes LLM traffic through the Shroud TEE proxy */ shroud_enabled: boolean; shroud_config?: components["schemas"]["ShroudConfig"]; /** @description Default system prompt for agent chat when requests do not override it. */ system_prompt?: string; /** @description Whether Execution Intents (bindings and execute endpoint) are enabled for this agent */ execution_intents_enabled?: boolean; /** @description Guardrails applied to all execution intents for this agent */ execution_guardrails?: { [key: string]: unknown; }; /** @description When true, transaction/sign requests must arrive via a TEE host (Pro+ only) */ intents_require_tee?: boolean; /** @description When true, execute requests must arrive via TEE and all direct secret reads are blocked (Pro+ only) */ execution_require_tee?: boolean; /** @description Max transactions per UTC calendar day. Null = unlimited. */ tx_max_per_day?: number | null; /** @description Per-chain daily overhead budget in native units. */ tx_overhead_budget?: { [key: string]: string; } | null; /** @description Solana wallet addresses whose ATAs may be created. */ solana_ata_allowlist?: string[]; /** @description Whether this agent may order payment cards (x402 card ordering). */ cards_enabled?: boolean; /** @description Maximum USD amount for a single card order. */ card_max_order_usd?: string; /** @description Maximum cumulative USD spent ordering cards per rolling 24h window. */ card_daily_limit_usd?: string; /** @description Allowed x402 payTo recipients for card orders (empty = built-in Laso recipients). */ card_payto_allowlist?: string[]; /** @description Whether agents may reveal card details subject to per-card reveal policy. */ card_reveal_enabled?: boolean; /** @description When true, card orders route through the human approval queue before x402 payment. */ card_require_approval?: boolean; /** @description Graduated transaction approval policy (HITL thresholds). */ tx_approval_policy?: { [key: string]: unknown; } | null; /** * @description Which business actions this agent must ask a human about, and above what * amount. `{}` means no per-action rules. * * Shape: `{ "default_mode": "deny|approve|allow", "rules": [ { "action_type": * "refund.create", "mode": "approve", "require_for_amount_above_usd": "50", * "summary_template": "Refund {{amount_usd}} to {{customer_email}}" } ] }`. * * A rule can only raise the bar. Editing this is classified as a guardrail * widening, so it routes through the same approval flow as loosening a * transaction limit. Malformed rules are rejected on write rather than * ignored at request time. */ action_approval_policy?: { [key: string]: unknown; } | null; /** @enum {string|null} */ typed_data_policy?: "deny" | "approve" | null; /** @enum {string|null} */ simulation_failure_policy?: "deny" | "approve" | null; /** @description Block unlimited ERC-20 approvals. */ tx_block_unlimited_approvals?: boolean; tx_per_recipient_max_per_day?: number | null; tx_per_recipient_daily_limit?: string | null; new_recipient_cap_native?: string | null; tx_max_value_usd?: string | null; tx_daily_limit_usd?: string | null; /** @enum {string} */ raw_signing_policy?: "allow" | "deny" | "approve"; personal_sign_policy?: { [key: string]: unknown; } | null; allow_erc4337?: boolean; allow_eip7702?: boolean; /** @description True when circuit breaker auto-suspended the agent after repeated guardrail denials. */ auto_suspended?: boolean; /** @description Today's transaction count (UTC calendar day). Present when intents_api_enabled. */ tx_count_today?: number; /** @description Today's overhead spend by chain in native units. */ tx_overhead_today_by_chain?: { [key: string]: string; }; /** * @description Whether this agent may mint OIDC federation tokens via * POST /v1/auth/federated-token. False by default. */ federation_enabled?: boolean; /** @description Allowlist of audience URIs the agent may federate to. */ federation_audiences?: string[]; /** @description Per-agent TTL override for federation tokens (60..=3600). */ federated_token_ttl_seconds?: number | null; /** @description Chains for which this agent has provisioned signing keys. */ signing_chains?: string[]; /** @description JSON array of allowed EIP-712 domain entries. */ eip712_domain_allowlist?: Record[]; /** * @description Default EIP-712 policy (deny blocks all unless allowlisted). * @enum {string} */ eip712_default_policy?: "deny" | "allow"; /** @description Whether EIP-191 personal_sign is enabled. */ message_signing_enabled?: boolean; /** @description Whether the raw/precomputed-digest signing intent (eip712_digest) is enabled. Blind signing — bypasses transaction guardrails; OFF by default and human-set. Required for ERC-1271/ERC-7739 flows (e.g. Polymarket). */ raw_signing_enabled?: boolean; /** @description Token contract/mint addresses this agent may interact with. */ tx_token_allowlist?: string[]; /** @description When true, only tokens in the known_tokens registry may be used. */ tx_known_tokens_only?: boolean; /** @description Allowed XRP Ledger transaction types. */ xrpl_allowed_tx_types?: string[]; /** @description Per-chain guardrail overrides. */ per_chain_guardrails?: { [key: string]: unknown; }; /** @description Per-chain-family daily spend in native major units (keys: evm, bitcoin, solana, xrp, cardano, tron). */ tx_spent_today_by_chain?: { [key: string]: string; }; /** * Format: date-time * @description Optional expiration time for the agent's API key. */ api_key_expires_at?: string | null; /** @description Agent's Ethereum EOA address (used as Safe signer for smart accounts and Intents API). */ evm_address?: string | null; /** Format: date-time */ created_at: string; /** Format: date-time */ expires_at?: string; /** Format: date-time */ last_active_at?: string; /** @description Multi-chain; one Safe per chain */ smart_accounts?: components["schemas"]["AgentSmartAccountResponse"][]; /** @description Named environment this agent belongs to (production, preview, development, or custom). */ environment?: string | null; /** @description When true, the environment tag is locked and cannot be changed. */ environment_locked?: boolean; /** @description When true, env var resolve endpoints auto-fill environment from this agent's tag. */ env_auto_resolve?: boolean; /** @description Per-environment guardrail overrides keyed by environment slug. */ per_environment_guardrails?: { [key: string]: unknown; }; /** @description Recipient address screening policy. `mode` may be `off`, `deny`, or `approve`. */ address_screening_policy?: { [key: string]: unknown; }; }; KnownToken: { /** Format: uuid */ id: string; chain: string; symbol: string; name: string; contract_address: string; decimals: number; is_testnet: boolean; is_verified: boolean; logo_url?: string | null; /** Format: date-time */ created_at?: string; /** Format: date-time */ updated_at?: string; }; KnownTokenListResponse: { tokens: components["schemas"]["KnownToken"][]; }; CreateKnownTokenRequest: { chain: string; symbol: string; name: string; contract_address: string; decimals: number; /** @default false */ is_testnet: boolean; /** @default true */ is_verified: boolean; logo_url?: string | null; }; /** @description One Safe smart account per chain for an agent */ AgentSmartAccountResponse: { /** Format: uuid */ id?: string; chain?: string; chain_id?: number; safe_address?: string; nonce?: string; init_data?: Record; /** Format: date-time */ created_at?: string; }; AddSmartAccountRequest: { chain: string; chain_id: number; safe_address: string; nonce?: string; init_data?: Record; }; AgentSelfResponse: { /** Format: uuid */ id?: string; name?: string; description?: string; /** Format: uuid */ org_id?: string; scopes?: string[]; is_active?: boolean; intents_api_enabled?: boolean; /** Format: uuid */ created_by?: string; /** Format: date-time */ created_at?: string; /** Format: date-time */ expires_at?: string; /** Format: date-time */ last_active_at?: string; /** @description Ed25519 SSH public key (base64-encoded) */ ssh_public_key?: string; /** @description P-256 ECDH public key (base64 SEC1 uncompressed point) */ ecdh_public_key?: string; /** @description Whether this agent routes LLM traffic through the Shroud TEE proxy */ shroud_enabled?: boolean; shroud_config?: components["schemas"]["ShroudConfig"]; }; /** @description Per-agent Shroud LLM Proxy configuration */ ShroudConfig: { /** * @description How PII detections are handled * @default redact * @enum {string} */ pii_policy: "block" | "redact" | "warn" | "allow"; /** * @description Prompt injection score threshold (0.0–1.0). Requests above are blocked * @default 0.7 */ injection_threshold: number; /** * @description Context injection score threshold (0.0–1.0) * @default 0.7 */ context_injection_threshold: number; /** @description LLM providers this agent may use (empty = all) */ allowed_providers?: string[]; /** @description Specific models allowed (empty = all) */ allowed_models?: string[]; /** @description Models explicitly blocked */ denied_models?: string[]; /** @description Maximum input tokens per request */ max_tokens_per_request?: number; /** @description Rate limit (requests per minute) */ max_requests_per_minute?: number; /** @description Rate limit (requests per day) */ max_requests_per_day?: number; /** @description Daily LLM spend cap in USD (0 = unlimited) */ daily_budget_usd?: number; /** * @description Whether vault secrets are redacted from prompts/responses * @default true */ enable_secret_redaction: boolean; /** * @description Whether response credential scanning is active * @default true */ enable_response_filtering: boolean; unicode_normalization?: components["schemas"]["UnicodeNormalizationConfig"]; command_injection_detection?: components["schemas"]["CommandInjectionConfig"]; social_engineering_detection?: components["schemas"]["SocialEngineeringConfig"]; encoding_detection?: components["schemas"]["EncodingDetectionConfig"]; network_detection?: components["schemas"]["NetworkDetectionConfig"]; filesystem_detection?: components["schemas"]["FilesystemDetectionConfig"]; /** * @description Global behavior when threats are detected (block=reject, surgical=remove only malicious parts, log_only=audit without action) * @default block * @enum {string} */ sanitization_mode: "block" | "surgical" | "log_only"; /** * @description Whether to log all detected threats to audit (even when action is allow/warn) * @default true */ threat_logging: boolean; tool_call_inspection?: components["schemas"]["ToolCallPolicy"]; output_policy?: components["schemas"]["OutputPolicy"]; secret_injection_detection?: components["schemas"]["SecretInjectionConfig"]; advanced_redaction?: components["schemas"]["AdvancedRedactionConfig"]; semantic_policy?: components["schemas"]["SemanticPolicy"]; /** @description Number of days to retain flagged request bodies for replay/investigation */ flagged_request_retention_days?: number; /** * @description How streamed LLM responses are inspected before release. `rolling` (default) releases text behind a tail buffer at least as long as the org's longest vault secret (capped at 256 bytes; longer secrets are matched by prefix); `holdback` buffers `streaming_holdback_chars` for full parity with buffered inspection. Tool-call deltas are always held until the call is complete. * @enum {string} */ streaming_inspection_mode?: "rolling" | "holdback"; /** @description Characters held back per stream in holdback mode (default 512) */ streaming_holdback_chars?: number; /** @description Open streaming responses allowed per agent key (default 20; 429 with Retry-After beyond it) */ max_concurrent_streams?: number; }; /** @description Unicode normalization and homoglyph detection settings */ UnicodeNormalizationConfig: { /** * @description Enable Unicode normalization * @default true */ enabled: boolean; /** * @description Remove zero-width and invisible Unicode characters * @default true */ strip_zero_width: boolean; /** * @description Replace look-alike characters (e.g., Cyrillic а → Latin a) * @default true */ normalize_homoglyphs: boolean; /** * @description Unicode normalization form to apply * @default NFKC * @enum {string} */ normalization_form: "NFC" | "NFKC" | "NFD" | "NFKD"; }; /** @description Shell/command injection detection settings */ CommandInjectionConfig: { /** * @description Enable command injection detection * @default true */ enabled: boolean; /** * @description Action when command injection is detected * @default block * @enum {string} */ action: "block" | "sanitize" | "warn" | "log"; /** * @description Pattern strictness level * @default default * @enum {string} */ patterns: "default" | "strict" | "custom"; /** @description Custom regex patterns for detection (only used when patterns=custom) */ custom_patterns?: string[]; }; /** @description Social engineering and manipulation detection settings */ SocialEngineeringConfig: { /** * @description Enable social engineering detection * @default true */ enabled: boolean; /** * @description Action when manipulation attempts are detected * @default warn * @enum {string} */ action: "block" | "warn" | "log"; /** * @description Detection sensitivity level * @default medium * @enum {string} */ sensitivity: "low" | "medium" | "high"; }; /** @description Encoding/obfuscation detection settings */ EncodingDetectionConfig: { /** * @description Enable encoding detection * @default true */ enabled: boolean; /** * @description Action when obfuscated content is detected * @default warn * @enum {string} */ action: "block" | "decode" | "warn" | "log"; /** * @description Detect Base64-encoded content * @default true */ detect_base64: boolean; /** * @description Detect hex-encoded content (\\x41, 0x41) * @default true */ detect_hex: boolean; /** * @description Detect Unicode escape sequences (\\u0041) * @default true */ detect_unicode_escape: boolean; }; /** @description Suspicious URL/domain detection settings */ NetworkDetectionConfig: { /** * @description Enable network/URL detection * @default true */ enabled: boolean; /** * @description Action when suspicious URLs are detected * @default warn * @enum {string} */ action: "block" | "warn" | "log"; /** @description Domains to always block (e.g., pastebin.com, ngrok.io) */ blocked_domains?: string[]; /** @description Domains to always allow (allowlist mode when non-empty) */ allowed_domains?: string[]; }; /** @description Filesystem path detection settings */ FilesystemDetectionConfig: { /** * @description Enable filesystem path detection (disabled by default as it can be noisy) * @default false */ enabled: boolean; /** * @description Action when filesystem paths are detected * @default log * @enum {string} */ action: "block" | "sanitize" | "warn" | "log"; /** @description Path patterns to block (e.g., /etc/passwd, ~/.ssh) */ blocked_paths?: string[]; }; /** @description Tool/function call inspection settings */ ToolCallPolicy: { /** * @description Enable tool call inspection * @default false */ enabled: boolean; /** @description Allowed tool/function names (empty = all allowed) */ allowed_tool_names?: string[]; /** @description Denied tool/function names */ denied_tool_names?: string[]; /** * @description Scan tool call arguments for credential exfiltration * @default true */ scan_arguments: boolean; /** * @description Block tool calls that appear to exfiltrate credentials * @default true */ block_credential_exfil: boolean; /** * @description Action when a tool call violation is detected * @default block * @enum {string} */ action: "block" | "sanitize" | "warn" | "log"; }; /** @description Output content policy settings for LLM responses */ OutputPolicy: { /** * @description Enable output content policies * @default false */ enabled: boolean; /** @description Custom regex patterns to block in responses */ blocked_patterns?: string[]; /** @description Named entities to block (e.g., competitor names) */ blocked_entities?: string[]; /** * @description Block responses containing harmful content categories * @default false */ block_harmful_content: boolean; /** @description Harm categories to block */ harmful_categories?: ("violence" | "self_harm" | "illegal" | "hate" | "sexual" | "malware")[]; /** * @description Action when output policy is violated * @default warn * @enum {string} */ action: "block" | "sanitize" | "warn" | "log"; }; /** @description Detects credentials injected into prompts that are not from the vault */ SecretInjectionConfig: { /** * @description Enable secret injection detection * @default false */ enabled: boolean; /** * @description Action when injected credentials are detected * @default block * @enum {string} */ action: "block" | "sanitize" | "warn" | "log"; /** * @description Detection sensitivity level * @default medium * @enum {string} */ sensitivity: "low" | "medium" | "high"; }; /** @description Advanced secret redaction settings (base64-encoded, split, prefix leaks) */ AdvancedRedactionConfig: { /** * @description Enable advanced redaction checks * @default false */ enabled: boolean; /** * @description Detect base64-encoded vault secrets * @default false */ detect_base64_encoded: boolean; /** * @description Detect secrets split across tokens or messages * @default false */ detect_split_secrets: boolean; /** * @description Detect partial/prefix leaks of vault secrets * @default false */ detect_prefix_leak: boolean; /** * @description Minimum secret length to consider for advanced matching * @default 16 */ min_secret_length: number; }; /** @description Semantic/intent-level policy enforcement */ SemanticPolicy: { /** * @description Enable semantic policy enforcement * @default false */ enabled: boolean; /** @description Topics the agent is allowed to discuss (empty = all) */ allowed_topics?: string[]; /** @description Topics to block */ denied_topics?: string[]; /** @description Tasks the agent is allowed to perform (empty = all) */ allowed_tasks?: string[]; /** @description Tasks to block (e.g., code_generation, data_export) */ denied_tasks?: string[]; /** * @description Action when semantic policy is violated * @default warn * @enum {string} */ action: "block" | "sanitize" | "warn" | "log"; }; AgentCreatedResponse: { agent: components["schemas"]["AgentResponse"]; /** @description One-time API key (only present for api_key auth method) */ api_key?: string; }; AgentListResponse: { agents?: components["schemas"]["AgentResponse"][]; }; AgentKeyRotatedResponse: { api_key?: string; }; SubmitTransactionRequest: { /** @description Destination address (0x-prefixed) */ to: string; /** @description Value in ETH */ value: string; /** @description Chain name or numeric ID */ chain: string; /** @description Hex-encoded calldata */ data?: string; /** @description Vault path to signing key. Auto-resolves per-chain signing key if provisioned, otherwise keys/{chain}-signer. */ signing_key_path?: string; nonce?: number; gas_price?: string; gas_limit?: number; max_fee_per_gas?: string; max_priority_fee_per_gas?: string; /** @default false */ simulate_first: boolean; /** * @description Transaction mode * @default eoa * @enum {string} */ mode: "eoa" | "smart_account"; /** * @description Whether to submit as a gasless (sponsored) transaction * @default false */ gasless: boolean; /** @description Non-EVM (XRP): destination tag for exchange deposits */ destination_tag?: number; /** @description Non-EVM (XRP, Solana): optional memo */ memo?: string; /** @description Non-EVM (Bitcoin): override the fetched fee rate (sat/vByte) */ fee_rate_sat_per_vbyte?: number; /** @description Non-EVM (Tron): TRC-20 energy fee limit in sun */ fee_limit_sun?: number; /** @description Non-EVM (Solana SPL / Tron TRC-20): token mint or contract address; omit for native transfer */ token_mint?: string; /** @description Non-EVM (Solana, Tron): token decimals (default 6) */ token_decimals?: number; /** @description Non-EVM (Cardano): transaction time-to-live (absolute slot) */ ttl?: number; /** @description Raw XRPL transaction JSON for full transaction type coverage. When present (and chain is XRP), the handler uses the xrpl-rust binary codec to encode and sign the transaction as-is. Supports all XRPL transaction types: Payment, TrustSet, OfferCreate, OfferCancel, AccountSet, EscrowCreate, NFTokenMint, AMMCreate, and 20+ more. Account, Sequence, Fee, LastLedgerSequence, and SigningPubKey are auto-filled when absent. */ xrpl_tx_json?: { [key: string]: unknown; }; /** * Format: uuid * @description Optional pending approval ID. When consensus policies match, clients resubmit with this field set to bypass the 202 gate after the approval has been executed. */ approval_id?: string; /** @description Pre-built raw transaction as a base64-encoded byte string. When provided, the handler decodes and deep-inspects the transaction for policy evaluation before signing. Supported for non-EVM chains where the client constructs the transaction payload. */ raw_transaction?: string; /** @description Pre-built Tron transaction JSON object. When provided, the handler signs the transaction as-is using the Tron protobuf format. Enables full Tron transaction type coverage beyond simple TRX/TRC-20 transfers. */ tron_transaction?: { [key: string]: unknown; }; }; SignTransactionRequest: { /** @description Destination address (0x-prefixed) */ to: string; /** @description Value in ETH */ value: string; /** @description Chain name or numeric ID */ chain: string; /** @description Hex-encoded calldata */ data?: string; /** @description Vault path to signing key. Auto-resolves per-chain signing key if provisioned, otherwise keys/{chain}-signer. */ signing_key_path?: string; nonce?: number; gas_price?: string; gas_limit?: number; max_fee_per_gas?: string; max_priority_fee_per_gas?: string; /** @default false */ simulate_first: boolean; /** @description Non-EVM (XRP): destination tag for exchange deposits */ destination_tag?: number; /** @description Non-EVM (XRP, Solana): optional memo */ memo?: string; /** @description Non-EVM (Bitcoin): override the fetched fee rate (sat/vByte) */ fee_rate_sat_per_vbyte?: number; /** @description Non-EVM (Tron): TRC-20 energy fee limit in sun */ fee_limit_sun?: number; /** @description Non-EVM (Solana SPL / Tron TRC-20): token mint or contract address; omit for native transfer */ token_mint?: string; /** @description Non-EVM (Solana, Tron): token decimals (default 6) */ token_decimals?: number; /** @description Non-EVM (Cardano): transaction time-to-live (absolute slot) */ ttl?: number; /** @description Raw XRPL transaction JSON for full transaction type coverage. When present (and chain is XRP), the handler uses the xrpl-rust binary codec to encode and sign the transaction as-is. Supports all XRPL transaction types: Payment, TrustSet, OfferCreate, OfferCancel, AccountSet, EscrowCreate, NFTokenMint, AMMCreate, and 20+ more. Account, Sequence, Fee, LastLedgerSequence, and SigningPubKey are auto-filled when absent. */ xrpl_tx_json?: { [key: string]: unknown; }; }; SignTransactionResponse: { /** @description Raw signed transaction hex (always included) */ signed_tx?: string; tx_hash?: string; /** @description Derived sender address */ from?: string; to?: string; chain?: string; chain_id?: number; nonce?: number; value_wei?: string; /** @enum {string} */ status?: "sign_only"; simulation_id?: string; simulation_status?: string; max_fee_per_gas?: string; max_priority_fee_per_gas?: string; }; SimulateTransactionRequest: { to: string; value: string; chain: string; data?: string; /** @description Vault path to signing key. Auto-resolves per-chain signing key if provisioned, otherwise keys/{chain}-signer. */ signing_key_path?: string; gas_limit?: number; }; SimulateBundleRequest: { transactions: components["schemas"]["SimulateTransactionRequest"][]; }; CreateSigningKeyRequest: { /** * @description `midnight` is Preprod-only and requires the midnight-signer * sidecar. Note it can be provisioned but not rotated or * imported: derivation happens in the sidecar, so there is no * local keygen and no raw private key to import. Both of * those endpoints refuse it before consuming an approval. * @enum {string} */ chain: "ethereum" | "bitcoin" | "solana" | "xrp" | "cardano" | "tron" | "midnight"; }; SigningKeyResponse: { /** Format: uuid */ id?: string; /** Format: uuid */ agent_id?: string; chain?: string; curve?: string; public_key?: string; address?: string | null; key_version?: number; is_active?: boolean; /** Format: date-time */ created_at?: string; /** Format: date-time */ rotated_at?: string | null; /** * @description `server` — 1claw holds the whole private key and can sign alone. * `client_tss` — 2-party threshold key; the customer's passkey share is required. * @enum {string} */ custody?: "server" | "client_tss"; }; SigningKeyListResponse: { keys?: components["schemas"]["SigningKeyResponse"][]; }; ConnectionSigningKeyPublic: { chain?: string; address?: string; public_key?: string; curve?: string; }; ConnectionSigningKeyListResponse: { /** Format: uuid */ agent_id?: string; keys?: components["schemas"]["ConnectionSigningKeyPublic"][]; }; ConnectionSigningKeyDetailResponse: { /** Format: uuid */ agent_id?: string; chain?: string; address?: string; public_key?: string; curve?: string; }; /** @description At least one field is required. */ PatchConnectionAgentRequest: { intents_api_enabled?: boolean; execution_intents_enabled?: boolean; /** * @description Agent memory, off by default. Until this field existed a * platform app had no way to turn it on: a bootstrap template * accepted `memory_enabled` in its spec and never read it, so * the capability was reachable only from the end user's own * dashboard. Templates now honour the flag too. */ memory_enabled?: boolean; system_prompt?: string | null; }; PatchConnectionAgentResponse: { /** Format: uuid */ agent_id?: string; intents_api_enabled?: boolean; execution_intents_enabled?: boolean; memory_enabled?: boolean; system_prompt?: string | null; }; LeaseBankrKeyRequest: { /** @description Bankr wallet ID (wlt_...). Uses org default if omitted. */ wallet_id?: string; /** @description Lease TTL in seconds (default 3600, max 86400). */ ttl_seconds?: number; permissions?: components["schemas"]["LeaseBankrPermissions"]; }; LeaseBankrPermissions: { /** @default true */ llm_gateway_enabled: boolean; /** @default false */ agent_api_enabled: boolean; /** @default true */ read_only: boolean; }; LeaseBankrKeyResponse: { /** Format: uuid */ lease_id?: string; /** @description Ephemeral bk_usr_ key. Present for human callers only; omitted for agent JWTs. */ api_key?: string; wallet_id?: string; /** Format: date-time */ expires_at?: string; }; BankrKeyLeaseResponse: { /** Format: uuid */ id?: string; wallet_id?: string; bankr_key_id?: string; permissions?: Record; /** Format: date-time */ expires_at?: string; /** Format: date-time */ created_at?: string; }; BankrKeyLeaseListResponse: { leases?: components["schemas"]["BankrKeyLeaseResponse"][]; }; CreateDelegationRequest: { /** * Format: uuid * @description The agent ID to delegate to. */ delegate_id: string; /** @description Tool names the delegate may use. Empty means all tools allowed. */ allowed_tools?: string[]; /** @description Tool names the delegate may NOT use. */ blocked_tools?: string[]; /** @description Maximum delegation calls per UTC day. NULL means unlimited. */ max_daily_delegations?: number; /** * @description Maximum delegation chain depth (default 3). * @default 3 */ max_depth: number; /** @description Additional guardrail constraints for this delegation. */ guardrails?: Record; /** * @description Execution mode: caller (use delegator's creds), target (use delegate's config), or both. * @default caller * @enum {string} */ delegation_mode: "caller" | "target" | "both"; /** * Format: date-time * @description Optional expiration timestamp. */ expires_at?: string; }; UpdateDelegationRequest: { allowed_tools?: string[]; blocked_tools?: string[]; max_daily_delegations?: number; max_depth?: number; guardrails?: Record; /** @enum {string} */ delegation_mode?: "caller" | "target" | "both"; is_active?: boolean; /** Format: date-time */ expires_at?: string | null; }; DelegationResponse: { /** Format: uuid */ id?: string; /** Format: uuid */ org_id?: string; /** Format: uuid */ delegator_id?: string; /** Format: uuid */ delegate_id?: string; delegator_name?: string; delegate_name?: string; allowed_tools?: string[]; blocked_tools?: string[]; max_daily_delegations?: number | null; max_depth?: number; guardrails?: Record; /** @enum {string} */ delegation_mode?: "caller" | "target" | "both"; is_active?: boolean; /** Format: uuid */ created_by?: string; /** Format: date-time */ expires_at?: string | null; /** Format: date-time */ created_at?: string; /** Format: date-time */ updated_at?: string; /** @description Number of delegations used today (present in effective endpoint). */ delegations_today?: number; }; DelegationListResponse: { delegations?: components["schemas"]["DelegationResponse"][]; }; SignIntentRequest: { /** @enum {string} */ intent_type: "personal_sign" | "typed_data" | "eip712_digest" | "transaction"; chain: string; /** @description Vault path to signing key. Auto-resolves per-chain signing key if provisioned, otherwise keys/{chain}-signer. */ signing_key_path?: string; /** @description Hex-encoded message bytes (for personal_sign) */ message?: string; /** @description EIP-712 typed data JSON (for typed_data) */ typed_data?: Record; /** @description Client-computed 32-byte digest (0x-prefixed) for the eip712_digest intent. Signed directly (blind signing); requires the agent's raw_signing_enabled flag. Use for ERC-1271/ERC-7739 nested EIP-712 flows (e.g. Polymarket) where the canonical hash is computed client-side. */ hash?: string; /** @description EIP-2718 type: 0=legacy, 1=2930, 2=1559, 3=4844, 4=7702 */ tx_type?: number; to?: string; value?: string; data?: string; nonce?: number; gas_limit?: number; gas_price?: string; max_fee_per_gas?: string; max_priority_fee_per_gas?: string; access_list?: Record[]; max_fee_per_blob_gas?: string; blob_versioned_hashes?: string[]; authorization_list?: Record[]; /** @description When true, sign only (do not broadcast). Non-EVM transaction intents only. */ sign_only?: boolean; /** @description Non-EVM (XRP): destination tag for exchange deposits */ destination_tag?: number; /** @description Non-EVM (XRP, Solana): optional memo */ memo?: string; /** @description Non-EVM (Bitcoin): override the fetched fee rate (sat/vByte) */ fee_rate_sat_per_vbyte?: number; /** @description Non-EVM (Tron): TRC-20 energy fee limit in sun */ fee_limit_sun?: number; /** @description Non-EVM (Solana SPL / Tron TRC-20): token mint or contract address; omit for native transfer */ token_mint?: string; /** @description Non-EVM (Solana, Tron): token decimals (default 6) */ token_decimals?: number; /** @description Non-EVM (Cardano): transaction time-to-live (absolute slot) */ ttl?: number; /** @description Raw XRPL transaction JSON for full transaction type coverage. When present (and chain is XRP), the handler uses the xrpl-rust binary codec to encode and sign the transaction as-is. Supports all XRPL transaction types: Payment, TrustSet, OfferCreate, OfferCancel, AccountSet, EscrowCreate, NFTokenMint, AMMCreate, and 20+ more. Account, Sequence, Fee, LastLedgerSequence, and SigningPubKey are auto-filled when absent. */ xrpl_tx_json?: { [key: string]: unknown; }; /** * Format: uuid * @description Optional pending approval ID. When consensus policies match, clients resubmit with this field set to bypass the 202 gate after the approval has been executed. */ approval_id?: string; /** @description Pre-built raw transaction as a base64-encoded byte string. When provided, the handler decodes and deep-inspects the transaction for policy evaluation before signing. Supported for non-EVM chains where the client constructs the transaction payload. */ raw_transaction?: string; /** @description Pre-built Tron transaction JSON object. When provided, the handler signs the transaction as-is using the Tron protobuf format. Enables full Tron transaction type coverage beyond simple TRX/TRC-20 transfers. */ tron_transaction?: { [key: string]: unknown; }; }; SignIntentResponse: { intent_type?: string; chain?: string; from?: string; signature?: string | null; signed_tx?: string | null; tx_hash?: string | null; message_hash?: string | null; typed_data_hash?: string | null; tx_type?: number | null; }; TransactionResponse: { /** Format: uuid */ id?: string; /** Format: uuid */ agent_id?: string; chain?: string; chain_id?: number; to?: string; value_wei?: string; /** @enum {string} */ status?: "pending" | "signed" | "sign_only" | "broadcast" | "failed" | "simulation_failed"; /** @description Raw signed transaction hex. On GET list and GET by id, this property is omitted by default (absent from the response). Pass `include_signed_tx=true` on those endpoints to include it. Always present on the initial POST submit response. */ signed_tx?: string | null; tx_hash?: string; error_message?: string; /** Format: date-time */ created_at?: string; /** Format: date-time */ signed_at?: string; simulation_id?: string; simulation_status?: string; /** Format: uri */ tenderly_dashboard_url?: string; max_fee_per_gas?: string; max_priority_fee_per_gas?: string; }; TransactionListResponse: { transactions?: components["schemas"]["TransactionResponse"][]; }; BalanceChange: { address?: string; token?: string; token_symbol?: string; before?: string; after?: string; change?: string; }; SimulationResponse: { simulation_id?: string; /** @enum {string} */ status?: "success" | "reverted" | "error"; gas_used?: number; gas_estimate_usd?: string; balance_changes?: components["schemas"]["BalanceChange"][]; error?: string; error_code?: string; error_human_readable?: string; revert_reason?: string; /** Format: uri */ tenderly_dashboard_url?: string; /** Format: date-time */ simulated_at?: string; }; BundleSimulationResponse: { simulations?: components["schemas"]["SimulationResponse"][]; }; ChainResponse: { /** Format: uuid */ id?: string; name?: string; display_name?: string; chain_id?: number; rpc_url?: string; ws_url?: string; explorer_url?: string; native_currency?: string; is_testnet?: boolean; is_enabled?: boolean; /** Format: date-time */ created_at?: string; /** Format: date-time */ updated_at?: string; }; ChainListResponse: { chains?: components["schemas"]["ChainResponse"][]; }; CreateChainRequest: { name: string; display_name: string; chain_id: number; rpc_url?: string; ws_url?: string; explorer_url?: string; /** @default ETH */ native_currency: string; /** @default false */ is_testnet: boolean; /** @default true */ is_enabled: boolean; }; UpdateChainRequest: { display_name?: string; rpc_url?: string; ws_url?: string; explorer_url?: string; native_currency?: string; is_testnet?: boolean; is_enabled?: boolean; }; CreateShareRequest: { /** @enum {string} */ recipient_type: "user" | "agent" | "external_email" | "anyone_with_link" | "creator"; /** Format: uuid */ recipient_id?: string; /** Format: email */ email?: string; permissions?: string[]; max_access_count?: number; /** Format: date-time */ expires_at: string; passphrase?: string; ip_allowlist?: string[]; }; ShareResponse: { /** Format: uuid */ id?: string; /** Format: uri */ share_url?: string; recipient_type?: string; recipient_email?: string; /** Format: date-time */ expires_at?: string; max_access_count?: number; }; SharedSecretResponse: { /** Format: uuid */ id?: string; path?: string; type?: string; value?: string; access_count?: number; max_access_count?: number; }; ShareListItem: { /** Format: uuid */ id?: string; secret_path?: string; recipient_type?: string; recipient_email?: string; access_count?: number; max_access_count?: number; /** Format: date-time */ expires_at?: string; /** Format: date-time */ created_at?: string; is_expired?: boolean; is_accepted?: boolean; }; ShareListResponse: { shares?: components["schemas"]["ShareListItem"][]; }; OrgMemberResponse: { /** Format: uuid */ id?: string; email?: string; display_name?: string; role?: string; auth_method?: string; /** Format: date-time */ created_at?: string; }; OrgMemberListResponse: { members?: components["schemas"]["OrgMemberResponse"][]; }; UpdateMemberRoleRequest: { /** @enum {string} */ role: "owner" | "admin" | "member"; }; InviteMemberRequest: { /** Format: email */ email: string; role?: string; }; InviteMemberResponse: { message?: string; email?: string; }; OnboardingStatus: { has_vault: boolean; has_agent: boolean; has_policy: boolean; has_sample_secret: boolean; first_secret_read: boolean; welcome_bundle_complete: boolean; /** Format: uuid */ default_vault_id?: string | null; }; OnboardingProvisionRequest: { agent_name?: string; client?: string; /** * Format: uuid * @description Approval satisfying an `agent.create` control-plane consensus policy, * if the org has one. Same field and meaning as on `POST /v1/agents`: * the first call returns 202 with the approval to collect, and the * retry passes its id here. */ approval_id?: string; }; OnboardingProvisionResponse: { /** Format: uuid */ agent_id: string; api_key: string; /** Format: uuid */ vault_id: string; mcp_stdio_config: Record; verify_prompt: string; }; AgentKeysVaultResponse: { /** Format: uuid */ vault_id?: string; }; OrgBankrConfigResponse: { configured?: boolean; partner_key_prefix?: string; default_wallet_id?: string; /** Format: date-time */ updated_at?: string; using_platform_fallback?: boolean; }; UpsertOrgBankrConfigRequest: { /** @description Bankr partner API key (bk_ptr_...) */ partner_key: string; /** @description Default provisioned wallet (wlt_...) */ default_wallet_id?: string; }; UsageSummaryResponse: { billing_tier?: string; free_tier_limit?: number; current_month?: { total_requests?: number; paid_requests?: number; free_requests?: number; total_cost_usd?: string; }; }; UsageHistoryResponse: { events?: { /** Format: uuid */ id?: string; principal_type?: string; principal_id?: string; method?: string; endpoint?: string; status_code?: number; price_usd?: string; is_paid?: boolean; /** Format: date-time */ created_at?: string; }[]; }; SubscribeRequest: { /** @enum {string} */ tier: "pro" | "team" | "business"; /** @enum {string} */ interval: "monthly" | "annual"; /** * @deprecated * @description Accepted and ignored — plans no longer start with a trial (2026-09-19); checkout charges on completion. * @default false */ trial: boolean; }; TopupRequest: { amount_usd: number; }; OverageMethodRequest: { /** @enum {string} */ method: "credits" | "x402"; }; CheckoutUrlResponse: { /** Format: uri */ checkout_url?: string; }; PortalUrlResponse: { /** Format: uri */ portal_url?: string; }; SubscriptionResponse: { tier?: string; interval?: string; /** Format: date-time */ period_end?: string; status?: string; /** @description Derived (rounded down); the ledger unit is micro-USD */ credit_balance_cents?: number; /** * Format: int64 * @description The ledger value. One inspected Shroud request costs 5,000 micro-USD ($0.005). */ credit_balance_micro_usd?: number; credit_balance_usd?: string; overage_method?: string; usage?: { requests?: components["schemas"]["UsageMeter"]; secrets?: components["schemas"]["UsageMeter"]; agents?: components["schemas"]["UsageMeter"]; vaults?: components["schemas"]["UsageMeter"]; team_members?: components["schemas"]["UsageMeter"]; intent_transactions?: components["schemas"]["UsageMeter"]; wallets?: components["schemas"]["UsageMeter"]; shares?: components["schemas"]["UsageMeter"]; }; }; UsageMeter: { used?: number; limit?: number; }; /** @description Metered line from Stripe upcoming invoice (usage detail when available). */ LlmMeteredInvoiceLine: { description?: string | null; /** Format: int64 */ amount_cents?: number; /** @description Billed usage units when Stripe returns quantity (e.g. tokens). */ quantity?: number | null; price_nickname?: string | null; }; /** @description Accrued LLM charges for the current Stripe subscription period (upcoming invoice). */ LlmBillingCycleUsage: { /** Format: date-time */ period_start?: string | null; /** Format: date-time */ period_end?: string | null; /** Format: int64 */ accrued_usage_cents?: number; currency?: string; metered_lines?: components["schemas"]["LlmMeteredInvoiceLine"][]; }; LlmCreditBalance: { /** Format: int64 */ available_cents?: number; /** Format: int64 */ ledger_cents?: number; /** Format: int64 */ used_cents?: number; currency?: string; }; LlmTokenBillingStatus: { enabled: boolean; /** * @description Usage accrues on the Stripe subscription and is invoiced at the end of the * billing period. `credit_balance` is Stripe's prepaid credit-grant balance, * which is 0 unless a credit grant was issued; a 0 there does not block inference. * @enum {string} */ billing_model: "postpaid_metered"; /** @description Enabled and the subscription is not canceled/unpaid/expired. */ inference_allowed: boolean; /** @enum {string} */ subscription_status?: "active" | "inactive"; credit_balance?: components["schemas"]["LlmCreditBalance"]; billing_cycle_usage?: components["schemas"]["LlmBillingCycleUsage"]; active_subscription_count?: number; subscription_ids?: string[]; warning?: string; }; LlmCheckoutResponse: { /** Format: uri */ checkout_url?: string; already_subscribed?: boolean; subscription_id?: string; }; LlmCancelDuplicatesResponse: { cancelled_count: number; cancelled_subscription_ids: string[]; remaining_subscription_ids: string[]; }; LlmDisableResponse: { enabled?: boolean; }; CreditBalanceResponse: { /** @description Derived (rounded down); the ledger unit is micro-USD */ balance_cents?: number; /** * Format: int64 * @description The ledger value (1 = $0.000001) */ balance_micro_usd?: number; /** @description Dollars at the ledger's precision (e.g. "4.995"), never fewer than two decimals */ balance_usd?: string; expiring_within_90_days?: { amount_cents?: number; /** Format: date-time */ earliest_expiry?: string; }; }; CreditTransactionsListResponse: { transactions?: { /** Format: uuid */ id?: string; type?: string; amount_cents?: number; balance_after_cents?: number; description?: string; /** Format: date-time */ created_at?: string; }[]; page?: number; limit?: number; }; OverageMethodResponse: { overage_method?: string; }; AuditEventsResponse: { events?: components["schemas"]["AuditEvent"][]; count?: number; }; AuditVerifyResponse: { /** @description Whether the integrity hash chain is unbroken */ chain_valid: boolean; /** * Format: int64 * @description Number of events with valid integrity hashes */ events_verified: number; /** @description Total events examined */ events_checked: number; /** * Format: uuid * @description First event where chain integrity broke (null if valid) */ broken_at_event_id?: string | null; scheme: { /** @example HMAC-SHA256 */ algorithm?: string; chain_structure?: string; hash_field?: string; link_field?: string; /** Format: uri */ documentation?: string; }; }; ShroudAttestationResponse: { /** * @description Whether at least an identity token was obtained (true for identity, * confidential, or sev_snp levels). Backward-compatible boolean; prefer * attestation_level for granularity. */ attested: boolean; /** * @description Granularity of TEE attestation achieved. `none` = dev/non-GCE; * `identity` = GCE metadata JWT only; `confidential` = CC claims present; * `sev_snp` = full SEV-SNP measurement verified against image digest. * @enum {string} */ attestation_level: "none" | "identity" | "confidential" | "sev_snp"; /** @description Confidential VM image hash (compare against published Docker digest) */ image_hash: string; /** @description GCE metadata identity JWT (verify against Google public keys) */ identity_token: string; /** @description Confidential Computing claims extracted from the identity JWT */ confidential_claims?: components["schemas"]["ConfidentialClaims"]; verification: { steps?: string[]; /** Format: uri */ google_certs_url?: string; expected_audience?: string; }; }; ConfidentialClaims: { /** @description Whether secure boot was enabled */ secboot?: boolean; /** @description Hardware model string (e.g. GCP_AMD_SEV) */ hwmodel?: string; /** @description Instance confidentiality level from google.compute_engine */ instance_confidentiality?: string; /** @description Software name claim (swname or sw_name) */ sw_name?: string; } | null; AuditEvent: { /** Format: uuid */ id?: string; action?: string; actor_id?: string; actor_type?: string; resource_type?: string; resource_id?: string; /** Format: uuid */ org_id?: string; details?: { [key: string]: unknown; }; ip_address?: string; /** Format: date-time */ created_at?: string; }; CreateIpRuleRequest: { /** @enum {string} */ rule_type: "allow" | "deny"; cidr: string; label?: string; applies_to?: string; }; IpRuleResponse: { /** Format: uuid */ id?: string; /** Format: uuid */ org_id?: string; rule_type?: string; cidr?: string; label?: string; applies_to?: string; created_by?: string; /** Format: date-time */ created_at?: string; }; IpRulesListResponse: { rules?: components["schemas"]["IpRuleResponse"][]; }; SettingResponse: { key?: string; value?: string; updated_by?: string; /** Format: date-time */ updated_at?: string; }; SettingsListResponse: { settings?: components["schemas"]["SettingResponse"][]; }; UpdateSettingRequest: { value: string; }; X402ConfigResponse: { pay_to?: string; network?: string; scheme?: string; free_tier_limit?: number; facilitator_url?: string; }; AdminUsersListResponse: { users?: { /** Format: uuid */ id?: string; email?: string; display_name?: string; role?: string; auth_method?: string; /** Format: uuid */ org_id?: string; org_name?: string; billing_tier?: string; /** Format: date-time */ created_at?: string; free_tier_override?: number; is_sponsored?: boolean; current_month_requests?: number; }[]; total?: number; }; UpdateOrgLimitsRequest: { free_tier_override?: number; is_sponsored?: boolean; }; OrgLimitsResponse: { /** Format: uuid */ org_id?: string; free_tier_override?: number; is_sponsored?: boolean; }; SetBillingTierRequest: { /** @enum {string} */ tier: "free" | "pro" | "business" | "enterprise"; /** @description How many days the tier lasts (default 365). Use 90 for a 3-month trial. */ duration_days?: number; }; CreateTreasuryRequest: { /** @description Display name (1–128 characters) */ name: string; /** @description Deployed Safe contract address (0x-prefixed, 42 characters) */ safe_address: string; /** @description Chain name (default base) */ chain?: string; /** @description EVM chain ID (default 8453 for Base) */ chain_id?: number; /** @description Safe threshold (default 1) */ threshold?: number; signers?: components["schemas"]["CreateTreasurySignerEntry"][]; }; CreateTreasurySignerEntry: { /** @enum {string} */ signer_type: "user" | "agent"; /** Format: uuid */ signer_id: string; /** @description EVM address (0x-prefixed) */ signer_address: string; }; UpdateTreasuryRequest: { name?: string; threshold?: number; }; TreasuryResponse: { /** Format: uuid */ id?: string; name?: string; safe_address?: string; chain?: string; chain_id?: number; threshold?: number; /** Format: uuid */ created_by?: string; signers?: components["schemas"]["TreasurySignerResponse"][]; /** Format: date-time */ created_at?: string; }; TreasurySignerResponse: { /** Format: uuid */ id?: string; /** @enum {string} */ signer_type?: "user" | "agent"; /** Format: uuid */ signer_id?: string; signer_address?: string; /** Format: date-time */ added_at?: string; }; AddSignerRequest: { /** @enum {string} */ signer_type: "user" | "agent"; /** Format: uuid */ signer_id: string; signer_address: string; }; AccessRequestResponse: { /** Format: uuid */ id?: string; /** Format: uuid */ treasury_id?: string; /** Format: uuid */ agent_id?: string; /** @enum {string} */ status?: "pending" | "approved" | "denied"; reason?: string; /** Format: date-time */ requested_at?: string; /** Format: uuid */ resolved_by?: string; /** Format: date-time */ resolved_at?: string; }; CreateTreasuryProposalRequest: { /** @description Destination address (0x-prefixed) */ to_address: string; /** @description Transaction value in wei */ value_wei: string; /** @description Chain name (e.g. ethereum, base) */ chain: string; /** @description Numeric chain ID (alternative to chain name) */ chain_id?: number; /** @description Hex-encoded calldata (optional) */ data_hex?: string; /** * @description Safe operation type (0 = Call, 1 = DelegateCall) * @default 0 */ operation: number; }; SignTreasuryProposalRequest: { /** * @description Whether to approve or reject the proposal * @enum {string} */ decision: "approve" | "reject"; /** @description EIP-712 signature (hex). If omitted, server signs with caller's key. */ signature?: string; }; TreasuryProposalResponse: { /** Format: uuid */ id?: string; /** Format: uuid */ treasury_id?: string; /** Format: uuid */ proposed_by?: string; /** @enum {string} */ proposed_by_type?: "user" | "agent"; chain?: string; chain_id?: number; safe_address?: string; to_address?: string; value_wei?: string; data_hex?: string | null; operation?: number; safe_tx_hash?: string | null; nonce?: number | null; /** @enum {string} */ status?: "pending" | "approved" | "executing" | "executed" | "rejected" | "expired"; threshold?: number; /** Format: date-time */ expires_at?: string | null; executed_tx_hash?: string | null; /** Format: date-time */ executed_at?: string | null; signatures?: components["schemas"]["ProposalSignatureResponse"][]; /** Format: date-time */ created_at?: string; }; ProposalSignatureResponse: { /** Format: uuid */ id?: string; /** Format: uuid */ signer_id?: string; /** @enum {string} */ signer_type?: "user" | "agent"; signer_address?: string; signature?: string; /** @enum {string} */ decision?: "approve" | "reject"; /** Format: date-time */ created_at?: string; }; TreasuryProposalListResponse: { proposals?: components["schemas"]["TreasuryProposalResponse"][]; }; GenerateTreasuryWalletsRequest: { /** @description Chains to generate wallets for (e.g. ["ethereum", "solana"]). Omit for all supported chains. */ chains?: string[]; }; TreasuryWalletResponse: { /** Format: uuid */ id?: string; chain?: string; /** @description Cryptographic curve (e.g. secp256k1, ed25519) */ curve?: string; public_key_hex?: string; address?: string; is_active?: boolean; /** Format: date-time */ created_at?: string; /** * @description `server` — 1claw holds the whole private key and can sign alone. * `client_tss` — 2-party threshold key; the customer's passkey share is required. * @enum {string} */ custody?: "server" | "client_tss"; /** * @description `client_tss` only (list responses). Wraps of the customer's share under * their own credentials — passkey PRF or recovery code; runtime holder * wraps are not counted. Below 2 the wallet should not be funded: one * lost credential would lose the share. */ owner_wraps?: number; }; TreasuryWalletListResponse: { wallets?: components["schemas"]["TreasuryWalletResponse"][]; }; TreasuryWalletExportResponse: { chain?: string; address?: string; /** @description Raw private key in hex encoding. Handle with extreme care. */ private_key_hex?: string; }; TreasuryWalletBalanceResponse: { chain: string; address: string; native: { symbol: string; balance_wei: string; balance_display: string; }; tokens?: { contract_address: string; balance_raw: string; }[]; }; TreasuryWalletSendRequest: { /** @description Destination address (0x-prefixed) */ to: string; /** @description Value in wei (or major-unit decimal string for non-EVM) */ value_wei: string; /** @description Hex-encoded calldata (optional) */ data?: string; /** @description Gas limit override */ gas_limit?: number; /** * @description When true, submits as a gasless (ERC-4337) transaction via Pimlico paymaster. The paymaster sponsors the gas cost. * @default false */ gasless: boolean; /** @description Token contract address / mint (ERC-20, SPL, TRC-20, Cardano policy_id.asset_name) */ token_mint?: string; /** @description Transaction memo (Solana Memo Program, XRP Memos, Tron extra_data) */ memo?: string; /** @description XRP destination tag */ destination_tag?: number; /** @description Bitcoin fee rate in sat/vbyte */ fee_rate_sat_per_vbyte?: number; /** @description Raw XRPL transaction JSON for advanced XRP transaction types */ xrpl_tx_json?: Record; /** @description Tron fee limit in sun */ fee_limit_sun?: number; /** @description Token decimals (required for non-EVM token transfers when not in known_tokens) */ token_decimals?: number; /** @description Cardano transaction TTL (slot number) */ ttl?: number; }; TreasuryWalletSendResponse: { tx_hash: string; from: string; to: string; value_wei: string; chain: string; status: string; /** @description UserOperation hash (only present for gasless sends via paymaster) */ user_op_hash?: string; }; TreasuryWalletSwapRequest: { /** @description Address of the token to sell (or "native" for ETH) */ sell_token: string; /** @description Address of the token to buy (or "native" for ETH) */ buy_token: string; /** @description Amount to sell in token's smallest unit */ sell_amount: string; }; TreasuryWalletSwapResponse: { tx_hash: string; sell_token: string; buy_token: string; sell_amount: string; buy_amount: string; chain: string; status: string; }; CreateWebhookRequest: { /** * Format: uri * @description HTTPS URL to deliver webhook events to */ url: string; /** @description Event types to subscribe to */ events: string[]; description?: string; }; UpdateWebhookRequest: { /** Format: uri */ url?: string; events?: string[]; is_active?: boolean; description?: string; }; WebhookCreatedResponse: { /** Format: uuid */ id: string; /** Format: uri */ url: string; events: string[]; /** @description HMAC signing secret for verifying payloads (shown only once) */ secret: string; /** Format: date-time */ created_at: string; }; WebhookResponse: { /** Format: uuid */ id: string; /** Format: uri */ url: string; events: string[]; is_active: boolean; description?: string; /** Format: date-time */ created_at: string; }; WebhookListResponse: { webhooks: components["schemas"]["WebhookResponse"][]; }; SigningKeyBalanceResponse: { chain: string; address: string; balance_wei: string; balance_display: string; /** @description Token balances when ?tokens= query param is provided */ tokens?: { contract_address?: string; symbol?: string | null; balance?: string; decimals?: number | null; }[]; }; PaymentRequirement: { x402Version?: number; accepts?: { scheme?: string; network?: string; payTo?: string; price?: string; requiredDeadlineSeconds?: number; }[]; description?: string; }; ShroudActivityEvent: { /** Format: uuid */ id?: string; /** Format: uuid */ org_id?: string; agent_id?: string; provider?: string; model?: string; /** @description Action taken (allowed, blocked, warned) */ action?: string; request_tokens?: number; response_tokens?: number; latency_ms?: number; had_secrets_redacted?: boolean; had_pii_detected?: boolean; injection_score?: number; policy_violations?: string[]; /** @description Response-side prompt-injection score (0.0–1.0). */ response_injection_score?: number; /** @description Response-side context-injection score (0.0–1.0). */ response_context_injection_score?: number; /** @description Category tags emitted by the response-side filters (e.g. `markdown_image_exfil`, `data_uri_blob`, `echoed_instruction`). */ response_injection_categories?: string[]; /** @description URLs emitted by the model that were flagged as potential exfil / callback targets. */ external_urls_flagged?: string[]; /** @description Number of code fences in the response that were not expected for the agent's allowed task set. */ unexpected_code_blocks?: number; /** @description True when Shroud rewrote or blocked response content before returning it to the agent. */ content_filtered?: boolean; metadata?: Record; /** Format: date-time */ timestamp?: string; }; IngestShroudActivityRequest: { agent_id: string; provider?: string; model?: string; action: string; /** @default 0 */ request_tokens: number; /** @default 0 */ response_tokens: number; latency_ms?: number; /** @default false */ had_secrets_redacted: boolean; /** @default false */ had_pii_detected: boolean; /** @default 0 */ injection_score: number; policy_violations?: string[]; metadata?: Record; /** @default 0 */ response_injection_score: number; /** @default 0 */ response_context_injection_score: number; response_injection_categories?: string[]; external_urls_flagged?: string[]; /** @default 0 */ unexpected_code_blocks: number; /** @default false */ content_filtered: boolean; }; ShroudThreatSummary: { /** Format: int64 */ total_requests?: number; /** Format: int64 */ total_requests_prev?: number; /** Format: int64 */ blocked_requests?: number; /** Format: int64 */ detectors_triggered?: number; /** Format: int64 */ active_agents?: number; detectors?: components["schemas"]["ShroudDetectorStats"][]; flagged_requests?: components["schemas"]["ShroudFlaggedRequest"][]; }; ShroudDetectorStats: { detector?: string; /** Format: int64 */ detections?: number; /** Format: int64 */ blocks?: number; actions?: { /** Format: int64 */ blocked?: number; /** Format: int64 */ warned?: number; /** Format: int64 */ logged?: number; }; }; ShroudFlaggedRequest: { id?: string; /** Format: date-time */ timestamp?: string; agent_id?: string; agent_name?: string; score?: number; reason?: string; /** @enum {string} */ action?: "blocked" | "warned" | "logged"; }; HealthResponse: { /** @enum {string} */ status?: "healthy" | "degraded"; version?: string; }; CreatePlatformAppRequest: { name: string; slug: string; description?: string; /** Format: uri */ oidc_jwks_url?: string; /** Format: uri */ oidc_issuer?: string; /** @description Expected audience claim for OIDC token validation */ oidc_audience?: string; redirect_uris?: string[]; /** * @default platform_pays * @enum {string} */ billing_model: "platform_pays" | "user_pays" | "hybrid"; /** * @default silent * @enum {string} */ auth_mode: "silent" | "user_signin" | "configurable"; max_connected_users?: number | null; /** * Format: date-time * @description Optional expiration time for the platform API key. */ api_key_expires_at?: string | null; }; UpdatePlatformAppRequest: { name?: string; description?: string; logo_url?: string; oidc_jwks_url?: string; oidc_issuer?: string; /** @description Expected audience claim for OIDC token validation */ oidc_audience?: string; redirect_uris?: string[]; webhook_url?: string; /** @enum {string} */ billing_model?: "platform_pays" | "user_pays" | "hybrid"; /** @enum {string} */ auth_mode?: "silent" | "user_signin" | "configurable"; max_connected_users?: number | null; is_active?: boolean; /** * Format: date-time * @description Optional expiration time for the platform API key. Set to null to clear. */ api_key_expires_at?: string | null; /** @description Hostname allowed in SIWE messages for wallet sign-in (EIP-4361). */ siwe_domain?: string | null; }; PlatformAppDeleteResponse: { deleted: boolean; soft_delete: boolean; slug_released: boolean; former_slug: string; }; /** @description Provide `target_org_id` or `target_user_email` (owner/admin in destination org). */ TransferPlatformAppOwnershipRequest: { /** Format: uuid */ target_org_id?: string; /** Format: email */ target_user_email?: string; }; TransferPlatformAppOwnershipResponse: { /** Format: uuid */ app_id: string; /** Format: uuid */ former_org_id: string; /** Format: uuid */ new_org_id: string; message: string; }; PlatformAppResponse: { /** Format: uuid */ id?: string; name?: string; slug?: string; description?: string; logo_url?: string | null; api_key_prefix?: string; oidc_jwks_url?: string | null; oidc_issuer?: string | null; /** @description Expected audience claim for OIDC token validation */ oidc_audience?: string | null; redirect_uris?: string[]; webhook_url?: string | null; is_active?: boolean; billing_model?: string; auth_mode?: string; max_connected_users?: number | null; connected_users?: number; /** * Format: date-time * @description When the platform API key expires. */ api_key_expires_at?: string | null; /** * Format: date-time * @description When the platform API key was last rotated. */ api_key_rotated_at?: string | null; /** @description Hostname allowed in SIWE messages for wallet sign-in (EIP-4361). */ siwe_domain?: string | null; /** Format: date-time */ created_at?: string; /** Format: date-time */ updated_at?: string; }; PlatformAppCreatedResponse: components["schemas"]["PlatformAppResponse"] & { /** @description The platform API key. Save immediately - it cannot be retrieved again. */ api_key: string; }; CreateTemplateRequest: { name: string; description?: string; /** * @description Template specification defining vault, agents, policies, and signing keys to bootstrap. * Top-level fields: `vault` (object with name, description), `agents` (array of agent specs), * `policies` (array with vault_ref, principal_ref, paths, permissions, conditions), and * `signing_keys` (array of `{ chain }` objects — supported chains: ethereum, bitcoin, solana, * xrp, cardano, tron). When `signing_keys` is present, HSM-backed signing keys are * auto-provisioned for the bootstrapped agent. * * Each agent entry accepts Intents API and Execution Intents flags under any of these aliases * (direct API field name, boolean shorthand, or `{ enabled: true }` object): * - Intents API → `intents_api_enabled`, `intents: true`, or `intents: { enabled: true }` * (maps to `agents.intents_api_enabled`) * - Execution Intents → `execution_intents_enabled`, `execution: true`, or * `execution: { enabled: true }` (maps to `agents.execution_intents_enabled`) * * Other agent fields: `name`, `description`, `shroud_enabled`, `shroud_config`, `system_prompt`, * `environment`, `signing_keys`, `provision_eoa`, `memory`, `runtime`, `default_llm_provider`. */ spec: Record; }; PlatformTemplateResponse: { /** Format: uuid */ id?: string; /** Format: uuid */ platform_app_id?: string; name?: string; description?: string; version?: number; spec?: Record; is_active?: boolean; /** Format: date-time */ created_at?: string; /** Format: date-time */ updated_at?: string; }; DirectoryJob: { /** Format: uuid */ id?: string; title?: string | { /** @enum {boolean} */ untrusted_content?: true; source?: string; id?: string; field?: string; raw_text?: string; system_prefix?: string; }; description?: string | { /** @enum {boolean} */ untrusted_content?: true; source?: string; id?: string; field?: string; raw_text?: string; system_prefix?: string; }; tags?: string[]; required_capabilities?: string[]; budget?: Record; /** Format: date-time */ deadline_at?: string | null; /** @enum {string} */ status?: "open" | "awarded" | "completed" | "cancelled" | "expired"; /** Format: int64 */ bid_count?: number; /** @description Inspection found threats below the blocking threshold. When true, title and description are envelopes rather than strings. */ content_warning?: boolean; /** Format: uuid */ awarded_agent_id?: string | null; a2a_handoff?: Record; /** Format: date-time */ expires_at?: string; /** Format: date-time */ created_at?: string; }; DirectoryJobBid: { /** Format: uuid */ id?: string; /** Format: uuid */ job_id?: string; /** Format: uuid */ bidder_agent_id?: string; summary?: string | { /** @enum {boolean} */ untrusted_content?: true; source?: string; id?: string; field?: string; raw_text?: string; system_prefix?: string; }; proposed_cost?: Record; estimated_duration_mins?: number | null; /** @enum {string} */ status?: "pending" | "accepted" | "rejected" | "withdrawn"; content_warning?: boolean; /** Format: date-time */ created_at?: string; }; FleetSummaryResponse: { /** Format: uuid */ template_id?: string; template_name?: string; current_version?: number; /** @description SHA-256 of the template spec. Lets a caller tell a version bump that changed nothing from one that did. Null on templates written before migration 245. */ spec_hash?: string | null; /** Format: int64 */ total_agents?: number; /** @description How the cohort splits across the versions it was provisioned from. */ version_skew?: { template_version?: number | null; /** Format: int64 */ agents?: number; }[]; /** Format: int64 */ agents_on_current_version?: number; /** Format: int64 */ agents_behind?: number; /** * Format: int64 * @description Agents a previous rollout declined to touch. */ drifted_agents?: number; /** @description The fields bulk-patch and rollout will carry. Read this rather than hard-coding the list; it is deliberately narrower than a single-agent PATCH and may narrow further. */ bulk_patchable_fields?: string[]; }; ListFleetAgentsResponse: { agents?: components["schemas"]["FleetAgent"][]; limit?: number; offset?: number; current_version?: number; }; FleetAgent: { /** Format: uuid */ agent_id?: string; name?: string; /** Format: uuid */ org_id?: string; /** Format: uuid */ platform_connection_id?: string | null; provisioned_from_version?: number | null; /** Format: date-time */ last_fleet_sync_at?: string | null; /** @description Fields a rollout skipped because they were changed outside fleet control. The standing answer to "why is this agent behind?". */ drift_fields?: string[]; is_active?: boolean; is_current?: boolean; }; FleetRolloutResponse: { /** * Format: uuid * @description Null for a dry run, which claims no job. */ job_id?: string | null; to_version?: number; dry_run?: boolean; forced?: boolean; /** Format: int64 */ total_agents?: number; synced?: number; already_current?: number; skipped_drifted?: number; outcomes?: { /** @enum {string} */ outcome?: "already_current" | "synced" | "skipped_drifted"; /** Format: uuid */ agent_id?: string; fields?: string[]; drift_fields?: string[]; }[]; }; UpsertPlatformUserRequest: { /** @description OIDC JWT from the platform's IdP (verified against JWKS) */ subject_token?: string; /** * @description Token type for subject_token. Use `urn:1claw:params:oauth:token-type:siwe` * with `siwe_message` and `siwe_signature` for wallet-based provisioning. * @default urn:ietf:params:oauth:token-type:jwt */ subject_token_type: string; /** * Format: email * @description Fallback when subject_token is not provided */ email?: string; display_name?: string; /** @description EIP-4361 Sign-In With Ethereum message (required for SIWE upsert) */ siwe_message?: string; /** @description Hex-encoded SIWE signature (required for SIWE upsert) */ siwe_signature?: string; /** * Format: uri * @description Redirect URL after cross-org link consent */ return_to?: string; /** * @description When true, creates a sub-org under the platform app's org * @default false */ create_sub_org: boolean; /** * Format: uuid * @description Required only when calling as a user (the dashboard wizard). * A `plt_` key carries its app in the credential; a user does not, * so the app is named here and checked against the caller's org. */ app_id?: string; }; PlatformUserResponse: { /** Format: uuid */ user_handle?: string; is_new?: boolean; /** Format: uuid */ connection_id?: string; email?: string; link_required?: components["schemas"]["LinkRequiredInfo"]; }; PlatformUserLinkRequiredResponse: { /** @example false */ is_new: boolean; email: string; link_required: components["schemas"]["LinkRequiredInfo"]; }; LinkRequiredInfo: { /** @enum {string} */ status: "link_required"; /** @example user_exists_in_other_org */ reason: string; /** * Format: uri * @description OAuth authorize URL the platform app should redirect the user to for consent. */ authorize_url: string; app_slug: string; }; PlatformConnectedUserResponse: { /** Format: uuid */ connection_id?: string; /** Format: uuid */ user_id?: string; external_subject?: string; status?: string; vault_ids?: string[]; agent_ids?: string[]; /** Format: date-time */ created_at?: string; /** Format: date-time */ claimed_at?: string | null; }; BootstrapRequest: { /** * Format: uuid * @description Template to use. Falls back to the app's default template. */ template_id?: string; /** * Format: uri * @description URL to redirect the user to after claiming resources. */ return_to?: string; /** * @description Template parameters substituted as `{{params.*}}` during bootstrap. * Combined with `Idempotency-Key` header for params-aware idempotent replay. */ parameters?: { [key: string]: unknown; }; }; BootstrapResponse: { /** Format: uri */ claim_url?: string; claim_token?: string; /** @description Seconds until the claim token expires */ expires_in?: number; /** Format: uuid */ connection_id?: string; summary?: { /** Format: uuid */ vault_id?: string | null; /** Format: uuid */ agent_id?: string | null; /** @description All agent IDs provisioned by the template (when multiple agents are defined) */ agent_ids?: string[]; policy_ids?: string[]; /** @description Chains with provisioned signing keys */ signing_key_chains?: string[]; /** @description One-time agent API key (ocv_ prefix). Store securely — not retrievable later. */ agent_api_key?: string | null; /** @description EOA address when provision_eoa is true in the template */ agent_evm_address?: string | null; /** @description Provisioned signing key details (chain, address, public key) */ signing_keys?: { chain?: string; curve?: string; public_key?: string; address?: string; }[]; /** @description IDs of runtimes provisioned by the template */ runtime_ids?: string[]; /** @description IDs of automations provisioned by the template */ automation_ids?: string[]; }; }; PlatformAppStatsResponse: { /** @description Total number of user connections (all statuses) */ total_connections: number; /** @description Number of active connections */ active_connections: number; /** @description Number of claimed connections */ claimed_connections: number; /** @description Total bootstrap operations performed */ total_bootstraps: number; /** @description Total resource grants issued */ total_grants: number; }; MarketplaceResponse: { apps?: { /** Format: uuid */ id?: string; name?: string; slug?: string; description?: string; logo_url?: string | null; category?: string | null; listing_tags?: string[]; listing_screenshots?: string[]; pricing_summary?: string | null; }[]; }; ConnectedAppResponse: { /** Format: uuid */ connection_id?: string; app_name?: string; app_slug?: string; status?: string; vault_ids?: string[]; agent_ids?: string[]; /** Format: date-time */ created_at?: string; }; GrantResourcesRequest: { /** @description Vault IDs to grant access to */ vault_ids?: string[]; /** @description Agent IDs to grant access to */ agent_ids?: string[]; /** * @description Secret path patterns the app can access * @default [ * "**" * ] */ allowed_paths: string[]; /** * @description Permissions granted (read, write, rotate) * @default [ * "read" * ] */ permissions: string[]; /** * Format: date-time * @description Optional grant expiration */ expires_at?: string; }; GrantResponse: { /** Format: uuid */ id?: string; /** Format: uuid */ vault_id?: string; allowed_paths?: string[]; permissions?: string[]; /** Format: date-time */ expires_at?: string | null; /** Format: date-time */ created_at?: string; }; GrantResourcesResponse: { /** Format: uuid */ connection_id?: string; grants?: components["schemas"]["GrantResponse"][]; vault_ids?: string[]; agent_ids?: string[]; }; GrantListResponse: { grants?: components["schemas"]["GrantResponse"][]; }; ClaimPreviewResponse: { app_name?: string; app_slug?: string; app_logo_url?: string | null; auth_mode?: string; vault_ids?: string[]; agent_ids?: string[]; policy_count?: number; status?: string; already_claimed?: boolean; expired?: boolean; return_to?: string | null; }; ClaimRedeemResponse: { status?: string; /** Format: uuid */ connection_id?: string; vault_ids?: string[]; agent_ids?: string[]; return_to?: string | null; dashboard_url?: string; }; RegisterDeviceRequest: { /** * @description Human-readable device name (e.g. "Kevin's iPhone") * @example My iPhone */ name: string; /** @enum {string} */ platform: "ios" | "android"; /** @description PEM-encoded public key for step-up challenge signing */ public_key_pem: string; /** @description Optional platform attestation (Apple DeviceCheck / Android SafetyNet) */ attestation_blob?: string; }; RegisterDeviceResponse: { /** Format: uuid */ device_id: string; attestation_verified: boolean; }; DeviceListResponse: { devices: components["schemas"]["DeviceResponse"][]; }; DeviceResponse: { /** Format: uuid */ id: string; name: string; platform: string; attestation_verified: boolean; /** Format: date-time */ last_used_at?: string | null; /** Format: date-time */ created_at: string; }; CreateDeviceChallengeRequest: { /** @description The action this challenge authorizes (e.g. "approve_transaction") */ action: string; /** @description ID of the resource the action targets */ target_id: string; }; DeviceChallengeResponse: { challenge_nonce: string; /** Format: date-time */ expires_at: string; /** @description SHA-256 binding the challenge to the requested action and target */ action_bound_hash: string; }; AttestDeviceChallengeRequest: { challenge_nonce: string; /** @description Signature over the challenge nonce using the device's private key */ signature: string; }; AttestDeviceChallengeResponse: { /** @description Short-lived token authorizing the bound action */ step_up_token: string; /** Format: date-time */ expires_at: string; }; RegisterPushTokenRequest: { /** @description Push notification token from APNs or FCM */ token: string; /** @enum {string} */ platform: "apns" | "fcm"; }; DecideApprovalRequest: { /** @enum {string} */ decision: "approve" | "reject"; /** @description Optional human-readable reason for the decision */ reason?: string; }; UsageCounts: { /** Format: int64 */ api_requests: number; /** Format: int64 */ signatures: number; /** Format: int64 */ execution_intents: number; /** Format: int64 */ execution_intents_tee: number; /** * @description A decimal string. Money is not a float; zero is "0". * @example 3.42 */ inference_usd: string; /** Format: int64 */ credits_debited_cents: number; }; AppUsageReport: { /** Format: uuid */ app_id: string; /** Format: date-time */ period_start: string; /** * Format: date-time * @description Exclusive. The period is half-open, so an event at midnight belongs to one month, not two. */ period_end: string; connections: { /** Format: uuid */ connection_id: string; usage: components["schemas"]["UsageCounts"]; }[]; /** @description Usage that could not be charged to a connection. */ unattributed: { /** @description The agent belongs to several connections and none was named. This belongs to someone. */ ambiguous?: components["schemas"]["UsageCounts"]; /** @description No platform linkage. Normal for most traffic. */ none?: components["schemas"]["UsageCounts"]; }; /** @description Connections plus both unattributed buckets. Derived, not queried. */ totals: components["schemas"]["UsageCounts"]; /** @description Some usage this period belongs to an end-user who cannot be identified. */ has_ambiguous_usage: boolean; }; Peer: { /** Format: uuid */ id: string; /** @enum {string} */ peer_type: "user" | "platform_connection" | "external"; peer_ref: string; display_name?: string | null; profile: { [key: string]: unknown; }; /** * @description Archived when a connection is disconnected. Agents lose observation; * the person keeps export and delete. * @enum {string} */ status: "active" | "archived"; /** @description How many agents observe this peer. The list itself is not returned here. */ observer_count: number; /** Format: date-time */ created_at: string; }; PeerFact: { /** @example approval_tendency:refund.create|0-10|known|a@b.co */ fact_key: string; fact_value: { [key: string]: unknown; }; /** @description 0..1, capped below certainty — no history makes the next decision certain. */ confidence?: string | null; /** * @description Why this is believed. Entries are `event`, `tombstone` (the event has * expired; kind and decision are kept, content is not) or `human`. */ provenance: Record[]; /** @description A person corrected this. The processor will not overwrite it. */ edited_by_human: boolean; /** Format: date-time */ updated_at: string; }; NotificationTarget: { /** Format: uuid */ id: string; /** @enum {string} */ target_type: "sms" | "webhook" | "expo" | "email"; /** Format: uuid */ user_id?: string | null; /** Format: uuid */ agent_id?: string | null; config: { [key: string]: unknown; }; events: string[]; is_active: boolean; /** * @description An unverified SMS target receives notifications but cannot decide * an approval by reply. */ verified: boolean; /** Format: date-time */ created_at: string; }; ConnectorPreset: { /** @example gmail */ slug: string; /** @example Gmail */ display_name: string; description: string; /** @example communication */ category: string; /** @description `oauth_providers.slug`, or null when the connector uses a pasted API key. */ provider_slug?: string | null; oauth_scopes?: string[]; /** @description Scopes without which the connector cannot do anything. */ required_scopes?: string[]; /** @example http */ binding_type: string; /** Format: uri */ base_url: string; /** @description Hosts the installed binding may reach. Always includes the base URL's host. */ allowed_hosts?: string[]; /** Format: uri */ documentation_url?: string; /** @example free */ tier_required?: string; requires_oauth: boolean; /** * @description Events 1Claw can synthesise for this connector by polling a list * endpoint through the installed binding (nanobots item 4, polling * interim). Subscribe with `POST /v1/agents/{agent_id}/event-subscriptions`. */ event_sources?: components["schemas"]["ConnectorEventSource"][]; }; ConnectorEventSource: { /** @example gmail.message.received */ event_type: string; description: string; /** @description Path (with query) relative to the binding's base URL, inside the preset's allowed paths. */ path: string; /** @description JSON pointer to the array of items in the response body; empty means the body is the array. */ items_pointer: string; /** @description Pointers within one item whose values together identify it. */ id_pointers: string[]; /** @example 60 */ min_interval_secs: number; }; CreateRouterKeyRequest: { /** @description Shown in lists; defaults to `default` */ name?: string; /** @description Open streaming responses this key may hold at once (gateway default 20) */ max_concurrent_streams?: number; /** @description Optional spend cap in USD, metered by the gateway */ spend_cap_usd?: number; }; RouterKey: { /** Format: uuid */ id: string; /** Format: uuid */ agent_id: string; name: string; /** @description First 20 characters (`sk-shroud-v1-` + 7) — enough to recognise, not to use */ key_prefix: string; max_concurrent_streams?: number | null; spend_cap_usd?: number | null; /** Format: date-time */ created_at: string; /** Format: date-time */ last_used_at?: string | null; /** Format: date-time */ revoked_at?: string | null; }; RouterKeyCreated: components["schemas"]["RouterKey"] & { /** * @description The plaintext `sk-shroud-v1-…` key. Returned once. * @example sk-shroud-v1-Q2c5o0yQ3bHkT9m1vXz8Lw7nRp4aEf6u */ router_key: string; /** * @description The Shroud gateway to point the SDK at * @example https://shroud.1claw.co */ base_url: string; }; CreateToolBindingRequest: { /** @description Vault path of the secret the placeholder stands for */ secret_path: string; /** @description Tool the binding applies to (`http_request`, `run_sql`, …) or `*` */ tool_name: string; /** @description JSON pointer into the tool's arguments (`/headers/Authorization`, `/body/*`) or `*` (default) */ arg_path?: string; /** @description Hosts the rehydrated call may reach (`api.stripe.com`, `*.googleapis.com`); required */ destination_hosts: string[]; }; SecretToolBinding: { /** Format: uuid */ id: string; /** Format: uuid */ org_id: string; /** Format: uuid */ agent_id: string; secret_path: string; tool_name: string; arg_path: string; destination_hosts: string[]; /** Format: uuid */ created_by?: string | null; /** Format: date-time */ created_at: string; }; X402TopupResponse: { /** @description Payer address (lower-case) */ wallet: string; /** Format: uuid */ org_id: string; /** Format: uuid */ agent_id: string; /** Format: int64 */ credited_micro_usd: number; /** Format: int64 */ balance_micro_usd: number; balance_usd: string; /** @description Present only on the top-up that provisioned the account (or re-minted a lost key). Shown once. */ router_key?: string; /** @description A ≤60 s agent token for the wallet's agent (carries the `router_key` claim) */ access_token: string; expires_in: number; /** @description The Shroud gateway */ base_url: string; /** @description True when this top-up created the account */ provisioned: boolean; }; EventSubscription: { /** Format: uuid */ id: string; /** Format: uuid */ agent_id: string; /** Format: uuid */ binding_id: string; /** @example gmail.message.received */ event_type: string; interval_secs: number; is_active: boolean; /** @description False until the first poll has recorded what already exists. That poll emits nothing. */ primed: boolean; /** Format: date-time */ next_poll_at: string; /** Format: date-time */ last_polled_at?: string | null; last_error?: string | null; consecutive_errors: number; /** Format: int64 */ events_emitted: number; /** Format: date-time */ created_at: string; }; InstalledConnector: { /** Format: uuid */ binding_id: string; binding_name: string; preset_slug: string; /** @description Null if the preset has since been retired from the catalogue. */ display_name?: string | null; is_active: boolean; /** @description The OAuth round trip completed and a token is stored. */ connected: boolean; /** @description The stored token was rejected; the user must reconnect. */ needs_reauth: boolean; /** Format: date-time */ created_at: string; }; ApprovalResponse: { /** Format: uuid */ id: string; /** Format: uuid */ org_id: string; /** Format: uuid */ user_id: string; /** Format: uuid */ agent_id?: string | null; action: string; target_type: string; target_id: string; /** @description The tier actually enforced. Authoritative. */ risk_tier: number; /** @description What the caller asked for, when it asked for anything. */ declared_risk_tier?: number | null; /** @description The caller asked for a lower tier than policy required. */ declared_below_floor?: boolean; /** @description Plain-language line sent to SMS, push and email. */ human_summary?: string | null; /** @description What the action will do, as submitted. */ payload?: Record; /** @enum {string} */ status: "pending" | "approved" | "rejected" | "expired" | "cancelled"; /** @description Structured summary of the action requiring approval */ summary: Record; reason?: string | null; decision_reason?: string | null; /** Format: uuid */ decided_by?: string | null; /** Format: date-time */ decided_at?: string | null; /** Format: date-time */ expires_at?: string | null; /** Format: date-time */ created_at: string; }; ApprovalListResponse: { approvals: components["schemas"]["ApprovalResponse"][]; total: number; }; ApprovalStatusResponse: { /** @enum {string} */ status: "pending" | "approved" | "rejected" | "expired" | "cancelled"; /** Format: date-time */ expires_at?: string | null; }; /** * @description Stable snake_case reason codes for guardrail violations (Convention 1). * Shadow-mode `"log"` emits the same codes in `guardrail_shadow.would_deny` * audit events with `enforced: false`. 202 HITL responses use * `approval_available: true` instead of a deny reason_code. * @enum {string} */ GuardrailReasonCode: "binding_rpm_exceeded" | "agent_rpm_exceeded" | "graphql_mutation_blocked" | "graphql_depth_exceeded" | "graphql_parse_failed" | "graphql_introspection_blocked" | "response_too_large" | "request_too_large" | "method_not_allowed" | "header_not_allowed" | "dns_private_ip_blocked" | "agent_suspended" | "outside_time_window" | "secret_in_request" | "concurrency_exceeded" | "org_frozen" | "price_unavailable" | "gas_fee_exceeded" | "unlimited_approval_blocked" | "tx_per_recipient_limit_exceeded" | "tx_max_value_exceeded" | "tx_daily_limit_exceeded" | "delegation_signing_blocked" | "recipient_screening_failed" | "screening_provider_unavailable" | "human_factor_auth_required" | "register_passkey_required"; /** @description Convention 1 machine-readable guardrail denial JSON body. */ GuardrailViolation: { /** @enum {string} */ error: "guardrail_violation"; reason_code: components["schemas"]["GuardrailReasonCode"]; limit?: string | null; current?: string | null; attempted?: string | null; /** @default false */ approval_available: boolean; retry_after_seconds?: number | null; detail?: string | null; }; /** @description Alias of GuardrailViolation (Convention 1 JSON shape). */ GuardrailDenial: components["schemas"]["GuardrailViolation"]; EmailOtpVerifyResponse: { /** @description JWT access token */ token: string; /** Format: uuid */ user_id: string; /** Format: uuid */ org_id: string; is_new_user: boolean; /** Format: email */ email: string; /** @description Ethereum address if auto_provision_chains included an EVM chain */ wallet_address?: string | null; }; OAuthConsentResponse: { app_name: string; app_slug: string; /** Format: uri */ app_logo_url?: string | null; scopes: string[]; /** Format: uri */ redirect_uri: string; already_consented: boolean; }; OAuthTokenResponse: { access_token: string; /** @enum {string} */ token_type: "Bearer"; /** @description Token lifetime in seconds */ expires_in: number; /** @description Refresh token for obtaining new access tokens (when offline_access scope was granted) */ refresh_token?: string | null; /** @description OIDC ID token (when openid scope was granted) */ id_token?: string | null; scope: string; }; OAuthUserInfoResponse: { /** Format: uuid */ sub: string; /** Format: email */ email: string; name?: string | null; wallet_address?: string | null; }; CreateSpendPolicyRequest: { /** * Format: uuid * @description Scope to a specific user (app-level policies only) */ user_id?: string; /** @description Permitted destination addresses (empty = unrestricted) */ to_allowlist?: string[]; /** @description Blocked destination addresses */ to_denylist?: string[]; /** @description Maximum value per transaction in ETH (decimal string) */ max_value_per_tx_eth?: string; /** @description Rolling 24h spend cap in ETH (decimal string) */ daily_limit_eth?: string; /** @description Chains the user may transact on (empty = all enabled) */ allowed_chains?: string[]; /** @description Permitted ERC-20 token contract addresses */ allowed_tokens?: string[]; /** @description Maximum number of transactions per 24h window */ max_transactions_per_day?: number; /** @description Monthly LLM inference allowance in USD (decimal string) */ inference_allowance_usd?: string; /** * @description Percent of allowance held in reserve (not spendable) * @default 25 */ inference_reserved_pct: number; /** * @description When true, block inference when allowance is exhausted * @default true */ inference_hard_stop: boolean; /** * @default policy * @enum {string} */ inference_allowance_mode: "policy" | "credits"; /** @description Maximum estimated cost per LLM request in USD */ max_request_cost_usd?: string; /** * @description Human factor auth requirements for send/swap/export. * Fields: send, swap, export (password_or_passkey | passkey_only | passkey_required | password_only | reauth_token_only), * conditional.require_passkey_above_usd, conditional.require_passkey_for_new_recipient. */ human_factor_auth?: { [key: string]: unknown; }; }; SiweChallengeRequest: { /** @description Optional SIWE domain override (defaults to platform app's siwe_domain) */ domain?: string; }; SiweChallengeResponse: { nonce: string; /** @description Seconds until nonce expiry */ expires_in: number; domain: string; }; ConnectionDetailResponse: { /** Format: uuid */ connection_id: string; /** Format: uuid */ user_id: string; /** @description The connected user's email, as returned by the upsert. Use it to recognise a returning user and begin a passkey ceremony from the connection alone. */ email?: string; display_name?: string; status: string; entitlement_status: string; /** * @description Billing tier granted to the end-user org when billing_model is platform_pays * (from template plan at bootstrap). Null when not provisioned. */ provisioned_tier?: string | null; wallet_address?: string | null; vault_ids: string[]; agent_ids: string[]; runtime_ids?: string[]; automation_ids?: string[]; /** Format: date-time */ claimed_at?: string | null; claim: components["schemas"]["ClaimStatusResponse"]; }; ClaimStatusResponse: { /** @enum {string} */ status: "pending" | "active" | "claimed"; /** Format: date-time */ redeemed_at?: string | null; }; ConnectionUsageResponse: { /** Format: uuid */ connection_id: string; /** @description UTC month (YYYY-MM) */ period: string; /** * @description Kept for compatibility — this field predates the breakdown below and * existing integrations read it. Same number as `usage.inference_usd`. */ inference_spent_usd: string; /** * @description Everything billable for this connection in the period. Derived from the * same grouped query as the app report, so a connection can never report a * number the app report disagrees with. */ usage: components["schemas"]["UsageCounts"]; /** Format: date-time */ period_start: string; /** * Format: date-time * @description Exclusive. The period is half-open. */ period_end: string; }; EntitlementsListResponse: { evaluations: components["schemas"]["EntitlementEvaluationResponse"][]; }; EntitlementEvaluationResponse: { id: string; status: string; watch_kind: string; chain: string; holder_address: string; last_value_raw?: string | null; /** Format: date-time */ last_checked_at?: string | null; }; TemplatePreviewRequest: { parameters?: { [key: string]: unknown; }; subject?: { user_id?: string; external_subject?: string; wallet_address?: string; email?: string; }; }; TemplatePreviewResponse: { resolved_spec: { [key: string]: unknown; }; }; InferenceBudgetResponse: { allowance_usd: string; spent_usd: string; remaining_usd: string; reserved_pct: number; max_request_cost_usd: string; /** Format: date-time */ period_end: string; /** Format: uuid */ connection_id?: string | null; }; InferenceBudgetUnconfiguredResponse: { allowance_usd?: string | null; remaining_usd?: unknown; message?: string; }; SpendPolicyResponse: { /** Format: uuid */ id: string; /** Format: uuid */ platform_app_id: string; /** Format: uuid */ user_id?: string | null; to_allowlist?: string[]; to_denylist?: string[]; max_value_per_tx_eth?: string | null; daily_limit_eth?: string | null; allowed_chains?: string[]; allowed_tokens?: string[]; max_transactions_per_day?: number | null; inference_allowance_usd?: string | null; inference_reserved_pct?: number | null; inference_hard_stop?: boolean | null; inference_allowance_mode?: string | null; max_request_cost_usd?: string | null; human_factor_auth?: { [key: string]: unknown; } | null; /** Format: date-time */ created_at: string; }; HumanFactorAuthPolicy: { /** @enum {string} */ send?: "password_or_passkey" | "passkey_only" | "passkey_required" | "password_only" | "reauth_token_only"; /** @enum {string} */ swap?: "password_or_passkey" | "passkey_only" | "passkey_required" | "password_only" | "reauth_token_only"; /** @enum {string} */ export?: "password_or_passkey" | "passkey_only" | "passkey_required" | "password_only" | "reauth_token_only"; conditional?: { require_passkey_above_usd?: string | null; require_passkey_for_new_recipient?: boolean; }; }; UpsertHumanFactorAuthRequest: { policy: components["schemas"]["HumanFactorAuthPolicy"]; }; HumanFactorAuthResponse: { policy: components["schemas"]["HumanFactorAuthPolicy"]; /** @description user | platform_app | spend_policy | default */ source: string; }; TreasuryAuthPolicyResponse: { policy: components["schemas"]["HumanFactorAuthPolicy"]; /** @description user | platform_app | spend_policy | default */ source: string; /** @description Number of WebAuthn passkeys registered for the calling user. */ registered_passkeys: number; }; PasskeyRegisterBeginResponse: { challenge?: string; rp_id?: string; rp_name?: string; user_id?: string; user_name?: string; user_display_name?: string; attestation?: string; authenticator_selection?: Record; pub_key_cred_params?: Record[]; }; PasskeyRegisterCompleteRequest: { credential_id: string; attestation_object: string; client_data_json: string; transports?: string[]; name?: string; /** * @description `prf.enabled` from `credential.getClientExtensionResults()` — * whether this authenticator can derive the secret that wraps a * wallet share. Omit if the client did not request the extension. */ prf_supported?: boolean | null; }; PutClientShareRequest: { /** * @description Sidecar wraps are stored through `PUT /v1/keys/{key_id}/client-share/holder`. * @enum {string} */ wrap_kind: "passkey_prf" | "recovery_code"; /** * Format: uuid * @description Required for `passkey_prf`; the passkey id from `GET /v1/auth/passkeys`. */ credential_id?: string | null; /** @description Base64 ciphertext (≤ 4 KiB). Opaque to the vault. */ wrapped_share: string; /** @description Base64 PRF salt, 16–64 random bytes, one per key. */ salt: string; }; ClientShareResponse: { /** Format: uuid */ id?: string; /** Format: uuid */ key_id?: string; /** @enum {string} */ key_kind?: "agent_signing_key" | "treasury_wallet"; /** @enum {string} */ wrap_kind?: "passkey_prf" | "recovery_code" | "sidecar"; /** Format: uuid */ credential_id?: string | null; /** Format: uuid */ holder_id?: string | null; /** @description Base64, exactly as stored. */ wrapped_share?: string; /** @description Base64. */ salt?: string; /** Format: date-time */ created_at?: string; /** Format: date-time */ updated_at?: string; }; TssHolder: { /** Format: uuid */ holder_id?: string; /** Format: uuid */ runtime_id?: string; /** Format: uuid */ agent_id?: string; public_key?: string; /** Format: date-time */ registered_at?: string; /** Format: date-time */ last_seen_at?: string; }; PasskeySafe: { /** Format: uuid */ id?: string; chain?: string; chain_id?: number; safe_address?: string; /** Format: uuid */ passkey_id?: string; /** @description The owning passkey's name — only that credential can sign for the Safe. */ passkey_name?: string | null; /** @description The domain the owning passkey was registered under (WebAuthn rpId); a browser on another domain cannot use it. */ passkey_rp_id?: string | null; /** @enum {string} */ custody?: "passkey_owner"; /** @enum {string} */ deploy_status?: "pending" | "deployed"; deploy_tx_hash?: string | null; /** @description The SafeWebAuthnSharedSigner address listed as the Safe's owner. */ owner_signer?: string; /** Format: date-time */ created_at?: string; }; PasskeySafePrepare: { /** Format: uuid */ safe_id?: string; safe_address?: string; chain?: string; chain_id?: number; to?: string; value_wei?: string; data?: string; nonce?: number; /** @description Pass back to `execute` unchanged. */ operation?: number; /** * Format: uuid * @description Present for grant setup / revoke; pass back to `execute`. */ grant_id?: string; deploy_required?: boolean; /** @description Hex SafeTx hash — the WebAuthn challenge (raw 32 bytes). */ safe_tx_hash?: string; credential_id?: string; /** @description The passkey's registered transports (`internal`, `hybrid`, `usb`…) — pass as the `allowCredentials` hint so the browser asks the right authenticator. */ transports?: string[] | null; passkey_name?: string | null; rp_id?: string; }; PasskeySafeGrant: { /** Format: uuid */ id?: string; /** Format: uuid */ safe_id?: string; /** Format: uuid */ agent_id?: string; chain?: string; /** @description The agent's Ethereum signing key at grant time. */ delegate_address?: string; /** @description 0x000…0 for the native token. */ token_address?: string; /** @description Base units per reset period. */ allowance_amount?: string; reset_time_min?: number; /** @enum {string} */ status?: "pending" | "active" | "revoking" | "revoked"; setup_tx_hash?: string | null; revoke_tx_hash?: string | null; /** Format: date-time */ created_at?: string; }; PasskeySafeGrantPrepare: { grant?: components["schemas"]["PasskeySafeGrant"]; prepare?: components["schemas"]["PasskeySafePrepare"]; }; ClientShareListResponse: { /** Format: uuid */ key_id?: string; /** @enum {string} */ key_kind?: "agent_signing_key" | "treasury_wallet"; /** * @description `server` — 1claw holds the whole private key and can sign alone. * `client_tss` — 2-party threshold key; the customer's share is required. * @enum {string} */ custody?: "server" | "client_tss"; shares?: components["schemas"]["ClientShareResponse"][]; }; PasskeyRegisterCompleteResponse: { /** Format: uuid */ passkey_id?: string; credential_id?: string; name?: string; }; PasskeyTxAssertBeginRequest: { /** @description 64-char hex SHA-256 of canonical send or swap params */ tx_digest: string; /** * @description Treasury action being authorized. Defaults to `send`. * @default send * @enum {string} */ action: "send" | "swap"; }; PasskeyAssertBeginResponse: { challenge: string; rp_id: string; timeout: number; user_verification: string; allow_credentials: components["schemas"]["AllowCredential"][]; }; AllowCredential: { id: string; /** @enum {string} */ type: "public-key"; transports?: string[]; }; MfaPasskeyCompleteRequest: { mfa_token: string; credential_id: string; authenticator_data: string; client_data_json: string; signature: string; }; GuardrailWideningQueuedResponse: { /** @enum {string} */ status: "awaiting_approval"; /** Format: uuid */ approval_id: string; /** Format: uuid */ revision_id: string; /** @description Human-readable explanation of the queued change. */ message: string; }; RiskEvent: { /** Format: uuid */ id: string; /** Format: date-time */ occurred_at: string; /** @enum {string} */ principal_type: "user" | "agent"; /** Format: uuid */ principal_id: string; /** Format: uuid */ org_id: string; /** @description Risk event type (e.g. first_seen, geo_velocity, honeytoken_access) */ event_type: string; ip?: string | null; asn?: number | null; asn_org?: string | null; country_code?: string | null; region?: string | null; city?: string | null; latitude?: number | null; longitude?: number | null; user_agent?: string | null; /** @description Computed severity at event time (low, medium, high, critical) */ severity?: string | null; payload: { [key: string]: unknown; }; /** Format: date-time */ created_at: string; }; RiskEventListResponse: { events: components["schemas"]["RiskEvent"][]; }; RiskVerdictReason: { detector: string; severity: string; description: string; metadata?: { [key: string]: unknown; }; }; RiskVerdict: { principal_type: string; /** Format: uuid */ principal_id: string; /** Format: uuid */ org_id: string; /** @description Composite risk score (0.0 – 100.0) */ score: number; /** @enum {string} */ severity: "low" | "medium" | "high" | "critical"; reasons: components["schemas"]["RiskVerdictReason"][]; /** Format: date-time */ computed_at: string; /** Format: date-time */ expires_at: string; }; RiskVerdictListResponse: { verdicts: components["schemas"]["RiskVerdict"][]; }; Honeytoken: { /** Format: uuid */ id: string; /** Format: uuid */ vault_id: string; /** Format: uuid */ org_id: string; secret_path: string; /** Format: uuid */ created_by: string; /** Format: date-time */ created_at: string; notes?: string | null; triggered_count: number; /** Format: date-time */ last_triggered_at?: string | null; }; CreateHoneytokenRequest: { /** Format: uuid */ vault_id: string; /** @description Vault secret path to monitor as a canary */ secret_path: string; /** @description Optional human-readable notes about this honeytoken */ notes?: string; }; HoneytokenListResponse: { honeytokens: components["schemas"]["Honeytoken"][]; }; /** @description Credential source — inline value (stored in __agent-keys) or live pointer to a vault secret (resolved at execution time). */ CredentialSource: { /** @enum {string} */ type: "inline" | "vault_ref"; /** @description For inline — the credential value object. */ value?: { [key: string]: unknown; }; /** * Format: uuid * @description For vault_ref — the vault containing the referenced secret. */ vault_id?: string; /** @description For vault_ref — the secret path in the vault. */ path?: string; }; CreateBindingRequest: { name: string; /** @enum {string} */ binding_type: "http" | "graphql" | "postgres" | "mysql" | "redis" | "grpc" | "smtp" | "cloud_sdk" | "s3" | "custom"; config?: { [key: string]: unknown; }; guardrails?: components["schemas"]["BindingGuardrails"]; /** @description Legacy: inline credential value. Use credential_source for new integrations. */ credential?: { [key: string]: unknown; }; credential_source?: components["schemas"]["CredentialSource"]; }; UpdateBindingRequest: { config?: { [key: string]: unknown; }; guardrails?: components["schemas"]["BindingGuardrails"]; is_active?: boolean; /** @description Legacy: inline credential value. */ credential?: { [key: string]: unknown; }; credential_source?: components["schemas"]["CredentialSource"]; /** * Format: uuid * @description Approved policy_change id when applying a queued binding guardrail widening. Resubmit PATCH with this field after approval via POST /v1/approvals/{approval_id}/decide. */ approval_id?: string; }; /** @description Per-binding execution guardrails enforced at execute time. */ BindingGuardrails: { /** @description Host allowlist (trailing * wildcard supported). Empty = unrestricted at binding level. */ allowed_hosts?: string[]; /** @description Path allowlist for HTTP/GraphQL bindings. */ allowed_paths?: string[]; /** @description Per-binding RPM; strictest of binding and agent limits wins. Denied executions do not count. */ max_requests_per_minute?: number; /** @description Upstream timeout cap for this binding. */ max_duration_ms?: number; /** * @description Max serialized execute `params` size in bytes (default 256 KiB). * @default 262144 */ max_request_bytes: number; /** @description Max upstream response body bytes (default 1 MiB, hard cap 4 MiB). */ max_response_bytes?: number; /** @description Agent-supplied headers permitted in execute params. Defaults to content-type, accept, user-agent, idempotency-key. */ allowed_request_headers?: string[]; /** * @description GraphQL only — when false, mutation operations return 403 guardrail_violation. * @default true */ allow_mutations: boolean; /** * @description GraphQL only — when false, __schema/__type introspection is blocked. * @default false */ allow_introspection: boolean; /** * @description GraphQL max selection depth. * @default 10 */ max_query_depth: number; /** * @description GraphQL max alias count. * @default 30 */ max_aliases: number; /** @description GraphQL operation kinds allowed (query, mutation, subscription). */ allowed_operations?: string[]; }; BindingResponse: { /** Format: uuid */ id: string; /** Format: uuid */ agent_id: string; /** @enum {string} */ binding_type: "http" | "graphql" | "postgres" | "mysql" | "redis" | "grpc" | "smtp" | "cloud_sdk" | "s3" | "custom"; name: string; config?: { [key: string]: unknown; }; guardrails?: components["schemas"]["BindingGuardrails"]; is_active: boolean; /** @description Whether a credential is stored for this binding. The value itself is never returned. */ credential_set?: boolean; /** * @description How the credential is sourced — inline (HSM-encrypted copy) or vault_ref (live pointer). * @enum {string|null} */ credential_source_type?: "inline" | "vault_ref" | null; /** * Format: uuid * @description For vault_ref credentials — the vault containing the referenced secret. */ credential_vault_id?: string | null; /** @description For vault_ref credentials — the secret path in the referenced vault. */ credential_path?: string | null; /** Format: date-time */ created_at: string; /** Format: date-time */ updated_at: string; }; TestBindingResponse: { success: boolean; latency_ms: number; error?: string | null; }; ExecuteRequest: { /** @description Binding name or ID to execute against */ binding: string; /** @description Type of execution intent (e.g. http_request, graphql_query) */ intent_type: string; /** * @description Where execution runs (vault = server-side, tee = Shroud TEE) * @default vault * @enum {string} */ execution_mode: "vault" | "tee"; /** @description Intent-specific parameters */ params: { [key: string]: unknown; }; /** * @description When true, validate guardrails and approval policy without executing or persisting side effects. * @default false */ dry_run: boolean; /** * Format: uuid * @description Internal — resume execution after human approval (server-injected). */ resume_after_approval_id?: string; }; ExecutionApprovalRequired: { /** @enum {string} */ error: "approval_required"; /** Format: uuid */ approval_id: string; /** @enum {string} */ status: "pending"; /** Format: date-time */ expires_at?: string | null; }; TxAwaitingApproval: { /** @enum {string} */ status: "awaiting_approval"; /** Format: uuid */ approval_id: string; /** Format: uuid */ tx_id?: string | null; /** Format: date-time */ expires_at?: string | null; }; ExecuteResponse: { /** Format: uuid */ execution_id: string; status: string; result?: { [key: string]: unknown; } | null; error?: string | null; duration_ms: number; redactions_applied: number; /** * @description Where the intent actually ran. Reported truthfully — never claims TEE when it ran in the Vault. * @enum {string} */ execution_surface?: "vault" | "tee"; }; ExecutionEventResponse: { /** Format: uuid */ id: string; /** Format: uuid */ agent_id: string; /** Format: uuid */ binding_id: string; intent_type: string; execution_mode: string; status: string; request_summary?: { [key: string]: unknown; } | null; result_summary?: { [key: string]: unknown; } | null; error_message?: string | null; duration_ms: number; cost_cents?: number | null; redactions_applied: number; /** Format: date-time */ created_at: string; }; /** * @description Create an automation. `workflow_spec` is required and must be either * a JSON array of steps or `{ "steps": [...] }`. Dashboard `schedule` * trigger_type is accepted and normalized to `cron`. For cron triggers, * `cron_expr` is required. */ CreateAutomationRequest: { name: string; /** Format: uuid */ agent_id: string; /** * @description cron | event | webhook | manual (alias schedule → cron) * @enum {string} */ trigger_type: "cron" | "event" | "webhook" | "manual" | "schedule"; /** * @description Required when trigger_type is cron (or schedule) * @example 0 *\/6 * * * */ cron_expr?: string; /** * @default UTC * @example UTC */ timezone: string; event_filter?: { [key: string]: unknown; } | null; /** * @description Workflow steps. Accepts a bare array `[...]` or * `{ "steps": [...] }` (dashboard / preset shape). * Supported step types: get_secret, put_secret, http_request, * rotate_secret, notify_human, ai_generate, memory_get, * memory_put, memory_search, notify, approval_request, * condition, execute_binding. */ workflow_spec: { [key: string]: unknown; }[] | { [key: string]: unknown; }; }; /** * @description Agent-scoped automation create. Defaults to manual trigger. * workflow_spec must use only agent-allowed step types (log, notify, memory_get, memory_put, wait). */ AgentCreateAutomationRequest: { name: string; /** * @default manual * @enum {string} */ trigger_type: "manual" | "webhook"; workflow_spec: { [key: string]: unknown; }[] | { [key: string]: unknown; }; /** * @description When true (manual trigger only), start a run immediately after creation * @default false */ auto_trigger: boolean; }; UpdateAutomationRequest: { name?: string; cron_expr?: string | null; timezone?: string; event_filter?: { [key: string]: unknown; } | null; workflow_spec?: { [key: string]: unknown; }[] | { [key: string]: unknown; }; is_active?: boolean; }; AutomationResponse: { /** Format: uuid */ id: string; /** Format: uuid */ agent_id: string; name: string; /** @enum {string} */ trigger_type: "cron" | "event" | "webhook" | "manual"; cron_expr?: string | null; timezone: string; event_filter?: { [key: string]: unknown; } | null; workflow_spec: { [key: string]: unknown; }[] | { [key: string]: unknown; }; is_active: boolean; /** Format: date-time */ last_run_at?: string | null; /** Format: date-time */ next_run_at?: string | null; /** @description Status of the most recent run (enriched list field) */ last_run_status?: string | null; /** @description Total runs in the last 30 days (enriched list field) */ total_runs?: number | null; /** @description Success rate percentage (enriched list field) */ success_rate?: number | null; /** @description Resolved agent display name (enriched list field) */ agent_name?: string | null; /** * @description Whether the automation was created by a human or agent (chat-native create) * @enum {string} */ created_by_type?: "user" | "agent"; /** Format: date-time */ created_at: string; /** Format: date-time */ updated_at: string; }; AutomationCreatedResponse: components["schemas"]["AutomationResponse"] & { /** @description Full POST URL including token (one-time on create) */ webhook_url?: string; /** @description whk_ token segment (one-time on create) */ webhook_token?: string; }; WebhookTokenRotatedResponse: { webhook_url: string; webhook_token: string; }; AssistDraftResponse: { draft: { [key: string]: unknown; }; reply: string; }; AssistSessionResponse: { access_token: string; expires_in: number; scopes: string[]; /** Format: uuid */ runtime_id?: string | null; runtime_status?: string | null; cli_hint: string; }; AutomationListResponse: { automations: components["schemas"]["AutomationResponse"][]; }; AutomationRunResponse: { /** Format: uuid */ id: string; /** Format: uuid */ automation_id: string; /** Format: uuid */ agent_id: string; /** @enum {string} */ status: "running" | "success" | "failed" | "timed_out" | "cancelled" | "awaiting_approval"; step_results?: unknown; error?: string | null; trigger_source?: string | null; /** @description JSONB context passed between workflow steps */ context?: { [key: string]: unknown; } | null; /** Format: date-time */ started_at: string; /** Format: date-time */ finished_at?: string | null; tokens_used: number; cost_cents: number; }; AutomationRunListResponse: { runs: components["schemas"]["AutomationRunResponse"][]; }; AutomationPresetsResponse: { presets: { id?: string; name?: string; description?: string; trigger_type?: string; cron_expr?: string | null; workflow_spec?: { [key: string]: unknown; }; }[]; }; CreateConnectionRuntimeRequest: { name: string; /** * Format: uuid * @description Required when multiple agents on the connection; defaults to sole agent */ agent_id?: string; template?: string; /** @default medium */ preset: string; env_public?: { [key: string]: unknown; }; idle_timeout_secs?: number; expose_http?: boolean; slug?: string; inbound_auth?: string; startup_command?: string; }; CreateRuntimeRequest: { name: string; /** Format: uuid */ agent_id: string; template?: string; preset?: string; image?: string; /** @description Vault environment to resolve env vars from (e.g. production, preview, development) */ environment?: string; env_public?: { [key: string]: string; }; idle_timeout_secs?: number; /** @default false */ expose_http: boolean; http_port?: number; slug?: string; /** @enum {string} */ inbound_auth?: "api_key" | "jwt" | "public"; /** @default false */ shell_access_enabled: boolean; /** @description Step-up auth policy for shell (e.g. password, passkey, totp) */ shell_auth_policy?: string; shell_max_session_minutes?: number; }; UpdateRuntimeRequest: { name?: string; template?: string; preset?: string; image?: string; /** @description Vault environment to resolve env vars from */ environment?: string; env_public?: { [key: string]: string; }; idle_timeout_secs?: number; expose_http?: boolean; http_port?: number; slug?: string; /** @enum {string} */ inbound_auth?: "api_key" | "jwt" | "public"; shell_access_enabled?: boolean; shell_auth_policy?: string; shell_max_session_minutes?: number; }; RuntimeResponse: { /** Format: uuid */ id: string; name: string; /** Format: uuid */ agent_id: string; template?: string | null; preset?: string | null; provider?: string | null; /** @enum {string} */ status: "creating" | "running" | "stopping" | "stopped" | "failed" | "deleting"; image?: string | null; /** @description Vault environment for env var resolution */ environment?: string | null; env_public?: { [key: string]: string; } | null; idle_timeout_secs?: number | null; expose_http?: boolean | null; slug?: string | null; public_url?: string | null; http_port?: number | null; /** @enum {string|null} */ inbound_auth?: "api_key" | "jwt" | "public" | null; shell_access_enabled?: boolean; shell_auth_policy?: string; shell_max_session_minutes?: number; monthly_hours_used?: number | null; /** @description Whether this runtime has a paid Stripe add-on (unlimited hours). */ has_paid_addon?: boolean; /** * @description `pool` — counts against the plan's monthly runtime hours. `included` — the plan's * free runtime (every plan from Pro up includes one small or medium runtime, no hour * cap, no charge). `addon` — paid Stripe subscription item (no hour cap). * @enum {string} */ billing_kind?: "pool" | "included" | "addon"; /** Format: date-time */ created_at: string; /** Format: date-time */ updated_at: string; }; RuntimeListResponse: { runtimes: components["schemas"]["RuntimeResponse"][]; /** @description The plan's included-runtime allowance (human callers only). */ included_runtime?: { /** @description Runtimes the plan includes at no charge. */ allowance?: number; /** @description Included slots currently in use. */ used?: number; /** @description Presets an included runtime may use (up to 1 vCPU / 2 GB). */ presets?: string[]; }; }; SlugCheckResponse: { available: boolean; slug: string; reason?: string | null; }; /** * @description Step-up credentials for an interactive shell session. * Provide one of password, totp_code, passkey_credential, or reauth_token. */ ShellSessionRequest: { password?: string; totp_code?: string; passkey_credential?: { [key: string]: unknown; }; /** @description Single-use `rat_` token from POST /v1/auth/reauth (purpose runtime_shell) */ reauth_token?: string; }; ShellSessionResponse: { session_token: string; /** @description WebSocket URL for the PTY terminal */ ws_url: string; /** Format: int64 */ expires_in: number; /** Format: uuid */ runtime_id: string; max_session_minutes: number; }; /** * @description Chat with the agent inside a runtime. Provide `message` and/or * a full OpenAI-style `messages` array (ephemeral history). */ RuntimeChatRequest: { /** @description Latest user message */ message?: string; /** @description OpenAI chat messages (optional history) */ messages?: { [key: string]: unknown; }[]; model?: string; provider?: string; /** @description Request SSE streaming (default true when Accept is text/event-stream) */ stream?: boolean; }; MemoryEntry: { /** Format: uuid */ id: string; /** Format: uuid */ agent_id: string; namespace: string; key: string; value: string; /** Format: date-time */ created_at: string; /** Format: date-time */ updated_at: string; /** Format: date-time */ ttl_expires_at?: string | null; }; PutMemoryRequest: { value: string; ttl_seconds?: number | null; }; MemorySearchRequest: { namespace: string; query: string; /** @default 5 */ top_k: number; }; MemorySearchResponse: { results: { key?: string; value?: string; score?: number; namespace?: string; }[]; }; MemoryNamespaceListResponse: { namespaces: string[]; }; MemoryEntryListResponse: { entries: components["schemas"]["MemoryEntry"][]; }; AgentCardResponse: { /** Format: uuid */ id: string; name: string; description?: string | null; capabilities?: string[]; a2a_url?: string | null; mcp_url?: string | null; tags?: string[]; }; DirectoryEntry: { /** Format: uuid */ id: string; name: string; description?: string | null; tags?: string[]; capabilities?: string[]; a2a_url?: string | null; mcp_url?: string | null; org_name?: string | null; }; DirectoryResponse: { agents: components["schemas"]["DirectoryEntry"][]; total: number; page: number; per_page: number; }; OrgDirectoryAgent: { /** Format: uuid */ id: string; name: string; public_description?: string | null; public_tags?: string[]; a2a_url?: string | null; mcp_url?: string | null; intents_api_enabled: boolean; execution_intents_enabled: boolean; memory_enabled: boolean; shroud_enabled: boolean; }; OrgDirectoryResponse: { agents: components["schemas"]["OrgDirectoryAgent"][]; total: number; page: number; page_size: number; }; UpdateDiscoveryRequest: { discoverable?: boolean; public_description?: string; public_tags?: string[]; }; SendChatMessageRequest: { /** @description User message text. Optional when `messages` includes a user turn. */ message?: string; /** Format: uuid */ conversation_id?: string; mode?: string; model?: string; provider?: string; /** @description Stored on new conversations when `conversation_id` is omitted. */ system_prompt?: string; /** @description Per-request system prompt alias (same precedence as `system_prompt_override`). */ system?: string; /** @description Per-request override; highest precedence except inline `messages` system role. */ system_prompt_override?: string; /** @description Optional OpenAI-shaped history. When set, used for LLM context instead of DB history. */ messages?: { role: string; content: string; }[]; llm_api_key_vault_id?: string; llm_api_key_path?: string; }; ChatMessageResponse: { /** Format: uuid */ id?: string; /** Format: uuid */ conversation_id?: string; role?: string; content?: string; tool_calls?: unknown; tool_results?: unknown; tokens_prompt?: number; tokens_completion?: number; model?: string; /** Format: date-time */ created_at?: string; }; ChatConversationResponse: { /** Format: uuid */ id?: string; /** Format: uuid */ agent_id?: string; title?: string; mode?: string; model?: string; provider?: string; /** Format: date-time */ created_at?: string; /** Format: date-time */ updated_at?: string; }; ChatConversationListResponse: { conversations?: components["schemas"]["ChatConversationResponse"][]; }; ConversationDetailResponse: { conversation?: components["schemas"]["ChatConversationResponse"]; messages?: components["schemas"]["ChatMessageResponse"][]; }; SendChatMessageResponse: { /** Format: uuid */ conversation_id?: string; message?: components["schemas"]["ChatMessageResponse"]; }; CreateChannelRequest: { /** @enum {string} */ channel_type: "telegram" | "whatsapp" | "discord"; channel_name?: string; /** * @description Platform-specific config. * Telegram: { bot_token }. * WhatsApp: { phone_number_id, access_token, verify_token }. * Discord: { bot_token, application_id }. */ config: { [key: string]: string; }; /** * @description Enable Hermes-compatible slash commands on this channel. When true, * messages starting with `/` are handled before the LLM. Commands: * /help, /new, /reset, /clear, /model, /mode, /personality, /retry, * /undo, /compress, /summarize, /stop, /status, /skills, /usage, /sethome. */ slash_commands_enabled?: boolean; /** @description Enable voice message transcription */ voice_transcription_enabled?: boolean; /** @description List of allowed sender IDs */ sender_allowlist?: string[]; /** @description Enable auto-respond */ auto_respond_enabled?: boolean; }; UpdateChannelRequest: { channel_name?: string; is_active?: boolean; config?: { [key: string]: string; }; slash_commands_enabled?: boolean; voice_transcription_enabled?: boolean; sender_allowlist?: string[]; auto_respond_enabled?: boolean; }; ChannelResponse: { /** Format: uuid */ id?: string; /** Format: uuid */ org_id?: string; /** Format: uuid */ agent_id?: string; /** @enum {string} */ channel_type?: "telegram" | "whatsapp" | "discord"; channel_name?: string; webhook_path?: string; webhook_url?: string; is_active?: boolean; /** * @description Channel-specific configuration JSON. May include: * - sender_allowlist (array of strings): restrict which external senders can trigger the agent * - auto_respond_enabled (boolean): whether the agent auto-responds to inbound messages */ config?: { [key: string]: unknown; } | null; /** * @description Whether Hermes-compatible slash commands are enabled for this channel. * Commands: /help, /new, /reset, /clear, /model, /mode, /personality, /retry, * /undo, /compress, /summarize, /stop, /status, /skills, /usage, /sethome. */ slash_commands_enabled?: boolean; /** @description Whether voice message transcription is enabled */ voice_transcription_enabled?: boolean; /** * Format: uuid * @description ID linking this channel to a unified cross-platform conversation */ unified_conversation_id?: string | null; /** @description Whether this is the agent's home platform channel */ is_home_platform?: boolean; /** @description List of allowed sender IDs for auto-respond */ sender_allowlist?: string[] | null; /** @description Whether auto-respond is enabled for this channel */ auto_respond_enabled?: boolean; /** Format: date-time */ created_at?: string; /** Format: date-time */ updated_at?: string; }; ChannelListResponse: { channels?: components["schemas"]["ChannelResponse"][]; }; SendChannelMessageRequest: { /** @description External platform chat/user ID */ external_chat_id: string; content: string; /** @description External message ID to reply to */ reply_to?: string; }; ChannelMessageResponse: { /** Format: uuid */ id?: string; /** Format: uuid */ channel_id?: string; /** @enum {string} */ direction?: "inbound" | "outbound"; external_chat_id?: string; external_message_id?: string; sender_name?: string; content?: string; media_url?: string; /** @description Whether this message was a voice message */ is_voice_message?: boolean; /** @description Telegram voice file ID */ voice_file_id?: string | null; /** @description Duration of voice message in seconds */ voice_duration_secs?: number | null; /** * @description Status of voice transcription * @enum {string|null} */ transcription_status?: "pending" | "completed" | "failed" | null; /** Format: date-time */ created_at?: string; }; ChannelMessageListResponse: { messages?: components["schemas"]["ChannelMessageResponse"][]; }; OAuthProviderScope: { scope?: string; label?: string; description?: string; default?: boolean; }; OAuthProvider: { /** @description Unique provider identifier (e.g. "github", "google", "slack") */ slug?: string; display_name?: string; /** Format: uri */ icon_url?: string; /** Format: uri */ authorization_url?: string; /** Format: uri */ token_url?: string; scopes_available?: components["schemas"]["OAuthProviderScope"][]; default_scopes?: string[]; extra_auth_params?: { [key: string]: string; } | null; /** @description Whether custom app credentials are required (vs. shared 1Claw app) */ requires_app_credentials?: boolean; /** Format: uri */ documentation_url?: string | null; }; OAuthProviderListResponse: { providers?: components["schemas"]["OAuthProvider"][]; }; ConnectOAuthRequest: { /** @description Provider to connect (e.g. "github", "google", "slack") */ provider_slug: string; /** @description Override default scopes for this connection */ scopes?: string[]; /** @description URL to redirect to after the OAuth flow completes */ redirect_after?: string; }; ConnectOAuthResponse: { /** * Format: uri * @description Redirect the user to this URL to authorize the connection */ authorization_url?: string; }; OAuthConnectionResponse: { /** Format: uuid */ binding_id?: string; provider_slug?: string; provider_name?: string; scopes?: string[]; /** @enum {string} */ status?: "active" | "expired" | "revoked"; needs_reauth?: boolean; /** Format: date-time */ created_at?: string; }; OAuthConnectionListResponse: { connections?: components["schemas"]["OAuthConnectionResponse"][]; }; SaveOAuthAppCredentialsRequest: { /** @description Provider this credential is for */ provider_slug: string; client_id: string; /** @description Write-only; never returned in responses */ client_secret: string; /** * Format: uri * @description Custom redirect URI override */ redirect_uri?: string; }; OAuthAppCredentialResponse: { /** Format: uuid */ id?: string; provider_slug?: string; client_id?: string; /** Format: uri */ redirect_uri?: string | null; /** Format: date-time */ created_at?: string; /** Format: date-time */ updated_at?: string; }; OAuthAppCredentialListResponse: { credentials?: components["schemas"]["OAuthAppCredentialResponse"][]; /** * @description Provider slugs 1Claw has its own OAuth app for. Where the organization has * registered no credentials for one of these, connections use 1Claw's app; * an organization credential for the same provider always wins. */ platform_defaults?: string[]; }; ImportKeyRequest: { /** @description The private key to import */ private_key: string; /** * @description Key format (default hex) * @enum {string} */ format?: "hex" | "base64" | "wif"; }; CreateCedarPolicyRequest: { name: string; /** @description Cedar policy text */ cedar_text: string; }; CedarPolicyResponse: { /** Format: uuid */ id?: string; /** Format: uuid */ org_id?: string; name?: string; cedar_text?: string; is_active?: boolean; /** * @description Dynamic status from org policy backend config * @enum {string} */ enforcement_status?: "shadow" | "enforce" | "inactive"; /** Format: uuid */ created_by?: string; /** Format: date-time */ created_at?: string; /** Format: date-time */ updated_at?: string; }; CedarPolicyListResponse: { policies?: components["schemas"]["CedarPolicyResponse"][]; }; CedarPolicyTestRequest: { /** @description Optional inline Cedar text to test */ cedar_text?: string; principal_type: string; /** Format: uuid */ principal_id: string; action: string; resource_path: string; /** Format: uuid */ vault_id: string; context?: Record; }; CedarPolicyTestResponse: { /** @enum {string} */ decision?: "allow" | "deny"; backend?: string; /** @enum {string} */ enforcement_status?: "shadow" | "enforce" | "inactive"; note?: string; }; CreateOpaPolicyRequest: { name: string; /** @description OPA Rego module source */ rego_source?: string; /** @description Optional WASM bundle (base64) */ wasm_bundle_base64?: string; /** @default oneclaw/allow */ entrypoint: string; }; OpaPolicyResponse: { /** Format: uuid */ id?: string; /** Format: uuid */ org_id?: string; name?: string; rego_source?: string; has_wasm_bundle?: boolean; entrypoint?: string; is_active?: boolean; /** @enum {string} */ enforcement_status?: "shadow" | "enforce" | "inactive"; /** Format: uuid */ created_by?: string; /** Format: date-time */ created_at?: string; /** Format: date-time */ updated_at?: string; }; OpaPolicyListResponse: { policies?: components["schemas"]["OpaPolicyResponse"][]; }; OpaPolicyTestRequest: { principal_type: string; /** Format: uuid */ principal_id: string; action: string; resource_path: string; /** Format: uuid */ vault_id: string; context?: Record; }; OpaPolicyTestResponse: { /** @enum {string} */ decision?: "allow" | "deny"; backend?: string; /** @enum {string} */ enforcement_status?: "shadow" | "enforce" | "inactive"; note?: string; }; PolicyBackendSettingsResponse: { /** @enum {string} */ backend?: "builtin" | "cedar" | "opa" | "builtin+cedar" | "builtin+opa"; /** @enum {string} */ mode?: "shadow" | "enforce"; scope?: string[]; /** @enum {string} */ breaker_behavior?: "fail_closed" | "fail_open_builtin"; /** Format: int64 */ policy_version?: number; }; UpdatePolicyBackendSettingsRequest: { /** @enum {string} */ backend?: "builtin" | "cedar" | "opa" | "builtin+cedar" | "builtin+opa"; /** @enum {string} */ mode?: "shadow" | "enforce"; scope?: string[]; /** @enum {string} */ breaker_behavior?: "fail_closed" | "fail_open_builtin"; }; PolicyShadowReportResponse: { /** Format: int64 */ total_evaluated?: number; /** Format: int64 */ total_divergences?: number; /** Format: int64 */ total_errors?: number; /** Format: double */ concordance_rate?: number; sample_events?: components["schemas"]["PolicyShadowEvent"][]; /** Format: date-time */ period_start?: string; /** Format: date-time */ period_end?: string; }; PolicyShadowEvent: { /** Format: uuid */ id?: string; /** Format: uuid */ org_id?: string; backend?: string; action?: string; builtin_decision?: string; backend_decision?: string; divergent?: boolean; sampled?: boolean; eval_duration_ms?: number; error_text?: string; /** Format: uuid */ caller_id?: string; resource_path?: string; /** Format: date-time */ created_at?: string; }; GuardrailShadowReportResponse: { /** Format: uuid */ org_id?: string; /** Format: date-time */ since?: string; /** Format: date-time */ until?: string; /** Format: int64 */ total_would_deny?: number; by_reason?: components["schemas"]["GuardrailShadowReasonRow"][]; }; GuardrailShadowReasonRow: { reason_code?: string; /** Format: int64 */ would_deny_count?: number; /** Format: int64 */ enforced_count?: number; }; GuardrailRevisionListResponse: { revisions?: components["schemas"]["GuardrailRevisionRow"][]; }; GuardrailRevisionRow: { /** Format: uuid */ id?: string; /** Format: uuid */ org_id?: string; /** @enum {string} */ resource_type?: "agent" | "binding"; /** Format: uuid */ resource_id?: string; /** Format: uuid */ actor_id?: string; before_json?: { [key: string]: unknown; }; after_json?: { [key: string]: unknown; }; /** @enum {string} */ change_kind?: "narrowing" | "widening" | "neutral"; /** Format: uuid */ approval_id?: string | null; /** Format: date-time */ created_at?: string; }; GuardrailReplayRequest: { days?: number; draft_guardrails?: { [key: string]: unknown; }; draft_approval_policy?: { [key: string]: unknown; }; }; GuardrailReplayResponse: { /** Format: uuid */ agent_id?: string; /** Format: int64 */ window_days?: number; /** Format: int64 */ allowed?: number; /** Format: int64 */ denied?: number; /** Format: int64 */ would_require_approval?: number; samples?: { [key: string]: unknown; }[]; }; AgentAccountListResponse: { accounts?: components["schemas"]["AgentAccountResponse"][]; }; AgentAccountResponse: { /** Format: uuid */ id?: string; /** Format: uuid */ org_id?: string; /** Format: uuid */ agent_id?: string; chain?: string; account_type?: string; address?: string; safe_version?: string; modules_enabled?: string[]; deploy_status?: string; cosign_enabled?: boolean; metadata?: Record; /** Format: date-time */ created_at?: string; /** Format: date-time */ updated_at?: string; }; MigrationPlanResponse: { /** Format: uuid */ agent_id?: string; chain?: string; safe_address?: string; safe_version?: string; modules?: string[]; eoa_address?: string; sweep_instructions?: { asset?: string; action?: string; note?: string; }[]; roles_config_hash?: string; allowance_config_hash?: string; warnings?: string[]; deploy_status?: string; }; ProvisionAgentAccountRequest: { chain: string; /** @default eoa */ account_type: string; address?: string; }; SafeModuleRegistryResponse: { chain?: string; modules?: components["schemas"]["SafeModuleInfo"][]; }; SafeModuleInfo: { name?: string; address?: string; version?: string; }; AllowanceReconcileReport: { /** Format: uuid */ org_id?: string; agents_checked?: number; compiled?: { [key: string]: unknown; }[]; drift_detected?: { [key: string]: unknown; }[]; /** @description counterfactual when on-chain broadcast is stubbed pre-audit */ onchain_sync?: string; }; NotImplementedResponse: { error: string; phase: string; message: string; }; CreateContractAbiRequest: { chain: string; /** @description Contract address, or Solana program id when interface_kind is solana_idl */ contract_address: string; /** @description EVM ABI JSON array, or Solana IDL object when interface_kind is solana_idl */ abi_json: Record[] | Record; name?: string; description?: string; token_decimals?: number; /** * @default evm_abi * @enum {string} */ interface_kind: "evm_abi" | "solana_idl"; }; ContractAbiResponse: { /** Format: uuid */ id?: string; /** Format: uuid */ org_id?: string; chain?: string; contract_address?: string; /** @description EVM ABI JSON array, or Solana IDL object */ abi_json?: Record[] | Record; name?: string; description?: string; token_decimals?: number; /** * @default evm_abi * @enum {string} */ interface_kind: "evm_abi" | "solana_idl"; /** Format: uuid */ created_by?: string; /** Format: date-time */ created_at?: string; /** Format: date-time */ updated_at?: string; }; ContractAbiListResponse: { abis?: components["schemas"]["ContractAbiResponse"][]; }; /** * @description Signing-time conditions on access policies (all tiers). * Ignored on secret reads. Evaluated when a TransactionContext is present. * Fields are combined according to `match_mode` (default AND). */ TxConditions: { /** * @description How individual condition fields are combined. * "all" (default): every present field must match (AND). * "any": at least one present field must match (OR). * @default all * @enum {string} */ match_mode: "all" | "any"; function_name_in?: string[]; function_selector_in?: string[]; erc20_amount_above?: string; /** @description Native value threshold in wei (arbitrary-precision string) */ value_above?: string; /** @description Match EIP-712 typed_data primaryType (case-sensitive) */ eip712_primary_type_in?: string[]; /** @description Match EIP-712 domain.verifyingContract (case-insensitive) */ eip712_verifying_contract_in?: string[]; /** @description Match EIP-712 domain.name */ eip712_domain_name_in?: string[]; /** @description Match EIP-712 domain.chainId */ eip712_domain_chain_id_in?: number[]; /** @description Match EIP-7702 authorization_list delegate addresses (case-insensitive) */ eip7702_authorized_addresses_in?: string[]; to_address_in?: string[]; chain_in?: string[]; intent_type_in?: string[]; decode_failed?: boolean; program_id_in?: string[]; /** * @description When true, conditions are also evaluated against inner calls * extracted from wrapper transactions (multicall, Safe execTransaction, * ERC-4337 handleOps). A match on any inner call counts as an overall match. * @default false */ deep_inspect: boolean; /** * @description Mini expression DSL for policy conditions (schema version 2+). * References transaction context fields (chain, value_wei, to_address, * function_selector, etc.) with boolean operators. Fail-closed on parse * or evaluation errors. Example: `chain == 'ethereum' && value_wei > 1000000000000000000` */ expression?: string; } & { [key: string]: unknown; }; ConsensusTrigger: { conditions: components["schemas"]["ConsensusCondition"][]; approval: components["schemas"]["ApprovalRequirement"]; /** * Format: int64 * @default 86400 */ expiry_secs: number; /** @default false */ self_approval_allowed: boolean; /** * @description When ALL conditions in ANY entry match, consensus is bypassed. * Useful for exempting known-safe recipients or low-value transfers. */ skip_when?: components["schemas"]["FlatConditionSet"][]; /** * @description Consensus is ONLY required when at least one entry matches. * If set and none match, consensus is skipped entirely. */ require_when?: components["schemas"]["FlatConditionSet"][]; /** * @description When true, also evaluate conditions against inner calls extracted * from wrapper transactions (multicall, Safe execTransaction, * ERC-4337 handleOps). * @default false */ deep_inspect: boolean; }; /** * @description Flat condition set used by consensus composability. Each present field * is AND-combined within the set. At least one field must be specified * (unless `always` is true). */ FlatConditionSet: { /** @description Native value threshold in gwei (numeric string) */ value_above?: string; chain_in?: string[]; to_address_in?: string[]; function_selector_in?: string[]; /** @description ERC-20 raw token amount threshold (numeric string) */ erc20_amount_above?: string; intent_type_in?: string[]; /** @description When true, this entry always matches regardless of other fields */ always?: boolean; /** @description Control-plane actions to match (e.g. policy.create, signing_key.export) */ action_in?: string[]; /** @description Version-agnostic action kind groups (e.g. signing_key.*, policy.*, member.*) */ action_kind_in?: string[]; }; /** * @description Time window condition for policy evaluation. Used inside the policy * `conditions` JSON to restrict when the policy is active. */ TimeWindow: { start_hour?: number; end_hour?: number; /** @description Days when policy is active (0=Sunday, 6=Saturday) */ days_of_week?: number[]; /** @description IANA timezone identifier (e.g. "America/New_York"). Defaults to UTC. */ timezone?: string; /** @description Cron expression (6-field with seconds) for fine-grained scheduling. */ cron_expr?: string; }; ConsensusCondition: { /** @enum {string} */ type: "value_above"; /** @description Value threshold in wei (arbitrary-precision string). Preferred over threshold_gwei. */ threshold_wei?: string; /** * Format: int64 * @deprecated * @description Deprecated — use threshold_wei for arbitrary precision */ threshold_gwei?: number; } | { /** @enum {string} */ type: "chain_in"; chains: string[]; } | { /** @enum {string} */ type: "to_address_in"; addresses: string[]; } | { /** @enum {string} */ type: "function_selector_in"; selectors: string[]; } | { /** @enum {string} */ type: "erc20_amount_above"; threshold_raw: string; } | { /** @enum {string} */ type: "intent_type_in"; intent_types: string[]; } | { /** @enum {string} */ type: "always"; } | { /** @enum {string} */ type: "action_in"; /** * @description Control-plane actions to match, e.g. policy.create, policy.update, * policy.delete, signing_key.export, member.role_change, member.remove */ actions: string[]; } | { /** @enum {string} */ type: "action_kind_in"; /** @description Version-agnostic action kind groups, e.g. signing_key.*, policy.*, member.* */ action_kinds: string[]; }; ApprovalRequirement: { min_approvals: number; required_roles?: string[]; per_role_minimums?: { [key: string]: number; }; /** @description At least one approval must use one of these credential types */ require_credential_types?: ("password" | "passkey" | "totp" | "biometric" | "api_key")[]; }; SubmitPendingApprovalRequest: { /** Format: uuid */ policy_id: string; action: string; action_payload: Record; }; ConnectionSubmitPendingApprovalRequest: { /** * Format: uuid * @description Required when the connection has multiple agents */ agent_id?: string; /** * Format: uuid * @description Optional — auto-resolved from agent consensus policies when omitted */ policy_id?: string; /** @default transaction */ action: string; /** @description Transaction/intent fields (chain, to, value, …) hashed for decide binding */ action_payload: Record; /** @description Human-readable label included in webhook payloads */ summary?: string; }; InspectContentRequest: { content: string; /** * @description Inspection context (reserved for future rules) * @enum {string} */ context?: "input" | "output"; }; InspectContentResponse: { safe?: boolean; /** @enum {string} */ verdict?: "clean" | "malicious"; threat_count?: number; threats?: { type?: string; pattern?: string; severity?: string; }[]; unicode_normalized?: boolean; normalized_content?: string; }; PlatformWebhookInfoResponse: { /** Format: uuid */ app_id?: string; webhook_configured?: boolean; webhook_url_host?: string; platform_events?: string[]; org_webhooks_note?: string; }; SubmitPendingApprovalResponse: { /** Format: uuid */ pending_approval_id?: string; required_approvals?: number; current_approvals?: number; /** Format: date-time */ expires_at?: string; status?: string; message?: string; }; ApprovePendingApprovalRequest: { /** @enum {string} */ decision: "approve" | "reject" | "approved" | "rejected"; payload_hash: string; reason?: string; /** * @description Authentication method used for this approval vote * @enum {string} */ credential_type?: "password" | "passkey" | "totp" | "biometric" | "api_key"; }; PendingApprovalResponse: { /** Format: uuid */ id?: string; /** Format: uuid */ org_id?: string; /** Format: uuid */ policy_id?: string; action?: string; action_payload?: Record; payload_hash?: string; /** Format: uuid */ submitted_by?: string; submitted_by_type?: string; status?: string; required_approvals?: number; current_approvals?: number; /** Format: date-time */ expires_at?: string; /** Format: date-time */ executed_at?: string; /** Format: date-time */ created_at?: string; /** Format: date-time */ updated_at?: string; signatures?: components["schemas"]["ApprovalSignatureResponse"][]; }; ApprovalSignatureResponse: { /** Format: uuid */ id?: string; /** Format: uuid */ approver_id?: string; approver_type?: string; decision?: string; reason?: string; /** Format: date-time */ created_at?: string; }; PendingApprovalListResponse: { pending_approvals?: components["schemas"]["PendingApprovalResponse"][]; /** Format: int64 */ total?: number; }; ExecutePendingApprovalResponse: { /** Format: uuid */ pending_approval_id?: string; status?: string; /** Format: date-time */ executed_at?: string; result?: Record; }; CreateSubOrgRequest: { name: string; description?: string; /** * @default inherit * @enum {string} */ billing_model: "inherit" | "independent"; }; SubOrgResponse: { /** Format: uuid */ id?: string; /** Format: uuid */ parent_org_id?: string; name?: string; description?: string; billing_model?: string; /** @enum {string} */ status?: "active" | "archived"; /** Format: date-time */ created_at?: string; }; SubOrgListResponse: { sub_orgs?: components["schemas"]["SubOrgResponse"][]; }; SubOrgPermissionRequest: { /** @description Permission to grant (e.g. vaults:read, agents:write) */ permission: string; resource_ids?: string[]; }; SubOrgAddUserRequest: { /** Format: uuid */ user_id: string; /** * @default member * @enum {string} */ role: "admin" | "member" | "viewer"; }; SubOrgGenerateWalletsRequest: { chains?: string[]; }; PortfolioResponse: { wallets?: components["schemas"]["PortfolioWalletEntry"][]; total_usd_estimate?: string; }; PortfolioWalletEntry: { /** @enum {string} */ wallet_type?: "treasury" | "signing_key" | "smart_account"; chain?: string; address?: string; native_balance?: string; native_balance_usd?: string; tokens?: components["schemas"]["PortfolioTokenBalance"][]; }; PortfolioTokenBalance: { contract_address?: string; symbol?: string; name?: string; balance?: string; balance_usd?: string; decimals?: number; }; ImportSmartAccountRequest: { chain: string; chain_id: number; safe_address: string; /** * @description Verify on-chain Safe ownership * @default true */ verify: boolean; }; ImportSmartAccountResponse: { /** Format: uuid */ id?: string; /** Format: uuid */ agent_id?: string; chain?: string; chain_id?: number; safe_address?: string; nonce?: number | null; /** Format: date-time */ created_at?: string; }; EnvVar: { /** Format: uuid */ id?: string; key?: string; environments?: string[]; git_branch?: string | null; sensitive?: boolean; comment?: string | null; /** @description Null for sensitive vars in list responses */ value?: string | null; version?: number; created_by?: string | null; /** Format: date-time */ created_at?: string; /** Format: date-time */ updated_at?: string; }; CreateEnvVarRequest: { /** @description Uppercase alphanumeric + underscore, 1-256 chars */ key: string; value: string; /** * @default [ * "production", * "preview", * "development" * ] */ environments: string[]; /** @description Branch override (preview only) */ git_branch?: string; /** @default false */ sensitive: boolean; comment?: string; }; UpdateEnvVarRequest: { value?: string; environments?: string[]; sensitive?: boolean; comment?: string; }; ResolveEnvVarsResponse: { vars?: { [key: string]: string; }; sources?: { [key: string]: "shared" | "vault" | "branch_override"; }; environment?: string; git_branch?: string | null; /** Format: date-time */ resolved_at?: string; }; VaultEnvironment: { /** Format: uuid */ id?: string; slug?: string; description?: string | null; is_builtin?: boolean; copied_from?: string | null; is_detached?: boolean; /** Format: date-time */ created_at?: string; }; CreateEnvironmentRequest: { /** @description Lowercase alphanumeric + hyphens, 2-30 chars */ slug: string; description?: string; /** @description Copy env vars from this environment */ copy_from?: string; }; OrgEnvVar: { /** Format: uuid */ id?: string; key?: string; environments?: string[]; sensitive?: boolean; comment?: string | null; value?: string | null; version?: number; linked_vaults?: string[]; /** Format: date-time */ created_at?: string; /** Format: date-time */ updated_at?: string; }; CreateOrgEnvVarRequest: { key: string; value: string; /** * @default [ * "production", * "preview", * "development" * ] */ environments: string[]; /** @default false */ sensitive: boolean; comment?: string; }; UpdateOrgEnvVarRequest: { value?: string; environments?: string[]; comment?: string; }; CreateWalletAccessPolicyRequest: { /** * @description Policy scope — org-wide, platform app, or single wallet * @enum {string} */ scope_type: "wallet" | "platform_app" | "org"; /** * Format: uuid * @description Wallet or platform app UUID when scope_type is not org */ scope_id?: string | null; /** * @description Who receives the grant * @enum {string} */ principal_type: "user" | "agent" | "role" | "platform_app"; /** @description User/agent UUID, role name, or platform app UUID */ principal_id: string; /** @default false */ can_sign: boolean; /** @default true */ can_view_balance: boolean; /** @default false */ can_export: boolean; /** @default false */ can_send: boolean; /** @default false */ can_swap: boolean; /** @description Chains this policy applies to (empty = all) */ allowed_chains?: string[]; /** @description Max value per transaction in ETH */ max_value_per_tx_eth?: string; /** @description Daily spend limit in ETH */ daily_limit_eth?: string; /** @description Additional JSON conditions (reserved for future enforcement) */ conditions?: Record; /** Format: date-time */ expires_at?: string; }; WalletAccessPolicyResponse: { /** Format: uuid */ id?: string; /** Format: uuid */ org_id?: string; scope_type?: string; /** Format: uuid */ scope_id?: string | null; principal_type?: string; principal_id?: string; can_sign?: boolean; can_view_balance?: boolean; can_export?: boolean; can_send?: boolean; can_swap?: boolean; allowed_chains?: string[]; max_value_per_tx_eth?: string | null; daily_limit_eth?: string | null; conditions?: Record; is_active?: boolean; /** Format: date-time */ expires_at?: string | null; /** Format: uuid */ created_by?: string; /** Format: date-time */ created_at?: string; /** Format: date-time */ updated_at?: string; }; WalletAccessPolicyListResponse: { policies?: components["schemas"]["WalletAccessPolicyResponse"][]; }; CredentialRecoveryRequest: { /** @enum {string} */ recovery_type: "mfa_reset" | "passkey_reset" | "password_reset"; /** @description Optional justification for the recovery request */ reason?: string; }; CredentialRecoveryResponse: { /** Format: uuid */ request_id?: string; /** @enum {string} */ status?: "pending_approval" | "approved" | "rejected" | "expired"; /** @enum {string} */ recovery_type?: "mfa_reset" | "passkey_reset" | "password_reset"; /** Format: date-time */ created_at?: string; }; CredentialRecoveryListResponse: { requests?: components["schemas"]["CredentialRecoveryResponse"][]; }; CredentialRecoveryApproveResponse: { /** Format: uuid */ request_id?: string; /** @enum {string} */ status?: "approved"; /** @description One-time recovery code (only present for certain recovery types) */ recovery_code?: string | null; }; CredentialRecoveryExecuteResponse: { /** Format: uuid */ request_id?: string; /** @enum {string} */ status?: "executed"; recovery_type?: string; /** Format: date-time */ executed_at?: string; }; CredentialRecoveryPolicyResponse: { enabled?: boolean; require_admin_approval?: boolean; /** @description Waiting period before recovery takes effect */ delay_hours?: number; allowed_types?: ("mfa_reset" | "passkey_reset" | "password_reset")[]; }; CredentialRecoveryPolicyRequest: { enabled?: boolean; require_admin_approval?: boolean; delay_hours?: number; allowed_types?: ("mfa_reset" | "passkey_reset" | "password_reset")[]; }; ShamirKekSetupRequest: { /** * @description Minimum shares required to reconstruct the KEK * @enum {integer} */ threshold: 2 | 3; /** * @description Total number of shares to generate * @enum {integer} */ total_shares: 3 | 5; /** @description Email addresses of share custodians */ custodian_emails: string[]; }; ShamirKekSetupResponse: { kek_id?: string; threshold?: number; total_shares?: number; /** @description One-time share distribution (never returned again) */ shares?: { index?: number; /** Format: email */ custodian_email?: string; /** @description Base64-encoded share */ share_b64?: string; }[]; custody_mode?: string; /** Format: date-time */ created_at?: string; }; ShamirKekStatusResponse: { configured?: boolean; kek_id?: string | null; threshold?: number | null; total_shares?: number | null; custody_mode?: string | null; custodians?: { /** Format: email */ email?: string; share_provided?: boolean; }[] | null; /** Format: date-time */ created_at?: string | null; }; ShamirKekReconstructRequest: { shares: { index: number; /** @description Base64-encoded share */ share_b64: string; }[]; }; ShamirKekReconstructResponse: { /** @enum {string} */ status?: "accepted" | "reconstructed"; message?: string; }; ShamirKekRecoveryCodesResponse: { codes?: string[]; }; ShamirKekVerifyCodeRequest: { code: string; }; ShamirKekVerifyCodeResponse: { valid?: boolean; }; }; responses: { /** @description Invalid request */ BadRequest: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ProblemDetails"]; }; }; /** @description Authentication required or invalid */ Unauthorized: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ProblemDetails"]; }; }; /** @description Insufficient permissions */ Forbidden: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ProblemDetails"]; }; }; /** @description Resource not found */ NotFound: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ProblemDetails"]; }; }; /** @description x402 payment required */ PaymentRequired: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PaymentRequirement"]; }; }; /** @description Resource already exists or conflict */ Conflict: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ProblemDetails"]; }; }; }; parameters: { VaultId: string; /** @description Secret path (e.g. "db/credentials") */ SecretPath: string; AgentId: string; PolicyId: string; CardId: string; /** @description Set to `true` or `1` to include the raw signed transaction hex in the response. Omitted by default to reduce key exfiltration risk. Only the literal values "true" or "1" enable inclusion; any other value or omission returns responses without signed_tx. Applies to GET /v1/agents/{agent_id}/transactions and GET /v1/agents/{agent_id}/transactions/{tx_id}. */ IncludeSignedTx: boolean; }; requestBodies: never; headers: never; pathItems: never; } export type $defs = Record; export interface operations { login: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["LoginRequest"]; }; }; responses: { /** @description Authenticated (or MFA required) */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["LoginResponse"]; }; }; 401: components["responses"]["Unauthorized"]; }; }; revokeToken: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Token revoked */ 204: { headers: { [name: string]: unknown; }; content?: never; }; 401: components["responses"]["Unauthorized"]; }; }; agentToken: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["AgentTokenRequest"]; }; }; responses: { /** @description Agent JWT issued */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["TokenResponse"]; }; }; 401: components["responses"]["Unauthorized"]; }; }; apiKeyToken: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["UserApiKeyTokenRequest"]; }; }; responses: { /** @description JWT issued */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["TokenResponse"]; }; }; 401: components["responses"]["Unauthorized"]; }; }; refreshToken: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": { refresh_token: string; }; }; }; responses: { /** @description Token refreshed */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["TokenResponse"]; }; }; 401: components["responses"]["Unauthorized"]; }; }; getJwtPublicKey: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description JWT public key */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { /** @example EdDSA */ alg: string; /** @description Base64-encoded Ed25519 public key */ public_key_base64: string; }; }; }; }; }; exchangeFederatedToken: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["TokenExchangeRequest"]; "application/x-www-form-urlencoded": components["schemas"]["TokenExchangeRequest"]; }; }; responses: { /** @description Federation token issued */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["TokenExchangeResponse"]; }; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; /** @description RS256 signing key not configured */ 503: { headers: { [name: string]: unknown; }; content?: never; }; }; }; openidConfiguration: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Discovery document */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": Record; }; }; }; }; jwks: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description JWK Set */ 200: { headers: { [name: string]: unknown; }; content: { "application/jwk-set+json": { keys?: Record[]; }; }; }; }; }; signup: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["SignupRequest"]; }; }; responses: { /** @description Account created (pending verification or auto-login) */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["SignupResponse"]; }; }; 400: components["responses"]["BadRequest"]; }; }; verifyEmail: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": { token: string; }; }; }; responses: { /** @description Email verified */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["TokenResponse"]; }; }; 400: components["responses"]["BadRequest"]; }; }; forgotPassword: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["ForgotPasswordRequest"]; }; }; responses: { /** @description Acknowledgement (check email if account exists) */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ForgotPasswordResponse"]; }; }; }; }; resetPassword: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["ResetPasswordRequest"]; }; }; responses: { /** @description Password updated */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ResetPasswordResponse"]; }; }; 400: components["responses"]["BadRequest"]; }; }; googleAuth: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["GoogleAuthRequest"]; }; }; responses: { /** @description Authenticated */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["TokenResponse"]; }; }; 401: components["responses"]["Unauthorized"]; }; }; changePassword: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["ChangePasswordRequest"]; }; }; responses: { /** @description Password changed */ 204: { headers: { [name: string]: unknown; }; content?: never; }; 400: components["responses"]["BadRequest"]; }; }; setPassword: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": { password: string; password_confirm: string; }; }; }; responses: { /** @description Password set successfully */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { message?: string; }; }; }; 400: components["responses"]["BadRequest"]; }; }; changeEmail: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": { /** Format: email */ new_email: string; }; }; }; responses: { /** @description Verification code sent */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { message?: string; new_email?: string; expires_in_seconds?: number; }; }; }; 400: components["responses"]["BadRequest"]; /** @description Email already in use */ 409: { headers: { [name: string]: unknown; }; content?: never; }; }; }; verifyEmailChange: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": { code: string; }; }; }; responses: { /** @description Email updated */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { message?: string; email?: string; }; }; }; 400: components["responses"]["BadRequest"]; }; }; passkeyRegisterBegin: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Registration options */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { challenge?: string; rp_id?: string; rp_name?: string; user_id?: string; user_name?: string; user_display_name?: string; attestation?: string; authenticator_selection?: Record; }; }; }; }; }; passkeyRegisterComplete: { parameters: { query?: never; header?: { /** @description Re-auth token (`rat_`) or account password */ "X-Auth-Confirm"?: string; }; path?: never; cookie?: never; }; requestBody: { content: { "application/json": { credential_id: string; attestation_object: string; client_data_json: string; transports?: string[]; name?: string; }; }; }; responses: { /** @description Passkey registered */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": { /** Format: uuid */ passkey_id?: string; credential_id?: string; }; }; }; }; }; passkeyAssertBegin: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": { /** Format: email */ email?: string; }; }; }; responses: { /** @description Assertion options */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { challenge?: string; rp_id?: string; timeout?: number; user_verification?: string; allow_credentials?: Record[]; }; }; }; }; }; passkeyAssertComplete: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": { credential_id: string; authenticator_data: string; client_data_json: string; signature: string; }; }; }; responses: { /** @description Authentication successful */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { token?: string; refresh_token?: string; user?: Record; }; }; }; }; }; listPasskeys: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description List of passkeys */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { passkeys?: { /** Format: uuid */ id?: string; credential_id?: string; name?: string; last_used_at?: string; created_at?: string; /** * @description `true` — can hold a wallet share (WebAuthn PRF). * `false` — cannot. `null` — registered before this * was captured. */ prf_supported?: boolean | null; }[]; }; }; }; }; }; deletePasskey: { parameters: { query?: never; header: { /** @description Re-auth token (`rat_`) or account password */ "X-Auth-Confirm": string; }; path: { passkey_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Passkey deleted */ 200: { headers: { [name: string]: unknown; }; content?: never; }; 403: components["responses"]["Forbidden"]; }; }; requestApproval: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": { /** * @description Control-plane action, or a business action named `namespace.verb`. * @example refund.create */ action: string; target_type: string; target_id: string; /** * @description What the human is shown: title, body, and key-value fields. * @example { * "title": "Refund $49.99", * "body": "Order #1234 arrived damaged." * } */ summary: Record; /** * @description What the action will actually do. The enforced risk tier and * the human-readable line are derived from this, not from * `summary` — the two can disagree, and only this one describes * what happens if the human approves. * @example { * "amount_usd": "49.99", * "customer_email": "a.user@example.com" * } */ payload?: Record; reason?: string; /** * @description Advisory. The server derives the enforced tier from the agent's * `action_approval_policy` and the payload, then takes the higher * of the two: a caller may raise its own bar, never lower it. * The response returns both. */ declared_risk_tier?: number; /** * @deprecated * @description Former name for `declared_risk_tier`. Still accepted. */ risk_tier?: number; }; }; }; responses: { /** @description Approval request created */ 202: { headers: { /** @description URL to poll for approval status */ Location?: string; [name: string]: unknown; }; content: { "application/json": components["schemas"]["ApprovalResponse"]; }; }; 403: components["responses"]["Forbidden"]; }; }; consumeFeatureQuota: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": { /** @enum {string} */ feature: "voice_brief"; }; }; }; responses: { /** @description Whether this call is within the window's limit */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { allowed: boolean; limit: number; remaining: number; /** Format: date-time */ reset_at: string; }; }; }; 400: components["responses"]["BadRequest"]; 403: components["responses"]["Forbidden"]; }; }; getMe: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description User profile */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["UserProfileResponse"]; }; }; }; }; deleteMe: { parameters: { query?: never; header: { /** @description Re-auth token (`rat_`, purpose `account.delete`) or password */ "X-Auth-Confirm": string; }; path?: never; cookie?: never; }; requestBody: { content: { "application/json": { /** @description Must be "DELETE MY ACCOUNT" */ confirmation: string; }; }; }; responses: { /** @description Account deleted */ 204: { headers: { [name: string]: unknown; }; content?: never; }; 400: components["responses"]["BadRequest"]; }; }; updateMe: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["UpdateProfileRequest"]; }; }; responses: { /** @description Profile updated */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["UserProfileResponse"]; }; }; 400: components["responses"]["BadRequest"]; }; }; getSecuritySettings: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Security settings */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { require_passkey_for_vaults?: boolean; require_passkey_for_mfa?: boolean; passkey_count?: number; /** * @description True while this account carries a passkey requirement * that the 1claw.xyz → 1claw.co move cleared on its * behalf. The two flags above read false, but that was * not the user's choice: registering a passkey on the * canonical domain restores them. */ passkey_requirements_downgraded?: boolean; }; }; }; }; }; updateSecuritySettings: { parameters: { query?: never; header?: { "X-Auth-Confirm"?: string; }; path?: never; cookie?: never; }; requestBody: { content: { "application/json": { require_passkey_for_vaults?: boolean; require_passkey_for_mfa?: boolean; }; }; }; responses: { /** @description Updated settings */ 200: { headers: { [name: string]: unknown; }; content?: never; }; 403: components["responses"]["Forbidden"]; }; }; getHumanFactorAuth: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Effective HFA policy */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["HumanFactorAuthResponse"]; }; }; 403: components["responses"]["Forbidden"]; }; }; upsertHumanFactorAuth: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["UpsertHumanFactorAuthRequest"]; }; }; responses: { /** @description Updated policy */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["HumanFactorAuthResponse"]; }; }; 403: components["responses"]["Forbidden"]; }; }; mfaStatus: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description MFA status */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["MfaStatusResponse"]; }; }; }; }; mfaSetup: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description TOTP setup details */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["MfaSetupResponse"]; }; }; }; }; mfaVerifySetup: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["MfaVerifySetupRequest"]; }; }; responses: { /** @description MFA enabled, recovery codes returned */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["MfaVerifySetupResponse"]; }; }; 400: components["responses"]["BadRequest"]; }; }; mfaVerify: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["MfaVerifyRequest"]; }; }; responses: { /** @description MFA verified, JWT issued */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["TokenResponse"]; }; }; 401: components["responses"]["Unauthorized"]; }; }; mfaPasskeyBegin: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": { mfa_token: string; }; }; }; responses: { /** @description WebAuthn challenge */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PasskeyAssertBeginResponse"]; }; }; 400: components["responses"]["BadRequest"]; }; }; mfaPasskeyComplete: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["MfaPasskeyCompleteRequest"]; }; }; responses: { /** @description MFA verified, JWT issued */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["TokenResponse"]; }; }; 401: components["responses"]["Unauthorized"]; }; }; mfaDisable: { parameters: { query?: never; header?: { /** @description Passkey or TOTP re-auth token (`rat_`) */ "X-Auth-Confirm"?: string; }; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["MfaDisableRequest"]; }; }; responses: { /** @description MFA disabled */ 204: { headers: { [name: string]: unknown; }; content?: never; }; 400: components["responses"]["BadRequest"]; }; }; deviceCode: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["DeviceCodeRequest"]; }; }; responses: { /** @description Device code issued */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["DeviceCodeResponse"]; }; }; }; }; deviceToken: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["DeviceTokenRequest"]; }; }; responses: { /** @description Token issued or authorization pending */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["DeviceTokenResponse"]; }; }; }; }; deviceCodeStatus: { parameters: { query?: never; header?: never; path: { user_code: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Device code details */ 200: { headers: { [name: string]: unknown; }; content?: never; }; 404: components["responses"]["NotFound"]; }; }; deviceApprove: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["DeviceApproveRequest"]; }; }; responses: { /** @description Device approved */ 200: { headers: { [name: string]: unknown; }; content?: never; }; }; }; deviceDeny: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["DeviceApproveRequest"]; }; }; responses: { /** @description Device denied */ 200: { headers: { [name: string]: unknown; }; content?: never; }; }; }; listApiKeys: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description List of API keys (masked) */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ApiKeyListResponse"]; }; }; }; }; createApiKey: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["CreateApiKeyRequest"]; }; }; responses: { /** @description API key created (full key shown once) */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ApiKeyCreatedResponse"]; }; }; 400: components["responses"]["BadRequest"]; }; }; revokeApiKey: { parameters: { query?: never; header?: never; path: { key_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Key revoked */ 204: { headers: { [name: string]: unknown; }; content?: never; }; 404: components["responses"]["NotFound"]; }; }; exportUserData: { parameters: { query?: never; header: { "X-Auth-Confirm": string; }; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description User data export */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { /** @example 1.0 */ export_version: string; /** Format: date-time */ exported_at: string; user: { /** Format: uuid */ id: string; /** Format: email */ email: string; display_name: string; auth_method: string; /** Format: date-time */ created_at: string; }; vaults: { /** Format: uuid */ id: string; name: string; /** Format: date-time */ created_at: string; }[]; agents: { /** Format: uuid */ id: string; name: string; /** Format: date-time */ created_at: string; }[]; secrets_metadata: { /** Format: uuid */ vault_id: string; path: string; type: string; version: number; /** Format: date-time */ created_at: string; }[]; policies: { /** Format: uuid */ id: string; /** Format: uuid */ vault_id: string; principal_type: string; /** Format: uuid */ principal_id: string; secret_path_pattern: string; permissions: string[]; /** Format: date-time */ created_at: string; }[]; }; }; }; 403: components["responses"]["Forbidden"]; }; }; listDevices: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Device list */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["DeviceListResponse"]; }; }; }; }; registerDevice: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["RegisterDeviceRequest"]; }; }; responses: { /** @description Device registered */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["RegisterDeviceResponse"]; }; }; 400: components["responses"]["BadRequest"]; 403: components["responses"]["Forbidden"]; }; }; revokeDevice: { parameters: { query?: never; header?: never; path: { device_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Device revoked */ 204: { headers: { [name: string]: unknown; }; content?: never; }; 404: components["responses"]["NotFound"]; }; }; createDeviceChallenge: { parameters: { query?: never; header?: never; path: { device_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["CreateDeviceChallengeRequest"]; }; }; responses: { /** @description Challenge created */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["DeviceChallengeResponse"]; }; }; 404: components["responses"]["NotFound"]; }; }; attestDeviceChallenge: { parameters: { query?: never; header?: never; path: { device_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["AttestDeviceChallengeRequest"]; }; }; responses: { /** @description Attestation successful */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["AttestDeviceChallengeResponse"]; }; }; 400: components["responses"]["BadRequest"]; 404: components["responses"]["NotFound"]; }; }; registerPushToken: { parameters: { query?: never; header?: never; path: { device_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["RegisterPushTokenRequest"]; }; }; responses: { /** @description Push token registered */ 204: { headers: { [name: string]: unknown; }; content?: never; }; 400: components["responses"]["BadRequest"]; 404: components["responses"]["NotFound"]; }; }; listVaults: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description List of vaults */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["VaultListResponse"]; }; }; }; }; createVault: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["CreateVaultRequest"]; }; }; responses: { /** @description Vault created */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["VaultResponse"]; }; }; /** @description The name is empty or longer than 255 characters. Checked before the consensus gate and the quota, so a malformed request consumes neither an approval nor a rate-limit slot. */ 400: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ProblemDetails"]; }; }; /** @description A vault with that name already exists in this organization. Names are unique per org; this previously surfaced as a 500. */ 409: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ProblemDetails"]; }; }; }; }; getVault: { parameters: { query?: never; header?: never; path: { vault_id: components["parameters"]["VaultId"]; }; cookie?: never; }; requestBody?: never; responses: { /** @description Vault details */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["VaultResponse"]; }; }; 404: components["responses"]["NotFound"]; }; }; deleteVault: { parameters: { query?: never; header?: never; path: { vault_id: components["parameters"]["VaultId"]; }; cookie?: never; }; requestBody?: never; responses: { /** @description Vault deleted */ 204: { headers: { [name: string]: unknown; }; content?: never; }; 404: components["responses"]["NotFound"]; }; }; enableCmek: { parameters: { query?: never; header?: never; path: { vault_id: components["parameters"]["VaultId"]; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["EnableCmekRequest"]; }; }; responses: { /** @description CMEK enabled */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["VaultResponse"]; }; }; 400: components["responses"]["BadRequest"]; 403: components["responses"]["Forbidden"]; }; }; disableCmek: { parameters: { query?: never; header?: never; path: { vault_id: components["parameters"]["VaultId"]; }; cookie?: never; }; requestBody?: never; responses: { /** @description CMEK disabled */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["VaultResponse"]; }; }; 400: components["responses"]["BadRequest"]; }; }; rotateCmek: { parameters: { query?: never; header: { /** @description Base64-encoded old CMEK key (32 bytes) */ "x-cmek-old-key": string; /** @description Base64-encoded new CMEK key (32 bytes) */ "x-cmek-new-key": string; }; path: { vault_id: components["parameters"]["VaultId"]; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["CmekRotateRequest"]; }; }; responses: { /** @description Rotation job started */ 202: { headers: { /** @description URL to poll for rotation job status */ Location?: string; [name: string]: unknown; }; content: { "application/json": components["schemas"]["CmekRotationJobResponse"]; }; }; 400: components["responses"]["BadRequest"]; }; }; getCmekRotationJob: { parameters: { query?: never; header?: never; path: { vault_id: components["parameters"]["VaultId"]; job_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Rotation job status */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["CmekRotationJobResponse"]; }; }; 404: components["responses"]["NotFound"]; }; }; enableMpc: { parameters: { query?: never; header?: never; path: { vault_id: components["parameters"]["VaultId"]; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["EnableMpcRequest"]; }; }; responses: { /** @description MPC custody enabled */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["VaultResponse"]; }; }; 400: components["responses"]["BadRequest"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; listSecrets: { parameters: { query?: { /** @description Filter by path prefix */ prefix?: string; }; header?: never; path: { vault_id: components["parameters"]["VaultId"]; }; cookie?: never; }; requestBody?: never; responses: { /** @description Secret metadata list */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["SecretListResponse"]; }; }; 404: components["responses"]["NotFound"]; }; }; getSecret: { parameters: { query?: never; header?: { /** @description Base64-encoded client key share for MPC 2-of-2 vaults. Required when the vault uses 2-of-2 MPC custody. */ "x-client-share"?: string; }; path: { vault_id: components["parameters"]["VaultId"]; /** @description Secret path (e.g. "db/credentials") */ path: components["parameters"]["SecretPath"]; }; cookie?: never; }; requestBody?: never; responses: { /** @description Decrypted secret value */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["SecretResponse"]; }; }; 402: components["responses"]["PaymentRequired"]; 404: components["responses"]["NotFound"]; }; }; putSecret: { parameters: { query?: never; header?: never; path: { vault_id: components["parameters"]["VaultId"]; /** @description Secret path (e.g. "db/credentials") */ path: components["parameters"]["SecretPath"]; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["PutSecretRequest"]; }; }; responses: { /** @description Secret created or updated */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["SecretCreatedResponse"]; }; }; 400: components["responses"]["BadRequest"]; 402: components["responses"]["PaymentRequired"]; }; }; deleteSecret: { parameters: { query?: never; header?: never; path: { vault_id: components["parameters"]["VaultId"]; /** @description Secret path (e.g. "db/credentials") */ path: components["parameters"]["SecretPath"]; }; cookie?: never; }; requestBody?: never; responses: { /** @description Secret deleted */ 204: { headers: { [name: string]: unknown; }; content?: never; }; 404: components["responses"]["NotFound"]; }; }; listSecretVersions: { parameters: { query?: never; header?: never; path: { vault_id: components["parameters"]["VaultId"]; /** @description Secret path (e.g. "db/credentials") */ path: components["parameters"]["SecretPath"]; }; cookie?: never; }; requestBody?: never; responses: { /** @description Version list */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["SecretVersionListResponse"]; }; }; 404: components["responses"]["NotFound"]; }; }; getSecretVersion: { parameters: { query?: never; header?: never; path: { vault_id: components["parameters"]["VaultId"]; /** @description Secret path (e.g. "db/credentials") */ path: components["parameters"]["SecretPath"]; version: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Decrypted secret value at the specified version */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["SecretResponse"]; }; }; 404: components["responses"]["NotFound"]; /** @description Version has been disabled or expired */ 410: { headers: { [name: string]: unknown; }; content?: never; }; }; }; disableSecretVersion: { parameters: { query?: never; header?: never; path: { vault_id: components["parameters"]["VaultId"]; /** @description Secret path (e.g. "db/credentials") */ path: components["parameters"]["SecretPath"]; version: number; }; cookie?: never; }; requestBody?: never; responses: { /** @description Version disabled */ 204: { headers: { [name: string]: unknown; }; content?: never; }; 404: components["responses"]["NotFound"]; }; }; rotateSecret: { parameters: { query?: never; header?: never; path: { vault_id: components["parameters"]["VaultId"]; /** @description Secret path (e.g. "db/credentials") */ path: components["parameters"]["SecretPath"]; }; cookie?: never; }; requestBody?: { content: { "application/json": components["schemas"]["RotateSecretRequest"]; }; }; responses: { /** @description New version created with server-generated value */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["SecretCreatedResponse"]; }; }; 400: components["responses"]["BadRequest"]; 404: components["responses"]["NotFound"]; }; }; listPolicies: { parameters: { query?: never; header?: never; path: { vault_id: components["parameters"]["VaultId"]; }; cookie?: never; }; requestBody?: never; responses: { /** @description Policy list */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PolicyListResponse"]; }; }; }; }; createPolicy: { parameters: { query?: never; header?: never; path: { vault_id: components["parameters"]["VaultId"]; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["CreatePolicyRequest"]; }; }; responses: { /** @description Policy created */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PolicyResponse"]; }; }; 400: components["responses"]["BadRequest"]; }; }; updatePolicy: { parameters: { query?: never; header?: never; path: { vault_id: components["parameters"]["VaultId"]; policy_id: components["parameters"]["PolicyId"]; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["UpdatePolicyRequest"]; }; }; responses: { /** @description Policy updated */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PolicyResponse"]; }; }; 404: components["responses"]["NotFound"]; }; }; deletePolicy: { parameters: { query?: never; header?: never; path: { vault_id: components["parameters"]["VaultId"]; policy_id: components["parameters"]["PolicyId"]; }; cookie?: never; }; requestBody?: never; responses: { /** @description Policy revoked */ 204: { headers: { [name: string]: unknown; }; content?: never; }; 404: components["responses"]["NotFound"]; }; }; listEnvVars: { parameters: { query?: { /** @description Filter by environment (production, preview, development, or custom) */ environment?: string; }; header?: never; path: { vault_id: components["parameters"]["VaultId"]; }; cookie?: never; }; requestBody?: never; responses: { /** @description Environment variable list */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { env_vars?: components["schemas"]["EnvVar"][]; }; }; }; }; }; createEnvVar: { parameters: { query?: never; header?: never; path: { vault_id: components["parameters"]["VaultId"]; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["CreateEnvVarRequest"]; }; }; responses: { /** @description Environment variable created */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["EnvVar"]; }; }; 400: components["responses"]["BadRequest"]; }; }; resolveEnvVars: { parameters: { query?: { /** @description Target environment (production, preview, development, or custom). Required for human callers; optional for agents with env_auto_resolve when the agent has an environment tag. */ environment?: string; /** @description Optional git branch for preview branch overrides */ git_branch?: string; }; header?: never; path: { vault_id: components["parameters"]["VaultId"]; }; cookie?: never; }; requestBody?: never; responses: { /** @description Resolved environment variables */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ResolveEnvVarsResponse"]; }; }; }; }; getEnvVar: { parameters: { query?: { environment?: string; }; header?: never; path: { vault_id: components["parameters"]["VaultId"]; key: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Environment variable */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["EnvVar"]; }; }; 404: components["responses"]["NotFound"]; }; }; deleteEnvVar: { parameters: { query?: { environment?: string; }; header?: never; path: { vault_id: components["parameters"]["VaultId"]; key: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Deleted */ 204: { headers: { [name: string]: unknown; }; content?: never; }; }; }; updateEnvVar: { parameters: { query?: { environment?: string; }; header?: never; path: { vault_id: components["parameters"]["VaultId"]; key: string; }; cookie?: never; }; requestBody?: { content: { "application/json": components["schemas"]["UpdateEnvVarRequest"]; }; }; responses: { /** @description Environment variable updated */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["EnvVar"]; }; }; 404: components["responses"]["NotFound"]; }; }; listVaultEnvironments: { parameters: { query?: never; header?: never; path: { vault_id: components["parameters"]["VaultId"]; }; cookie?: never; }; requestBody?: never; responses: { /** @description Vault environment list */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { environments?: components["schemas"]["VaultEnvironment"][]; }; }; }; }; }; createVaultEnvironment: { parameters: { query?: never; header?: never; path: { vault_id: components["parameters"]["VaultId"]; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["CreateEnvironmentRequest"]; }; }; responses: { /** @description Environment created */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["VaultEnvironment"]; }; }; 400: components["responses"]["BadRequest"]; }; }; deleteVaultEnvironment: { parameters: { query?: never; header?: never; path: { vault_id: components["parameters"]["VaultId"]; slug: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Deleted */ 204: { headers: { [name: string]: unknown; }; content?: never; }; }; }; enrollAgent: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["EnrollAgentRequest"]; }; }; responses: { /** @description Enrollment processed (uniform response to prevent email enumeration) */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["EnrollAgentResponse"]; }; }; /** @description Rate limit exceeded */ 429: { headers: { [name: string]: unknown; }; content?: never; }; }; }; listAgents: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Agent list */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["AgentListResponse"]; }; }; }; }; createAgent: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["CreateAgentRequest"]; }; }; responses: { /** @description Agent created with one-time API key */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["AgentCreatedResponse"]; }; }; 400: components["responses"]["BadRequest"]; }; }; getAgentSelf: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Agent self profile */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["AgentSelfResponse"]; }; }; 403: components["responses"]["Forbidden"]; }; }; getAgent: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody?: never; responses: { /** @description Agent details */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["AgentResponse"]; }; }; 404: components["responses"]["NotFound"]; }; }; deleteAgent: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody?: never; responses: { /** @description Agent deleted */ 204: { headers: { [name: string]: unknown; }; content?: never; }; 404: components["responses"]["NotFound"]; }; }; updateAgent: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["UpdateAgentRequest"]; }; }; responses: { /** @description Agent updated */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["AgentResponse"]; }; }; /** * @description Guardrail widening queued for human approval. The change is not * applied until approved via POST /v1/approvals/{approval_id}/decide. * Resubmit this PATCH with `approval_id` set to the returned value * after approval to apply the widening. */ 202: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["GuardrailWideningQueuedResponse"]; }; }; 404: components["responses"]["NotFound"]; }; }; listChildAgents: { parameters: { query?: never; header?: never; path: { agent_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Children */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["AgentListResponse"]; }; }; 404: components["responses"]["NotFound"]; }; }; createChildAgent: { parameters: { query?: never; header?: never; path: { agent_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": { name: string; description?: string; /** @description Subset of the parent's vault_ids. Default the parent's. */ vault_ids?: string[]; /** @description Subset of the parent's scopes. Default the parent's. */ scopes?: string[]; /** @description The child's own namespaces. Default `["child:{child_id}"]`. */ memory_namespace_allowlist?: string[]; /** @description The child's own policy. Default the parent's. */ action_approval_policy?: Record; /** Format: date-time */ expires_at?: string; /** Format: uuid */ approval_id?: string; }; }; }; responses: { /** @description Created; `api_key` shown once */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["AgentCreatedResponse"]; }; }; 400: components["responses"]["BadRequest"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; rotateAgentKey: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody?: never; responses: { /** @description New API key returned */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["AgentKeyRotatedResponse"]; }; }; 404: components["responses"]["NotFound"]; }; }; rotateAgentIdentityKeys: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody?: never; responses: { /** @description Agent with updated public keys */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["AgentResponse"]; }; }; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; addAgentSmartAccount: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["AddSmartAccountRequest"]; }; }; responses: { /** @description Agent with updated smart_accounts list */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["AgentResponse"]; }; }; 400: components["responses"]["BadRequest"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; listTransactions: { parameters: { query?: { /** @description Set to `true` or `1` to include the raw signed transaction hex in the response. Omitted by default to reduce key exfiltration risk. Only the literal values "true" or "1" enable inclusion; any other value or omission returns responses without signed_tx. Applies to GET /v1/agents/{agent_id}/transactions and GET /v1/agents/{agent_id}/transactions/{tx_id}. */ include_signed_tx?: components["parameters"]["IncludeSignedTx"]; }; header?: never; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody?: never; responses: { /** @description Transaction list */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["TransactionListResponse"]; }; }; }; }; submitTransaction: { parameters: { query?: never; header?: { /** @description Optional key for replay protection; duplicate requests return cached response. */ "Idempotency-Key"?: string; }; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["SubmitTransactionRequest"]; }; }; responses: { /** @description Transaction previously created with same Idempotency-Key (replay-safe response) */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["TransactionResponse"]; }; }; /** @description Transaction signed (and optionally broadcast) */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["TransactionResponse"]; }; }; /** @description Transaction held for human approval (graduated tx_approval_policy) */ 202: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["TxAwaitingApproval"]; }; }; 402: components["responses"]["PaymentRequired"]; 403: components["responses"]["Forbidden"]; /** @description Idempotency-Key in use by another in-flight request; retry later. */ 409: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ProblemDetails"]; }; }; /** @description Simulation reverted (when simulate_first is true) */ 422: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["TransactionResponse"]; }; }; }; }; getTransaction: { parameters: { query?: { /** @description Set to `true` or `1` to include the raw signed transaction hex in the response. Omitted by default to reduce key exfiltration risk. Only the literal values "true" or "1" enable inclusion; any other value or omission returns responses without signed_tx. Applies to GET /v1/agents/{agent_id}/transactions and GET /v1/agents/{agent_id}/transactions/{tx_id}. */ include_signed_tx?: components["parameters"]["IncludeSignedTx"]; }; header?: never; path: { agent_id: components["parameters"]["AgentId"]; tx_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Transaction details */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["TransactionResponse"]; }; }; 404: components["responses"]["NotFound"]; }; }; signTransaction: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["SignTransactionRequest"]; }; }; responses: { /** @description Transaction signed successfully (not broadcast) */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["SignTransactionResponse"]; }; }; 400: components["responses"]["BadRequest"]; 402: components["responses"]["PaymentRequired"]; 403: components["responses"]["Forbidden"]; }; }; simulateTransaction: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["SimulateTransactionRequest"]; }; }; responses: { /** @description Simulation result */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["SimulationResponse"]; }; }; 400: components["responses"]["BadRequest"]; 402: components["responses"]["PaymentRequired"]; 403: components["responses"]["Forbidden"]; }; }; simulateBundle: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["SimulateBundleRequest"]; }; }; responses: { /** @description Bundle simulation results */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["BundleSimulationResponse"]; }; }; 400: components["responses"]["BadRequest"]; 402: components["responses"]["PaymentRequired"]; }; }; listSigningKeys: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody?: never; responses: { /** @description Signing keys list */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["SigningKeyListResponse"]; }; }; }; }; createSigningKey: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["CreateSigningKeyRequest"]; }; }; responses: { /** @description Signing key created */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["SigningKeyResponse"]; }; }; 400: components["responses"]["BadRequest"]; 409: components["responses"]["Conflict"]; }; }; rotateSigningKey: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; chain: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Rotated signing key */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["SigningKeyResponse"]; }; }; 404: components["responses"]["NotFound"]; }; }; deactivateSigningKey: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; chain: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Key deactivated */ 204: { headers: { [name: string]: unknown; }; content?: never; }; 404: components["responses"]["NotFound"]; }; }; exportSigningKey: { parameters: { query?: never; header: { /** @description Account password for re-authentication */ "X-Auth-Confirm": string; }; path: { agent_id: components["parameters"]["AgentId"]; chain: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Signing key exported successfully */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { chain: string; curve: string; public_key: string; address?: string; private_key: string; key_version: number; /** Format: uuid */ agent_id: string; }; }; }; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; getSigningKeyBalance: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; chain: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Signing key balance */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["SigningKeyBalanceResponse"]; }; }; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; importSigningKey: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; chain: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["ImportKeyRequest"]; }; }; responses: { /** @description Signing key imported */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["SigningKeyResponse"]; }; }; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; }; }; leaseBankrKey: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody?: { content: { "application/json": components["schemas"]["LeaseBankrKeyRequest"]; }; }; responses: { /** @description Bankr key leased */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["LeaseBankrKeyResponse"]; }; }; 400: components["responses"]["BadRequest"]; 403: components["responses"]["Forbidden"]; }; }; listBankrKeys: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody?: never; responses: { /** @description Active leases (no secret values) */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["BankrKeyLeaseListResponse"]; }; }; 404: components["responses"]["NotFound"]; }; }; revokeBankrKey: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; lease_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Lease revoked */ 204: { headers: { [name: string]: unknown; }; content?: never; }; 404: components["responses"]["NotFound"]; }; }; listAgentAccounts: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody?: never; responses: { /** @description Agent accounts */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["AgentAccountListResponse"]; }; }; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; provisionAgentAccount: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["ProvisionAgentAccountRequest"]; }; }; responses: { /** @description Account provisioned */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["AgentAccountResponse"]; }; }; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; migrateAgentToSafe: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody: { content: { "application/json": { chain: string; deprecate_eoa?: boolean; }; }; }; responses: { /** @description Migration plan */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["MigrationPlanResponse"]; }; }; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; deprecateAgentEoa: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; chain: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Updated account */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["AgentAccountResponse"]; }; }; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; deployAgentSafeAccount: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; chain: string; }; cookie?: never; }; requestBody?: never; responses: { 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; /** @description Not implemented (Phase 5.1) */ 501: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["NotImplementedResponse"]; }; }; }; }; syncOrgSafeAllowances: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Reconciliation report */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["AllowanceReconcileReport"]; }; }; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; }; }; treasurySafeRolesSync: { parameters: { query?: never; header?: never; path: { treasury_id: string; }; cookie?: never; }; requestBody?: never; responses: { 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; /** @description Not implemented (Phase 5.9) */ 501: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["NotImplementedResponse"]; }; }; }; }; enableSafeCosign: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody?: never; responses: { /** @description Not implemented (Phase 5.2) */ 501: { headers: { [name: string]: unknown; }; content?: never; }; }; }; enrollSafePasskeyOwner: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody?: never; responses: { /** @description Not implemented (Phase 5.5) */ 501: { headers: { [name: string]: unknown; }; content?: never; }; }; }; configureSafeTimelock: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody?: never; responses: { /** @description Not implemented (Phase 5.6) */ 501: { headers: { [name: string]: unknown; }; content?: never; }; }; }; enableSafeErc4337: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody?: never; responses: { /** @description Not implemented (Phase 5.8) */ 501: { headers: { [name: string]: unknown; }; content?: never; }; }; }; replayAgentGuardrails: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody?: { content: { "application/json": components["schemas"]["GuardrailReplayRequest"]; }; }; responses: { /** @description Replay report */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["GuardrailReplayResponse"]; }; }; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; getSafeModuleRegistry: { parameters: { query?: never; header?: never; path: { chain: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Module registry */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["SafeModuleRegistryResponse"]; }; }; }; }; listDelegations: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody?: never; responses: { /** @description List of delegations */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["DelegationListResponse"]; }; }; 404: components["responses"]["NotFound"]; }; }; createDelegation: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["CreateDelegationRequest"]; }; }; responses: { /** @description Delegation created */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["DelegationResponse"]; }; }; 400: components["responses"]["BadRequest"]; 403: components["responses"]["Forbidden"]; /** @description Delegation already exists for this delegator/delegate pair */ 409: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ProblemDetails"]; }; }; }; }; getEffectiveDelegations: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody?: never; responses: { /** @description Effective delegations with usage stats */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["DelegationListResponse"]; }; }; 404: components["responses"]["NotFound"]; }; }; getDelegation: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; delegation_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Delegation details */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["DelegationResponse"]; }; }; 404: components["responses"]["NotFound"]; }; }; revokeDelegation: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; delegation_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Delegation revoked */ 204: { headers: { [name: string]: unknown; }; content?: never; }; 404: components["responses"]["NotFound"]; }; }; updateDelegation: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; delegation_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["UpdateDelegationRequest"]; }; }; responses: { /** @description Delegation updated */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["DelegationResponse"]; }; }; 400: components["responses"]["BadRequest"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; signIntent: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["SignIntentRequest"]; }; }; responses: { /** @description Signed result */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["SignIntentResponse"]; }; }; 400: components["responses"]["BadRequest"]; 403: components["responses"]["Forbidden"]; }; }; listBindings: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody?: never; responses: { /** @description Binding list */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { bindings: components["schemas"]["BindingResponse"][]; }; }; }; 403: components["responses"]["Forbidden"]; }; }; createBinding: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["CreateBindingRequest"]; }; }; responses: { /** @description Binding created */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["BindingResponse"]; }; }; 400: components["responses"]["BadRequest"]; 403: components["responses"]["Forbidden"]; }; }; getBinding: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; binding_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Binding details */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["BindingResponse"]; }; }; 404: components["responses"]["NotFound"]; }; }; deleteBinding: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; binding_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Binding deleted */ 204: { headers: { [name: string]: unknown; }; content?: never; }; 404: components["responses"]["NotFound"]; }; }; updateBinding: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; binding_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["UpdateBindingRequest"]; }; }; responses: { /** @description Binding updated */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["BindingResponse"]; }; }; /** * @description Binding guardrail widening queued for human approval. Resubmit * PATCH with `approval_id` after approval via * POST /v1/approvals/{approval_id}/decide. */ 202: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["GuardrailWideningQueuedResponse"]; }; }; 400: components["responses"]["BadRequest"]; 404: components["responses"]["NotFound"]; }; }; testBinding: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; binding_id: string; }; cookie?: never; }; requestBody?: { content: { "application/json": { /** @description Connection test timeout in milliseconds */ timeout_ms?: number; }; }; }; responses: { /** @description Test result */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["TestBindingResponse"]; }; }; 404: components["responses"]["NotFound"]; }; }; rotateBindingCredential: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; binding_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": { /** @description New credential material (object or string). Stored server-side. */ credential: unknown; }; }; }; responses: { /** @description Updated binding */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["BindingResponse"]; }; }; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; executeIntent: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["ExecuteRequest"]; }; }; responses: { /** @description Execution result */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ExecuteResponse"]; }; }; /** @description Execution requires human approval before running */ 202: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ExecutionApprovalRequired"]; }; }; 400: components["responses"]["BadRequest"]; /** @description Guardrail violation or permission denied */ 403: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["GuardrailViolation"] | components["schemas"]["ProblemDetails"]; }; }; /** @description Request params exceed binding max_request_bytes */ 413: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["GuardrailViolation"]; }; }; /** @description Binding or agent execution rate limit exceeded */ 429: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["GuardrailViolation"]; }; }; }; }; listExecutions: { parameters: { query?: { limit?: number; offset?: number; }; header?: never; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody?: never; responses: { /** @description Execution event list */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { events: components["schemas"]["ExecutionEventResponse"][]; }; }; }; 403: components["responses"]["Forbidden"]; }; }; listChains: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Chain list */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ChainListResponse"]; }; }; }; }; getChain: { parameters: { query?: never; header?: never; path: { /** @description Chain name (e.g. "ethereum") or numeric chain ID */ identifier: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Chain details */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ChainResponse"]; }; }; 404: components["responses"]["NotFound"]; }; }; adminDismissAgentReports: { parameters: { query?: never; header?: never; path: { agent_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Reports dismissed */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { /** Format: uuid */ agent_id?: string; dismissed?: number; }; }; }; /** @description Not a platform admin */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Agent not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; adminSetAgentVerificationTier: { parameters: { query?: never; header?: never; path: { agent_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": { /** @enum {string} */ tier: "unverified" | "platform_reviewed" | "identity_verified" | "enterprise"; /** @description Internal review notes */ notes?: string | null; }; }; }; responses: { /** @description Tier set */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { /** Format: uuid */ agent_id?: string; tier?: string; }; }; }; /** @description Unknown tier */ 400: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not a platform admin */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Agent not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; adminKmsRelevel: { parameters: { query?: { limit?: number; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Orgs examined and migrations started */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { examined?: number; migrations_started?: number; limit?: number; }; }; }; /** @description Not a platform admin */ 403: { headers: { [name: string]: unknown; }; content?: never; }; }; }; adminListChains: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Full chain list */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ChainListResponse"]; }; }; }; }; createChain: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["CreateChainRequest"]; }; }; responses: { /** @description Chain added */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ChainResponse"]; }; }; }; }; updateChain: { parameters: { query?: never; header?: never; path: { chain_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["UpdateChainRequest"]; }; }; responses: { /** @description Chain updated */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ChainResponse"]; }; }; }; }; deleteChain: { parameters: { query?: never; header?: never; path: { chain_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Chain removed */ 204: { headers: { [name: string]: unknown; }; content?: never; }; }; }; createShare: { parameters: { query?: never; header?: never; path: { secret_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["CreateShareRequest"]; }; }; responses: { /** @description Share created */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ShareResponse"]; }; }; 402: components["responses"]["PaymentRequired"]; 404: components["responses"]["NotFound"]; }; }; accessShare: { parameters: { query?: never; header?: never; path: { share_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Shared secret value */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["SharedSecretResponse"]; }; }; 402: components["responses"]["PaymentRequired"]; 404: components["responses"]["NotFound"]; }; }; revokeShare: { parameters: { query?: never; header?: never; path: { share_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Share revoked */ 204: { headers: { [name: string]: unknown; }; content?: never; }; }; }; listOutboundShares: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Outbound share list */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ShareListResponse"]; }; }; }; }; listInboundShares: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Inbound share list */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ShareListResponse"]; }; }; }; }; acceptShare: { parameters: { query?: never; header?: never; path: { share_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Share accepted */ 204: { headers: { [name: string]: unknown; }; content?: never; }; }; }; declineShare: { parameters: { query?: never; header?: never; path: { share_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Share declined */ 204: { headers: { [name: string]: unknown; }; content?: never; }; }; }; listOrgMembers: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Member list */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["OrgMemberListResponse"]; }; }; }; }; getAgentKeysVault: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Agent-keys vault id */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["AgentKeysVaultResponse"]; }; }; /** @description Agent-keys vault not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; getOnboardingStatus: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Onboarding status */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["OnboardingStatus"]; }; }; }; }; provisionOnboarding: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: { content: { "application/json": components["schemas"]["OnboardingProvisionRequest"]; }; }; responses: { /** @description Provisioned resources */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["OnboardingProvisionResponse"]; }; }; }; }; getOrgStatus: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Current org status */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { /** Format: uuid */ org_id: string; /** @enum {string} */ status: "active" | "frozen"; /** Format: date-time */ frozen_at?: string | null; }; }; }; /** @description Forbidden */ 403: { headers: { [name: string]: unknown; }; content?: never; }; }; }; freezeOrg: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Organization frozen */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { /** @enum {string} */ status?: "frozen"; /** Format: uuid */ org_id?: string; }; }; }; /** @description Forbidden */ 403: { headers: { [name: string]: unknown; }; content?: never; }; }; }; unfreezeOrg: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Organization unfrozen */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { /** @enum {string} */ status?: "unfrozen"; /** Format: uuid */ org_id?: string; }; }; }; /** @description Forbidden */ 403: { headers: { [name: string]: unknown; }; content?: never; }; }; }; getOrgBankrConfig: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Bankr configuration status */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["OrgBankrConfigResponse"]; }; }; }; }; upsertOrgBankrConfig: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["UpsertOrgBankrConfigRequest"]; }; }; responses: { /** @description Configuration saved */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["OrgBankrConfigResponse"]; }; }; }; }; deleteOrgBankrConfig: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Configuration removed */ 204: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Configuration not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; inviteMember: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["InviteMemberRequest"]; }; }; responses: { /** @description Invitation sent */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["InviteMemberResponse"]; }; }; }; }; removeMember: { parameters: { query?: never; header?: never; path: { user_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Member removed */ 204: { headers: { [name: string]: unknown; }; content?: never; }; }; }; updateMemberRole: { parameters: { query?: never; header?: never; path: { user_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["UpdateMemberRoleRequest"]; }; }; responses: { /** @description Role updated */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["OrgMemberResponse"]; }; }; }; }; listOrgEnvVars: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Org shared environment variable list */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { env_vars?: components["schemas"]["OrgEnvVar"][]; }; }; }; }; }; createOrgEnvVar: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["CreateOrgEnvVarRequest"]; }; }; responses: { /** @description Org shared env var created */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["OrgEnvVar"]; }; }; 400: components["responses"]["BadRequest"]; }; }; updateOrgEnvVar: { parameters: { query?: never; header?: never; path: { key: string; }; cookie?: never; }; requestBody?: { content: { "application/json": components["schemas"]["UpdateOrgEnvVarRequest"]; }; }; responses: { /** @description Org shared env var updated */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["OrgEnvVar"]; }; }; 404: components["responses"]["NotFound"]; }; }; deleteOrgEnvVar: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Deleted */ 204: { headers: { [name: string]: unknown; }; content?: never; }; }; }; linkOrgEnvVar: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody: { content: { "application/json": { /** Format: uuid */ vault_id: string; }; }; }; responses: { /** @description Linked */ 201: { headers: { [name: string]: unknown; }; content?: never; }; }; }; unlinkOrgEnvVar: { parameters: { query?: never; header?: never; path: { id: string; vault_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Unlinked */ 204: { headers: { [name: string]: unknown; }; content?: never; }; }; }; billingUsage: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Usage summary */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["UsageSummaryResponse"]; }; }; }; }; billingHistory: { parameters: { query?: { limit?: number; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Usage event list */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["UsageHistoryResponse"]; }; }; }; }; billingSubscribe: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["SubscribeRequest"]; }; }; responses: { /** @description Checkout URL */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["CheckoutUrlResponse"]; }; }; }; }; billingPortal: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Portal URL */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PortalUrlResponse"]; }; }; }; }; billingSubscription: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Full billing summary */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["SubscriptionResponse"]; }; }; }; }; billingCreditTopup: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["TopupRequest"]; }; }; responses: { /** @description Checkout URL for top-up */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["CheckoutUrlResponse"]; }; }; }; }; billingCreditBalance: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Credit balance */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["CreditBalanceResponse"]; }; }; }; }; billingCreditTransactions: { parameters: { query?: { page?: number; limit?: number; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Credit ledger */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["CreditTransactionsListResponse"]; }; }; }; }; getLlmTokenBilling: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description LLM token billing status */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["LlmTokenBillingStatus"]; }; }; }; }; subscribeLlmTokenBilling: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Stripe Checkout URL */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["LlmCheckoutResponse"]; }; }; }; }; disableLlmTokenBilling: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description LLM billing disabled */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["LlmDisableResponse"]; }; }; }; }; cancelLlmDuplicateSubscriptions: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Duplicate subscriptions cancelled */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["LlmCancelDuplicatesResponse"]; }; }; }; }; billingOverageMethod: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["OverageMethodRequest"]; }; }; responses: { /** @description Overage method updated */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["OverageMethodResponse"]; }; }; }; }; billingWebhook: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Webhook processed */ 200: { headers: { [name: string]: unknown; }; content?: never; }; }; }; queryAuditEvents: { parameters: { query?: { resource_id?: string; actor_id?: string; action?: string; from?: string; to?: string; limit?: number; offset?: number; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Audit events */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["AuditEventsResponse"]; }; }; 402: components["responses"]["PaymentRequired"]; }; }; verifyAuditChain: { parameters: { query?: { from?: string; to?: string; limit?: number; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Chain verification result */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["AuditVerifyResponse"]; }; }; }; }; listIpRules: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description IP rule list */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["IpRulesListResponse"]; }; }; }; }; createIpRule: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["CreateIpRuleRequest"]; }; }; responses: { /** @description Rule created */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["IpRuleResponse"]; }; }; }; }; deleteIpRule: { parameters: { query?: never; header?: never; path: { rule_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Rule deleted */ 204: { headers: { [name: string]: unknown; }; content?: never; }; }; }; listTreasuries: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description List of treasuries */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { treasuries?: components["schemas"]["TreasuryResponse"][]; }; }; }; 401: components["responses"]["Unauthorized"]; }; }; createTreasury: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["CreateTreasuryRequest"]; }; }; responses: { /** @description Treasury created */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["TreasuryResponse"]; }; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; }; }; getTreasury: { parameters: { query?: never; header?: never; path: { treasury_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Treasury details */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["TreasuryResponse"]; }; }; 404: components["responses"]["NotFound"]; }; }; deleteTreasury: { parameters: { query?: never; header?: never; path: { treasury_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Treasury deleted */ 204: { headers: { [name: string]: unknown; }; content?: never; }; 404: components["responses"]["NotFound"]; }; }; updateTreasury: { parameters: { query?: never; header?: never; path: { treasury_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["UpdateTreasuryRequest"]; }; }; responses: { /** @description Treasury updated */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["TreasuryResponse"]; }; }; 400: components["responses"]["BadRequest"]; 404: components["responses"]["NotFound"]; }; }; addTreasurySigner: { parameters: { query?: never; header?: never; path: { treasury_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["AddSignerRequest"]; }; }; responses: { /** @description Signer added */ 201: { headers: { [name: string]: unknown; }; content?: never; }; 400: components["responses"]["BadRequest"]; }; }; removeTreasurySigner: { parameters: { query?: never; header?: never; path: { treasury_id: string; signer_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Signer removed */ 204: { headers: { [name: string]: unknown; }; content?: never; }; 404: components["responses"]["NotFound"]; }; }; listTreasuryAccessRequests: { parameters: { query?: never; header?: never; path: { treasury_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description List of access requests */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { requests?: components["schemas"]["AccessRequestResponse"][]; }; }; }; }; }; requestTreasuryAccess: { parameters: { query?: never; header?: never; path: { treasury_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Access request created */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["AccessRequestResponse"]; }; }; 403: components["responses"]["Forbidden"]; }; }; approveTreasuryAccess: { parameters: { query?: never; header?: never; path: { treasury_id: string; request_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Access request approved */ 200: { headers: { [name: string]: unknown; }; content?: never; }; 404: components["responses"]["NotFound"]; }; }; denyTreasuryAccess: { parameters: { query?: never; header?: never; path: { treasury_id: string; request_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Access request denied */ 200: { headers: { [name: string]: unknown; }; content?: never; }; 404: components["responses"]["NotFound"]; }; }; listTreasuryProposals: { parameters: { query?: { status?: "pending" | "approved" | "executing" | "executed" | "rejected" | "expired"; }; header?: never; path: { treasury_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Proposal list */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["TreasuryProposalListResponse"]; }; }; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; }; }; createTreasuryProposal: { parameters: { query?: never; header?: never; path: { treasury_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["CreateTreasuryProposalRequest"]; }; }; responses: { /** @description Proposal created */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["TreasuryProposalResponse"]; }; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; }; }; getTreasuryProposal: { parameters: { query?: never; header?: never; path: { treasury_id: string; proposal_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Proposal details */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["TreasuryProposalResponse"]; }; }; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; }; }; cancelTreasuryProposal: { parameters: { query?: never; header?: never; path: { treasury_id: string; proposal_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Proposal cancelled */ 204: { headers: { [name: string]: unknown; }; content?: never; }; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; signTreasuryProposal: { parameters: { query?: never; header?: never; path: { treasury_id: string; proposal_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["SignTreasuryProposalRequest"]; }; }; responses: { /** @description Signature recorded (may include executed_tx_hash if auto-executed) */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["TreasuryProposalResponse"]; }; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; executeTreasuryProposal: { parameters: { query?: never; header?: never; path: { treasury_id: string; proposal_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Proposal executed */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["TreasuryProposalResponse"]; }; }; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; listClientKeyShares: { parameters: { query?: never; header?: never; path: { /** @description A treasury wallet id or an agent signing key id owned by the caller's org */ key_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Wraps on file */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ClientShareListResponse"]; }; }; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; putClientKeyShare: { parameters: { query?: never; header?: never; path: { /** @description A treasury wallet id or an agent signing key id owned by the caller's org */ key_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["PutClientShareRequest"]; }; }; responses: { /** @description Share stored */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ClientShareResponse"]; }; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; rewrapClientKeyShare: { parameters: { query?: never; header?: never; path: { key_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["PutClientShareRequest"]; }; }; responses: { /** @description Wrap added */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ClientShareResponse"]; }; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; 409: components["responses"]["Conflict"]; }; }; deleteClientKeyShare: { parameters: { query?: never; header?: never; path: { key_id: string; share_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Wrap removed */ 204: { headers: { [name: string]: unknown; }; content?: never; }; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; tssKeygenBegin: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": { /** @enum {string} */ chain: "solana"; /** * @description Re-key ceremony: replace the active server-custody wallet on * this chain. On `complete` its balance is swept to the new * address by the old key's last signature and the old wallet is * deactivated (audit `treasury_wallet.rekeyed`). * @default false */ replace_existing?: boolean; }; }; }; responses: { /** @description Session opened; the vault's round-1 package */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": { /** Format: uuid */ session_id?: string; chain?: string; curve?: string; /** @example 1 */ server_identifier?: number; /** @example 2 */ client_identifier?: number; /** @description Base64 FROST DKG round-1 package. */ server_round1?: string; /** Format: date-time */ expires_at?: string; }; }; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; 409: components["responses"]["Conflict"]; }; }; tssKeygenRound2: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": { /** Format: uuid */ session_id: string; /** @description Base64 FROST DKG round-1 package from the browser. */ client_round1: string; }; }; }; responses: { /** @description The vault's round-2 package, addressed to the caller */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { /** Format: uuid */ session_id?: string; server_round2?: string; }; }; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; 409: components["responses"]["Conflict"]; }; }; tssKeygenComplete: { parameters: { query?: never; header: { "X-Passkey-Token": string; }; path?: never; cookie?: never; }; requestBody: { content: { "application/json": { /** Format: uuid */ session_id: string; /** @description Base64 FROST DKG round-2 package from the browser, addressed to the vault. */ client_round2: string; }; }; }; responses: { /** @description Wallet created */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": { /** Format: uuid */ key_id?: string; chain?: string; curve?: string; /** @enum {string} */ custody?: "client_tss"; address?: string; public_key_hex?: string; /** @description Base64 FROST public key package. */ public_key_package?: string; }; }; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; 409: components["responses"]["Conflict"]; }; }; tssSignBegin: { parameters: { query?: never; header: { "X-Passkey-Token": string; }; path: { key_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": { /** @description Base64 bytes to sign (the serialised transaction message). */ message: string; }; }; }; responses: { /** @description Session opened */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": { /** Format: uuid */ session_id?: string; /** Format: uuid */ key_id?: string; message_digest?: string; server_commitments?: string; /** Format: date-time */ expires_at?: string; }; }; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; tssSignComplete: { parameters: { query?: never; header?: never; path: { key_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": { /** Format: uuid */ session_id: string; client_commitments: string; client_signature_share: string; }; }; }; responses: { /** @description Signature */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { /** Format: uuid */ key_id?: string; message_digest?: string; /** @description Base64 64-byte Ed25519 signature. */ signature?: string; signature_hex?: string; }; }; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; 409: components["responses"]["Conflict"]; }; }; tssTreasuryPrepare: { parameters: { query?: never; header?: never; path: { chain: string; }; cookie?: never; }; requestBody: { content: { "application/json": { to: string; /** @description Major units */ value: string; memo?: string; }; }; }; responses: { /** @description Unsigned message */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { /** Format: uuid */ key_id?: string; chain?: string; from?: string; to?: string; value_base_units?: string; recent_blockhash?: string; message?: string; message_digest?: string; }; }; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; tssTreasuryBroadcast: { parameters: { query?: never; header?: never; path: { chain: string; }; cookie?: never; }; requestBody: { content: { "application/json": { message: string; signature: string; to: string; value_base_units: string; }; }; }; responses: { /** @description Broadcast */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["TreasuryWalletSendResponse"]; }; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; }; }; getTssHolder: { parameters: { query?: never; header?: never; path: { runtime_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Holder */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["TssHolder"]; }; }; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; }; }; registerTssHolder: { parameters: { query?: never; header?: never; path: { runtime_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": { /** @description Base64 SEC1 uncompressed P-256 point (65 bytes). */ public_key: string; }; }; }; responses: { /** @description Registered */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["TssHolder"]; }; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; getTssHolderShare: { parameters: { query?: never; header?: never; path: { key_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Wrapped share (opaque) */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { /** Format: uuid */ key_id?: string; /** Format: uuid */ holder_id?: string; /** @enum {string} */ wrap_kind?: "sidecar"; wrapped_share?: string; salt?: string; }; }; }; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; provisionTssHolderShare: { parameters: { query?: never; header?: never; path: { key_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": { /** Format: uuid */ holder_id: string; wrapped_share: string; salt: string; }; }; }; responses: { /** @description Stored */ 201: { headers: { [name: string]: unknown; }; content?: never; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; agentTssPrepare: { parameters: { query?: never; header?: never; path: { agent_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": { /** Format: uuid */ key_id: string; to: string; /** @description Major units. */ value: string; memo?: string; }; }; }; responses: { /** @description Unsigned message */ 200: { headers: { [name: string]: unknown; }; content?: never; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; agentTssSignBegin: { parameters: { query?: never; header?: never; path: { agent_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": { /** Format: uuid */ key_id: string; message: string; }; }; }; responses: { /** @description Session opened */ 201: { headers: { [name: string]: unknown; }; content?: never; }; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; agentTssSignComplete: { parameters: { query?: never; header?: never; path: { agent_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": { /** Format: uuid */ session_id: string; client_commitments: string; client_signature_share: string; }; }; }; responses: { /** @description Signature */ 200: { headers: { [name: string]: unknown; }; content?: never; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; 409: components["responses"]["Conflict"]; }; }; agentTssBroadcast: { parameters: { query?: never; header?: never; path: { agent_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": { /** Format: uuid */ key_id: string; message: string; signature: string; }; }; }; responses: { /** @description Broadcast */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["TreasuryWalletSendResponse"]; }; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; }; }; listPasskeySafes: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Safes */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { safes?: components["schemas"]["PasskeySafe"][]; }; }; }; 401: components["responses"]["Unauthorized"]; }; }; createPasskeySafe: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": { chain: string; /** Format: uuid */ passkey_id: string; }; }; }; responses: { /** @description Safe registered (counterfactual) */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PasskeySafe"]; }; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; 409: components["responses"]["Conflict"]; }; }; deactivatePasskeySafe: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Deactivated */ 204: { headers: { [name: string]: unknown; }; content?: never; }; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; }; }; preparePasskeySafeTx: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody: { content: { "application/json": { to: string; value_wei: string; /** @description Hex calldata */ data?: string; }; }; }; responses: { /** @description What to sign */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PasskeySafePrepare"]; }; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; executePasskeySafeTx: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody: { content: { "application/json": { to: string; value_wei: string; data?: string; nonce: number; /** * @description 0 = call. 1 = delegatecall, accepted only with a `grant_id` whose * prepared setup calldata this is, and only to the pinned * MultiSendCallOnly — the API cannot delegatecall arbitrary code. * @default 0 */ operation?: number; /** * Format: uuid * @description Pass back from a grant or revoke prepare; activates / revokes the grant on success. */ grant_id?: string; /** @description Base64url. */ authenticator_data: string; /** @description Base64url. */ client_data_json: string; /** @description Base64url DER ECDSA signature. */ signature: string; }; }; }; responses: { /** @description Relayed */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { /** Format: uuid */ safe_id?: string; safe_address?: string; chain?: string; safe_tx_hash?: string; deploy_tx_hash?: string | null; tx_hash?: string; status?: string; }; }; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; 409: components["responses"]["Conflict"]; }; }; listPasskeySafeGrants: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Grants */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { grants?: components["schemas"]["PasskeySafeGrant"][]; }; }; }; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; }; }; createPasskeySafeGrant: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody: { content: { "application/json": { /** Format: uuid */ agent_id: string; /** @description ERC-20 contract; omit for the native token. */ token?: string; /** @description Base units */ allowance_amount: string; /** * @description Reset period in minutes. * @default 1440 */ reset_time_min?: number; }; }; }; responses: { /** @description Grant and what to sign */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PasskeySafeGrantPrepare"]; }; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; 409: components["responses"]["Conflict"]; }; }; revokePasskeySafeGrant: { parameters: { query?: never; header?: never; path: { id: string; grant_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Grant and what to sign */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PasskeySafeGrantPrepare"]; }; }; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; 409: components["responses"]["Conflict"]; }; }; spendFromPasskeySafeGrant: { parameters: { query?: never; header?: never; path: { agent_id: string; safe_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": { to: string; /** @description Base units */ amount: string; /** @description ERC-20 contract; omit for the native token. */ token?: string; }; }; }; responses: { /** @description Broadcast */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { /** Format: uuid */ grant_id?: string; safe_address?: string; chain?: string; to?: string; amount?: string; token_address?: string; /** @description Allowance left in this period after this transfer. */ remaining_after?: string; /** @description The module's delegate nonce used. */ nonce?: number; tx_hash?: string; status?: string; }; }; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; 402: components["responses"]["PaymentRequired"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; 409: components["responses"]["Conflict"]; }; }; generateTreasuryWallets: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["GenerateTreasuryWalletsRequest"]; }; }; responses: { /** @description Wallets generated */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["TreasuryWalletListResponse"]; }; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; }; }; listTreasuryWallets: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Wallet list */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["TreasuryWalletListResponse"]; }; }; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; }; }; getTreasuryWallet: { parameters: { query?: never; header?: never; path: { /** @description Chain name (e.g. ethereum, solana, bitcoin) */ chain: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Wallet details */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["TreasuryWalletResponse"]; }; }; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; deactivateTreasuryWallet: { parameters: { query?: never; header?: never; path: { chain: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Wallet deactivated */ 204: { headers: { [name: string]: unknown; }; content?: never; }; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; }; }; exportTreasuryWallet: { parameters: { query?: never; header: { /** @description Account password for re-authentication */ "X-Auth-Confirm": string; }; path: { chain: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Private key exported */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["TreasuryWalletExportResponse"]; }; }; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; rotateTreasuryWallet: { parameters: { query?: never; header?: never; path: { chain: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Wallet rotated */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["TreasuryWalletResponse"]; }; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; getTreasuryWalletBalance: { parameters: { query?: { /** @description Optional list of ERC-20 contract addresses to query balances for */ tokens?: string[]; }; header?: never; path: { chain: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Wallet balance */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["TreasuryWalletBalanceResponse"]; }; }; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; sendFromTreasuryWallet: { parameters: { query?: never; header: { /** @description Account password for re-authentication */ "X-Auth-Confirm": string; }; path: { chain: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["TreasuryWalletSendRequest"]; }; }; responses: { /** @description Transaction sent */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["TreasuryWalletSendResponse"]; }; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; swapFromTreasuryWallet: { parameters: { query?: never; header: { /** @description Account password for re-authentication */ "X-Auth-Confirm": string; }; path: { chain: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["TreasuryWalletSwapRequest"]; }; }; responses: { /** @description Swap executed */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["TreasuryWalletSwapResponse"]; }; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; importTreasuryWallet: { parameters: { query?: never; header?: never; path: { chain: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["ImportKeyRequest"]; }; }; responses: { /** @description Treasury wallet imported */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["TreasuryWalletResponse"]; }; }; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; }; }; getTreasuryAuthPolicy: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Effective HFA policy with passkey registration count */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["TreasuryAuthPolicyResponse"]; }; }; 403: components["responses"]["Forbidden"]; }; }; getEffectiveSpendPolicy: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Effective spend policy */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { policy?: components["schemas"]["SpendPolicyResponse"] | null; }; }; }; 401: components["responses"]["Unauthorized"]; }; }; getUserInferenceBudget: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Inference budget (or unconfigured message) */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["InferenceBudgetResponse"] | components["schemas"]["InferenceBudgetUnconfiguredResponse"]; }; }; 403: components["responses"]["Forbidden"]; }; }; listWebhooks: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Webhook list */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["WebhookListResponse"]; }; }; 401: components["responses"]["Unauthorized"]; }; }; createWebhook: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["CreateWebhookRequest"]; }; }; responses: { /** @description Webhook registered */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["WebhookCreatedResponse"]; }; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; }; }; getWebhook: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Webhook details */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["WebhookResponse"]; }; }; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; }; }; deleteWebhook: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Webhook deleted */ 204: { headers: { [name: string]: unknown; }; content?: never; }; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; }; }; updateWebhook: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["UpdateWebhookRequest"]; }; }; responses: { /** @description Webhook updated */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["WebhookResponse"]; }; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; }; }; adminListSettings: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Settings list */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["SettingsListResponse"]; }; }; }; }; adminUpdateSetting: { parameters: { query?: never; header?: never; path: { key: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["UpdateSettingRequest"]; }; }; responses: { /** @description Setting updated */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["SettingResponse"]; }; }; }; }; adminDeleteSetting: { parameters: { query?: never; header?: never; path: { key: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Setting deleted */ 204: { headers: { [name: string]: unknown; }; content?: never; }; }; }; adminGetX402Config: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description x402 config */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["X402ConfigResponse"]; }; }; }; }; adminUpdateX402Config: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["X402ConfigResponse"]; }; }; responses: { /** @description Config updated */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["X402ConfigResponse"]; }; }; }; }; adminListUsers: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description User list */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["AdminUsersListResponse"]; }; }; }; }; adminDeleteUser: { parameters: { query?: never; header?: never; path: { user_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description User deleted */ 204: { headers: { [name: string]: unknown; }; content?: never; }; }; }; adminGetOrgLimits: { parameters: { query?: never; header?: never; path: { org_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Org limits */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["OrgLimitsResponse"]; }; }; }; }; adminUpdateOrgLimits: { parameters: { query?: never; header?: never; path: { org_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["UpdateOrgLimitsRequest"]; }; }; responses: { /** @description Limits updated */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["OrgLimitsResponse"]; }; }; }; }; adminSetBillingTier: { parameters: { query?: never; header?: never; path: { org_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["SetBillingTierRequest"]; }; }; responses: { /** @description Billing tier updated */ 200: { headers: { [name: string]: unknown; }; content?: never; }; 400: components["responses"]["BadRequest"]; 403: components["responses"]["Forbidden"]; }; }; adminResetUsageEvents: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Usage table cleared; returns number of deleted rows */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ResetUsageEventsResponse"]; }; }; 403: components["responses"]["Forbidden"]; }; }; adminResetUsageForUserByEmail: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["ResetUsageForUserEmailRequest"]; }; }; responses: { /** @description Usage cleared for the user's org */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ResetUsageForUserEmailResponse"]; }; }; 400: components["responses"]["BadRequest"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; healthCheck: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Healthy */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["HealthResponse"]; }; }; }; }; healthHsm: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description HSM status */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { /** @enum {string} */ status?: "ok" | "degraded" | "unavailable"; }; }; }; }; }; getShroudAttestation: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Attestation proof */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ShroudAttestationResponse"]; }; }; }; }; inspectContent: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["InspectContentRequest"]; }; }; responses: { /** @description Inspection report */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["InspectContentResponse"]; }; }; 400: components["responses"]["BadRequest"]; }; }; transferPlatformAppOwnership: { parameters: { query?: never; header: { "X-Auth-Confirm": string; }; path: { appId: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["TransferPlatformAppOwnershipRequest"]; }; }; responses: { /** @description Ownership transferred */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["TransferPlatformAppOwnershipResponse"]; }; }; 400: components["responses"]["BadRequest"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; getPlatformAppStats: { parameters: { query?: never; header?: never; path: { appId: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description App statistics */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PlatformAppStatsResponse"]; }; }; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; }; }; getPlatformWebhooks: { parameters: { query?: never; header?: never; path: { appId: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Webhook configuration summary */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PlatformWebhookInfoResponse"]; }; }; 404: components["responses"]["NotFound"]; }; }; rotatePlatformWebhookSecret: { parameters: { query?: never; header?: never; path: { appId: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description New webhook secret generated */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { /** @description The new webhook signing secret (shown once) */ webhook_secret: string; }; }; }; 401: components["responses"]["Unauthorized"]; /** @description Only human users can rotate webhook secrets */ 403: { headers: { [name: string]: unknown; }; content?: never; }; 404: components["responses"]["NotFound"]; }; }; getPlatformTemplate: { parameters: { query?: never; header?: never; path: { appId: string; template_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Template details */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PlatformTemplateResponse"]; }; }; 404: components["responses"]["NotFound"]; }; }; deletePlatformTemplate: { parameters: { query?: never; header?: never; path: { appId: string; template_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Template deleted */ 204: { headers: { [name: string]: unknown; }; content?: never; }; 404: components["responses"]["NotFound"]; }; }; updatePlatformTemplate: { parameters: { query?: never; header?: never; path: { appId: string; template_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": { name?: string; description?: string | null; spec?: { [key: string]: unknown; }; is_active?: boolean; }; }; }; responses: { /** @description Template updated */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PlatformTemplateResponse"]; }; }; 404: components["responses"]["NotFound"]; }; }; getFleet: { parameters: { query?: never; header?: never; path: { appId: string; template_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Fleet summary */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["FleetSummaryResponse"]; }; }; 404: components["responses"]["NotFound"]; }; }; listFleetAgents: { parameters: { query?: { limit?: number; offset?: number; }; header?: never; path: { appId: string; template_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Agents in the fleet */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ListFleetAgentsResponse"]; }; }; 404: components["responses"]["NotFound"]; }; }; bulkPatchFleet: { parameters: { query?: never; header?: never; path: { appId: string; template_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": { /** @description Fields to set on every agent in the cohort. */ patch: { [key: string]: unknown; }; }; }; }; responses: { /** @description Patch applied */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { fields_applied?: string[]; /** * Format: int64 * @description Agents in the cohort the patch applied to. */ agents_matched?: number; /** * Format: int64 * @description Distinct agents written, not writes performed. Every field in one patch targets the same cohort, so this is the cohort size rather than fields x agents. */ agents_updated?: number; }; }; }; /** @description A field outside the bulk-patch allowlist, or an empty patch */ 400: { headers: { [name: string]: unknown; }; content?: never; }; 404: components["responses"]["NotFound"]; }; }; rolloutFleet: { parameters: { query?: never; header?: never; path: { appId: string; template_id: string; }; cookie?: never; }; requestBody?: { content: { "application/json": { /** * @description Overwrite hand edits. Cannot carry guardrails. * @default false */ force?: boolean; /** * @description Report the plan without applying it. * @default false */ dry_run?: boolean; }; }; }; responses: { /** @description Rollout result */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["FleetRolloutResponse"]; }; }; 404: components["responses"]["NotFound"]; /** @description A rollout is already running for this template */ 409: { headers: { [name: string]: unknown; }; content?: never; }; }; }; pauseFleet: { parameters: { query?: never; header?: never; path: { appId: string; template_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Agents paused */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { /** Format: int64 */ agents_paused?: number; }; }; }; 404: components["responses"]["NotFound"]; }; }; updateConnectionDelegation: { parameters: { query?: never; header?: never; path: { connectionId: string; }; cookie?: never; }; requestBody: { content: { "application/json": { delegation_enabled?: boolean; /** @description Scopes: vaults:read, vaults:write, agents:read, agents:write, secrets:read, secrets:write, automations:*, runtimes:* */ delegation_scopes?: string[]; }; }; }; responses: { /** @description Delegation settings updated */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { /** Format: uuid */ connection_id?: string; delegation_enabled?: boolean; delegation_scopes?: string[]; }; }; }; 404: components["responses"]["NotFound"]; }; }; getDelegationLog: { parameters: { query?: never; header?: never; path: { connectionId: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Delegation log entries */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { entries?: { action?: string; scope?: string; resource_type?: string; /** Format: uuid */ resource_id?: string; /** Format: date-time */ timestamp?: string; details?: { [key: string]: unknown; } | null; }[]; }; }; }; 404: components["responses"]["NotFound"]; }; }; listSpendPolicies: { parameters: { query?: never; header?: never; path: { appId: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Spend policies */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { policies?: components["schemas"]["SpendPolicyResponse"][]; }; }; }; }; }; createSpendPolicy: { parameters: { query?: never; header?: never; path: { appId: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["CreateSpendPolicyRequest"]; }; }; responses: { /** @description Spend policy created */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["SpendPolicyResponse"]; }; }; 400: components["responses"]["BadRequest"]; 403: components["responses"]["Forbidden"]; }; }; getSpendPolicy: { parameters: { query?: never; header?: never; path: { appId: string; policyId: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Spend policy */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["SpendPolicyResponse"]; }; }; 404: components["responses"]["NotFound"]; }; }; deleteSpendPolicy: { parameters: { query?: never; header?: never; path: { appId: string; policyId: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Deleted */ 204: { headers: { [name: string]: unknown; }; content?: never; }; 404: components["responses"]["NotFound"]; }; }; getConnectionSpendPolicy: { parameters: { query?: never; header?: never; path: { connectionId: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Effective spend policy (or null) */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { policy?: components["schemas"]["SpendPolicyResponse"] | null; }; }; }; 404: components["responses"]["NotFound"]; }; }; setUserSpendPolicy: { parameters: { query?: never; header?: { /** @description Optional replay protection; same key + body returns cached response (409 on body mismatch). */ "Idempotency-Key"?: string; }; path: { connectionId: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["CreateSpendPolicyRequest"]; }; }; responses: { /** @description Spend policy set (or idempotent replay) */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["SpendPolicyResponse"]; }; }; /** @description Spend policy created */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["SpendPolicyResponse"]; }; }; 400: components["responses"]["BadRequest"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; /** @description Idempotency-Key reused with different body */ 409: { headers: { [name: string]: unknown; }; content?: never; }; }; }; listConnectionApprovals: { parameters: { query?: { status?: string; risk_tier?: number; limit?: number; offset?: number; }; header?: never; path: { connectionId: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Connection-scoped approvals */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ApprovalListResponse"]; }; }; 404: components["responses"]["NotFound"]; }; }; createConnectionApproval: { parameters: { query?: never; header?: never; path: { connectionId: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Approval created */ 201: { headers: { [name: string]: unknown; }; content?: never; }; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; getConnectionApproval: { parameters: { query?: never; header?: never; path: { connectionId: string; approvalId: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Approval detail */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ApprovalResponse"]; }; }; 404: components["responses"]["NotFound"]; }; }; listConnectionPendingApprovals: { parameters: { query?: { status?: string; limit?: number; offset?: number; }; header?: never; path: { connectionId: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Pending approvals list */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PendingApprovalListResponse"]; }; }; 404: components["responses"]["NotFound"]; }; }; createConnectionPendingApproval: { parameters: { query?: never; header?: never; path: { connectionId: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["ConnectionSubmitPendingApprovalRequest"]; }; }; responses: { /** @description Pending approval created */ 202: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["SubmitPendingApprovalResponse"]; }; }; 400: components["responses"]["BadRequest"]; 404: components["responses"]["NotFound"]; }; }; getConnectionPendingApproval: { parameters: { query?: never; header?: never; path: { connectionId: string; approvalId: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Pending approval detail including action_payload and payload_hash */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PendingApprovalResponse"]; }; }; 404: components["responses"]["NotFound"]; }; }; decideConnectionPendingApproval: { parameters: { query?: never; header?: never; path: { connectionId: string; approvalId: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["ApprovePendingApprovalRequest"]; }; }; responses: { /** @description Updated pending approval */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PendingApprovalResponse"]; }; }; 400: components["responses"]["BadRequest"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; /** @description Already voted */ 409: { headers: { [name: string]: unknown; }; content?: never; }; }; }; decideConnectionApproval: { parameters: { query?: never; header?: never; path: { connectionId: string; approvalId: string; }; cookie?: never; }; requestBody: { content: { "application/json": { /** @enum {string} */ decision: "approved" | "rejected" | "approve" | "reject"; reason?: string; }; }; }; responses: { /** @description Decided approval */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ApprovalResponse"]; }; }; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; /** @description Already decided */ 409: { headers: { [name: string]: unknown; }; content?: never; }; }; }; listConnectionSigningKeys: { parameters: { query?: { agent_id?: string; }; header?: never; path: { connectionId: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Signing keys for the connection agent */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ConnectionSigningKeyListResponse"]; }; }; /** @description Multiple agents — agent_id required */ 400: { headers: { [name: string]: unknown; }; content?: never; }; 404: components["responses"]["NotFound"]; }; }; getConnectionSigningKey: { parameters: { query?: { agent_id?: string; }; header?: never; path: { connectionId: string; chain: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Signing key metadata */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ConnectionSigningKeyDetailResponse"]; }; }; /** @description Multiple agents — agent_id required */ 400: { headers: { [name: string]: unknown; }; content?: never; }; 404: components["responses"]["NotFound"]; }; }; deactivateConnectionSigningKey: { parameters: { query?: { agent_id?: string; }; header?: never; path: { connectionId: string; chain: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Key deactivated */ 204: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Multiple agents — agent_id required */ 400: { headers: { [name: string]: unknown; }; content?: never; }; 404: components["responses"]["NotFound"]; }; }; postConnectionAgent: { parameters: { query?: never; header?: never; path: { connectionId: string; agentId: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Agent updated */ 200: { headers: { [name: string]: unknown; }; content?: never; }; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; patchConnectionAgent: { parameters: { query?: never; header?: never; path: { connectionId: string; agentId: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["PatchConnectionAgentRequest"]; }; }; responses: { /** @description Updated agent settings */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PatchConnectionAgentResponse"]; }; }; 400: components["responses"]["BadRequest"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; getConnectionPortfolio: { parameters: { query?: { chains?: string; include_tokens?: boolean; }; header?: never; path: { connectionId: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Connection-scoped portfolio */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PortfolioResponse"]; }; }; 404: components["responses"]["NotFound"]; }; }; getConnectionBalances: { parameters: { query?: { chains?: string; }; header?: never; path: { connectionId: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Connection-scoped portfolio */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PortfolioResponse"]; }; }; }; }; listConnectionAutomations: { parameters: { query?: never; header?: never; path: { connectionId: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Automations scoped to connection agents */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["AutomationListResponse"]; }; }; }; }; createConnectionAutomation: { parameters: { query?: never; header?: never; path: { connectionId: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["CreateAutomationRequest"]; }; }; responses: { /** @description Automation created */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["AutomationCreatedResponse"]; }; }; 403: components["responses"]["Forbidden"]; }; }; cancelConnectionAutomationRun: { parameters: { query?: never; header?: never; path: { connectionId: string; automationId: string; runId: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Run cancelled */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["AutomationRunResponse"]; }; }; 404: components["responses"]["NotFound"]; }; }; getConnectionMemory: { parameters: { query?: { /** * @description Optional only while the connection has exactly one agent. * With more than one it becomes required and the call answers * 400 without it — the Fleet template provisions three. */ agent_id?: string; }; header?: never; path: { connectionId: string; namespace: string; key: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Memory entry */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["MemoryEntry"]; }; }; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; putConnectionMemory: { parameters: { query?: { agent_id?: string; }; header?: never; path: { connectionId: string; namespace: string; key: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["PutMemoryRequest"]; }; }; responses: { /** @description Memory entry stored */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["MemoryEntry"]; }; }; }; }; deleteConnectionMemory: { parameters: { query?: { agent_id?: string; }; header?: never; path: { connectionId: string; namespace: string; key: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Deleted */ 204: { headers: { [name: string]: unknown; }; content?: never; }; 404: components["responses"]["NotFound"]; }; }; createConnectionRuntime: { parameters: { query?: never; header?: never; path: { connectionId: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["CreateConnectionRuntimeRequest"]; }; }; responses: { /** @description Runtime created */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["RuntimeResponse"]; }; }; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; getConnectionRuntime: { parameters: { query?: never; header?: never; path: { connectionId: string; runtimeId: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Runtime details */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["RuntimeResponse"]; }; }; 404: components["responses"]["NotFound"]; }; }; deleteConnectionRuntime: { parameters: { query?: never; header?: never; path: { connectionId: string; runtimeId: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Runtime deleted */ 204: { headers: { [name: string]: unknown; }; content?: never; }; 404: components["responses"]["NotFound"]; }; }; connectionPasskeyEnrollBegin: { parameters: { query?: never; header?: never; path: { connectionId: string; }; cookie?: never; }; requestBody?: never; responses: { /** * @description Always. Platform apps cannot enroll login passkeys for * connected users. */ 403: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ProblemDetails"]; }; }; }; }; connectionPasskeyEnrollComplete: { parameters: { query?: never; header?: never; path: { connectionId: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["PasskeyRegisterCompleteRequest"]; }; }; responses: { /** * @description Always. Platform apps cannot enroll login passkeys for * connected users. */ 403: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ProblemDetails"]; }; }; }; }; listConnectionPasskeys: { parameters: { query?: never; header?: never; path: { connectionId: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Passkey availability for this connection */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { /** @description True when count > 0. */ has_passkey: boolean; /** * Format: int64 * @description Passkeys usable on rp_id. */ count: number; /** * Format: int64 * @description All passkeys on the account, including any * bound to a different domain. */ registered_count: number; /** @description The domain these counts are measured against. */ rp_id: string; }; }; }; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; connectionPasskeyTxAssertBegin: { parameters: { query?: never; header?: never; path: { connectionId: string; }; cookie?: never; }; requestBody: { content: { "application/json": { /** @description SHA-256 hex of the exact text being confirmed. */ tx_digest: string; /** * @default send * @enum {string} */ action?: "send" | "swap"; }; }; }; responses: { /** @description WebAuthn assertion ceremony options */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PasskeyAssertBeginResponse"]; }; }; 400: components["responses"]["BadRequest"]; 403: components["responses"]["Forbidden"]; /** @description This user has no passkey registered. */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ProblemDetails"]; }; }; }; }; connectionPasskeyTxAssertComplete: { parameters: { query?: never; header?: never; path: { connectionId: string; }; cookie?: never; }; requestBody: { content: { "application/json": { credential_id: string; authenticator_data: string; client_data_json: string; signature: string; }; }; }; responses: { /** @description Assertion verified */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { /** * @description Single-use proof of the touch, bound to the * digest and to this user. */ passkey_token: string; /** @description Seconds until the token expires. */ expires_in: number; }; }; }; 400: components["responses"]["BadRequest"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; connectionAgentChat: { parameters: { query?: never; header?: never; path: { connectionId: string; agentId: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["SendChatMessageRequest"]; }; }; responses: { /** @description Message sent (JSON or SSE stream) */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Payment required (LLM billing / inference allowance) */ 402: { headers: { [name: string]: unknown; }; content?: never; }; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; listApprovals: { parameters: { query?: { /** @description Filter by approval status */ status?: "pending" | "approved" | "rejected" | "expired" | "cancelled"; limit?: number; offset?: number; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Approval list */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { approvals: components["schemas"]["ApprovalResponse"][]; }; }; }; }; }; getApproval: { parameters: { query?: never; header?: never; path: { approval_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Approval details */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ApprovalResponse"]; }; }; 404: components["responses"]["NotFound"]; }; }; cancelApproval: { parameters: { query?: never; header?: never; path: { approval_id: string; }; cookie?: never; }; requestBody?: { content: { "application/json": { reason?: string; }; }; }; responses: { /** @description The approval — `cancelled`, or the decision that landed first */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ApprovalResponse"]; }; }; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; getApprovalStatus: { parameters: { query?: never; header?: never; path: { approval_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Approval status */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ApprovalStatusResponse"]; }; }; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; decideApproval: { parameters: { query?: never; header?: never; path: { approval_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["DecideApprovalRequest"]; }; }; responses: { /** @description Decision recorded */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ApprovalResponse"]; }; }; 400: components["responses"]["BadRequest"]; 404: components["responses"]["NotFound"]; 409: components["responses"]["Conflict"]; }; }; quickDecideApproval: { parameters: { query: { token: string; decision: "approved" | "rejected"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Redirect to dashboard confirmation page */ 302: { headers: { [name: string]: unknown; }; content?: never; }; 400: components["responses"]["BadRequest"]; 404: components["responses"]["NotFound"]; 409: components["responses"]["Conflict"]; }; }; quickDecide: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": { token: string; /** @enum {string} */ decision: "approve" | "deny"; }; }; }; responses: { /** @description Decision recorded */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Malformed or expired token */ 400: { headers: { [name: string]: unknown; }; content?: never; }; 404: components["responses"]["NotFound"]; }; }; listDepositDestinations: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description List of destinations */ 200: { headers: { [name: string]: unknown; }; content?: never; }; }; }; createDepositDestination: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": { chain: string; label?: string; /** Format: uuid */ treasury_wallet_id?: string; }; }; }; responses: { /** @description Destination created */ 201: { headers: { [name: string]: unknown; }; content?: never; }; 401: components["responses"]["Unauthorized"]; }; }; getDepositDestination: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Destination detail with events */ 200: { headers: { [name: string]: unknown; }; content?: never; }; }; }; updateDepositDestination: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody: { content: { "application/json": { /** @enum {string} */ status?: "active" | "paused" | "archived"; }; }; }; responses: { /** @description Updated destination */ 200: { headers: { [name: string]: unknown; }; content?: never; }; }; }; listInternalAccounts: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Account list with balances */ 200: { headers: { [name: string]: unknown; }; content?: never; }; }; }; createInternalAccount: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": { name: string; description?: string; }; }; }; responses: { /** @description Account created */ 201: { headers: { [name: string]: unknown; }; content?: never; }; }; }; getInternalAccount: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Account detail */ 200: { headers: { [name: string]: unknown; }; content?: never; }; }; }; getInternalAccountLedger: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Ledger entries */ 200: { headers: { [name: string]: unknown; }; content?: never; }; }; }; createInternalTransfer: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": { /** Format: uuid */ from_account_id: string; /** Format: uuid */ to_account_id: string; asset: string; amount: string; memo?: string; }; }; }; responses: { /** @description Transfer completed */ 201: { headers: { [name: string]: unknown; }; content?: never; }; }; }; createFiatOnrampSession: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Onramp widget URL */ 201: { headers: { [name: string]: unknown; }; content?: never; }; }; }; initiateFiatOfframp: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Offramp widget URL */ 201: { headers: { [name: string]: unknown; }; content?: never; }; }; }; socialLogin: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": { /** @enum {string} */ provider: "google" | "apple" | "discord"; /** @description Google/Apple ID token, or Discord OAuth authorization code */ id_token: string; /** @description Required for Discord — must match the redirect URI used in the OAuth flow */ oauth_redirect_uri?: string; auto_provision_chains?: string[]; }; }; }; responses: { /** @description Login successful */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description New user created */ 201: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Invalid or unverified token */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Email already registered (no auto-linking) */ 409: { headers: { [name: string]: unknown; }; content?: never; }; }; }; passkeyTxAssertBegin: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["PasskeyTxAssertBeginRequest"]; }; }; responses: { /** @description WebAuthn challenge */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PasskeyAssertBeginResponse"]; }; }; /** @description Missing or invalid tx_digest, or invalid action */ 400: { headers: { [name: string]: unknown; }; content?: never; }; 403: components["responses"]["Forbidden"]; /** @description No passkeys registered for the user */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; passkeyTxAssertComplete: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Passkey token for X-Passkey-Token header */ 200: { headers: { [name: string]: unknown; }; content?: never; }; }; }; sendEmailOtp: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": { /** Format: email */ email: string; /** * Format: uuid * @description Optional platform app context for embedded wallet flows */ platform_app_id?: string; }; }; }; responses: { /** @description OTP sent */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { /** @enum {string} */ status?: "sent"; }; }; }; /** @description Rate limited */ 429: { headers: { [name: string]: unknown; }; content?: never; }; }; }; verifyEmailOtp: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": { /** Format: email */ email: string; /** @description 6-digit OTP code */ code: string; /** Format: uuid */ platform_app_id?: string; /** @description Chains to auto-generate wallets for (e.g. ["ethereum", "base"]) */ auto_provision_chains?: string[]; /** * @description Opt in to creating an account when the address is not * recognized. Without it an unknown address is rejected * rather than silently given a new user and org — a valid * code proves control of an inbox, not consent to sign up. * Not required when `platform_app_id` is present: creating * the end user on first login is the embedded-wallet flow. * @default false */ allow_signup?: boolean; }; }; }; responses: { /** @description Existing user authenticated */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["EmailOtpVerifyResponse"]; }; }; /** @description New user created and authenticated */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["EmailOtpVerifyResponse"]; }; }; /** @description Invalid or expired code */ 400: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Rate limited */ 429: { headers: { [name: string]: unknown; }; content?: never; }; }; }; getOAuthConsent: { parameters: { query: { /** @description Platform app slug */ client_id: string; redirect_uri: string; response_type: "code"; /** @description Space-delimited scopes (e.g. "openid email wallet") */ scope?: string; state?: string; /** @description PKCE code challenge */ code_challenge?: string; /** @description Only S256 is supported (PKCE is mandatory for code grants) */ code_challenge_method?: "S256"; /** @description OIDC nonce for ID token replay protection */ nonce?: string; /** @description Pre-fill the email field on the consent page */ login_hint?: string; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Consent screen data */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["OAuthConsentResponse"]; }; }; /** @description Invalid client_id, redirect_uri, or response_type */ 400: { headers: { [name: string]: unknown; }; content?: never; }; }; }; submitOAuthConsent: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": { approve: boolean; client_id: string; /** Format: uri */ redirect_uri: string; scope?: string; state?: string; code_challenge?: string; /** @enum {string} */ code_challenge_method?: "S256"; nonce?: string; }; }; }; responses: { /** @description Redirect URL with authorization code or error */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { /** Format: uri */ redirect_url: string; }; }; }; /** @description Invalid request */ 400: { headers: { [name: string]: unknown; }; content?: never; }; }; }; x402Topup: { parameters: { query?: never; header?: { /** @description Base64 x402 payment payload (EIP-3009 USDC authorization on Base) */ "X-PAYMENT"?: string; }; path?: never; cookie?: never; }; requestBody?: { content: { "application/json": { /** @description Whole dollars to add to the ledger (default 1) */ amount_usd?: number; }; }; }; responses: { /** @description Credited */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["X402TopupResponse"]; }; }; /** @description Payment required — the quote to sign, or why the payment was refused */ 402: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PaymentRequirement"]; }; }; /** @description The wallet is sanctioned or the region is fenced; no account is opened */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description The sanctions list is unavailable (fails closed) */ 503: { headers: { [name: string]: unknown; }; content?: never; }; }; }; exchangeOAuthToken: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": { /** @enum {string} */ grant_type: "authorization_code"; code: string; client_id: string; /** Format: uri */ redirect_uri: string; /** @description PKCE code verifier (required — PKCE S256 is mandatory for all code grants) */ code_verifier?: string; }; }; }; responses: { /** @description Token response */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["OAuthTokenResponse"]; }; }; /** @description Invalid grant, code, or verifier */ 400: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Invalid client credentials */ 401: { headers: { [name: string]: unknown; }; content?: never; }; }; }; getOAuthUserInfo: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description User info */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["OAuthUserInfoResponse"]; }; }; 401: components["responses"]["Unauthorized"]; }; }; revokeOAuthToken: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": { /** @description The token to revoke (access_token or refresh_token) */ token: string; /** * @description Hint about the type of token being revoked * @enum {string} */ token_type_hint?: "access_token" | "refresh_token"; }; }; }; responses: { /** @description Token revoked successfully (or was already invalid) */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { /** @example true */ revoked?: boolean; }; }; }; }; }; revokeOAuthConsent: { parameters: { query?: never; header?: never; path: { /** @description The platform app ID whose consent to revoke */ app_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Consent revoked */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { /** @example true */ revoked?: boolean; /** Format: uuid */ app_id?: string; }; }; }; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; }; }; listRiskEvents: { parameters: { query?: { /** @description Filter events by severity level */ severity?: "low" | "medium" | "high" | "critical"; /** @description Filter events by principal type */ principal_type?: "user" | "agent"; limit?: number; offset?: number; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Risk event list */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["RiskEventListResponse"]; }; }; 401: components["responses"]["Unauthorized"]; }; }; listRiskVerdicts: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Verdict list */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["RiskVerdictListResponse"]; }; }; 401: components["responses"]["Unauthorized"]; }; }; getRiskVerdict: { parameters: { query?: never; header?: never; path: { principal_type: "user" | "agent"; principal_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Risk verdict (null if no verdict exists) */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { verdict?: components["schemas"]["RiskVerdict"]; }; }; }; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; }; }; listHoneytokens: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Honeytoken list */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["HoneytokenListResponse"]; }; }; 401: components["responses"]["Unauthorized"]; }; }; createHoneytoken: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["CreateHoneytokenRequest"]; }; }; responses: { /** @description Honeytoken created */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": { honeytoken?: components["schemas"]["Honeytoken"]; }; }; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; }; }; deleteHoneytoken: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Honeytoken deleted */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { deleted?: boolean; }; }; }; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; }; }; listKnownTokens: { parameters: { query?: { /** @description Filter by chain name */ chain?: string; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Token list */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["KnownTokenListResponse"]; }; }; }; }; listTokensByChain: { parameters: { query?: never; header?: never; path: { chain_name: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Token list for chain */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["KnownTokenListResponse"]; }; }; }; }; createKnownToken: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["CreateKnownTokenRequest"]; }; }; responses: { /** @description Token created */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["KnownToken"]; }; }; 403: components["responses"]["Forbidden"]; }; }; deleteKnownToken: { parameters: { query?: never; header?: never; path: { token_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Token deleted */ 204: { headers: { [name: string]: unknown; }; content?: never; }; 403: components["responses"]["Forbidden"]; }; }; updatePaySettings: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["UpdatePayGuardrailsRequest"]; }; }; responses: { /** @description Updated guardrails */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not a human caller */ 403: { headers: { [name: string]: unknown; }; content?: never; }; }; }; preparePayment: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["PayPrepareRequest"]; }; }; responses: { /** @description Session created; digest and quote returned */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PayPrepareResponse"]; }; }; /** @description Not a usable 402 challenge */ 400: { headers: { [name: string]: unknown; }; content?: never; }; /** @description pay is not enabled for this agent */ 403: { headers: { [name: string]: unknown; }; content?: never; }; }; }; signPayment: { parameters: { query?: never; header?: { /** @description A passkey assertion bound to this payment's digest, when required. */ "X-Passkey-Token"?: string; }; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["PaySignRequest"]; }; }; responses: { /** @description Signed; payment header returned */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PaySignResponse"]; }; }; /** @description Policy refused */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description ChallengeExpired. Re-fetch the resource for a fresh 402 and prepare again — re-preparing from the stored bytes would reproduce the same expired window. */ 409: { headers: { [name: string]: unknown; }; content?: never; }; }; }; preparePayGrant: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody: { content: { "application/json": { cap_usd: string; ttl_secs: number; allowed_paytos?: string[] | null; }; }; }; responses: { /** @description The digest to assert over */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { grant_digest: string; /** @enum {string} */ action: "x402_grant"; expires_in_secs: number; }; }; }; /** @description Invalid terms */ 400: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not a human caller */ 403: { headers: { [name: string]: unknown; }; content?: never; }; }; }; createPayGrant: { parameters: { query?: never; header: { "X-Passkey-Token": string; }; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["CreatePayGrantRequest"]; }; }; responses: { /** @description Grant created */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not a human caller */ 403: { headers: { [name: string]: unknown; }; content?: never; }; }; }; reportPaymentResult: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; payment_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["PayResultRequest"]; }; }; responses: { /** @description Outcome recorded */ 200: { headers: { [name: string]: unknown; }; content?: never; }; }; }; getPayment: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; payment_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Payment status */ 200: { headers: { [name: string]: unknown; }; content?: never; }; }; }; getPaySession: { parameters: { query?: never; header?: never; path: { session_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Quote and status */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not a human caller */ 403: { headers: { [name: string]: unknown; }; content?: never; }; }; }; authorizePaySession: { parameters: { query?: never; header: { "X-Passkey-Token": string; }; path: { session_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Session authorized */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not a human caller, the session belongs to someone else, or the assertion does not authorize this payment. */ 403: { headers: { [name: string]: unknown; }; content?: never; }; }; }; revokePayGrant: { parameters: { query?: never; header?: never; path: { grant_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Revoked */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; orderCard: { parameters: { query?: never; header: { "Idempotency-Key": string; }; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["OrderCardRequest"]; }; }; responses: { /** @description Idempotent replay of a prior order */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["CardResponse"]; }; }; /** @description Card order accepted and payment submitted (status pending) */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["CardResponse"]; }; }; /** @description Card order queued for human approval (status awaiting_approval) */ 202: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["CardResponse"]; }; }; 400: components["responses"]["BadRequest"]; 403: components["responses"]["Forbidden"]; 409: components["responses"]["Conflict"]; }; }; listCards: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Card list */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["CardListResponse"]; }; }; }; }; importCard: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["ImportCardRequest"]; }; }; responses: { /** @description Card imported */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["CardResponse"]; }; }; 400: components["responses"]["BadRequest"]; 403: components["responses"]["Forbidden"]; }; }; searchGiftCards: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: { content: { "application/json": components["schemas"]["SearchGiftCardsRequest"]; }; }; responses: { /** @description Available gift-card brands (provider-shaped payload) */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { [key: string]: unknown; }; }; }; }; }; getCard: { parameters: { query?: never; header?: never; path: { card_id: components["parameters"]["CardId"]; }; cookie?: never; }; requestBody?: never; responses: { /** @description Card details */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["CardResponse"]; }; }; 404: components["responses"]["NotFound"]; }; }; updateCard: { parameters: { query?: never; header?: never; path: { card_id: components["parameters"]["CardId"]; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["UpdateCardRequest"]; }; }; responses: { /** @description Card updated */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["CardResponse"]; }; }; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; revealCard: { parameters: { query?: never; header?: { /** @description Account password (humans) for re-authentication. */ "X-Auth-Confirm"?: string; }; path: { card_id: components["parameters"]["CardId"]; }; cookie?: never; }; requestBody?: never; responses: { /** @description Revealed card details (sensitive) */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["CardRevealResponse"]; }; }; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; voidCard: { parameters: { query?: never; header?: never; path: { card_id: components["parameters"]["CardId"]; }; cookie?: never; }; requestBody?: never; responses: { /** @description Card voided */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["CardResponse"]; }; }; 404: components["responses"]["NotFound"]; }; }; refreshCard: { parameters: { query?: never; header?: never; path: { card_id: components["parameters"]["CardId"]; }; cookie?: never; }; requestBody?: never; responses: { /** @description Card refreshed */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["CardResponse"]; }; }; 404: components["responses"]["NotFound"]; /** @description Refreshed too recently */ 429: { headers: { [name: string]: unknown; }; content?: never; }; }; }; listAutomations: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Automation list */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["AutomationListResponse"]; }; }; 401: components["responses"]["Unauthorized"]; }; }; createAutomation: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["CreateAutomationRequest"]; }; }; responses: { /** @description Automation created (includes one-time webhook credentials when trigger_type is webhook) */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["AutomationCreatedResponse"]; }; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; }; }; getAutomation: { parameters: { query?: never; header?: never; path: { automationId: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Automation details */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["AutomationResponse"]; }; }; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; }; }; deleteAutomation: { parameters: { query?: never; header?: never; path: { automationId: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Automation deleted */ 204: { headers: { [name: string]: unknown; }; content?: never; }; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; }; }; updateAutomation: { parameters: { query?: never; header?: never; path: { automationId: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["UpdateAutomationRequest"]; }; }; responses: { /** @description Automation updated */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["AutomationResponse"]; }; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; }; }; triggerAutomation: { parameters: { query?: never; header?: never; path: { automationId: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Automation triggered */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["AutomationRunResponse"]; }; }; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; }; }; listAutomationRuns: { parameters: { query?: { limit?: number; offset?: number; }; header?: never; path: { automationId: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Automation run list */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["AutomationRunListResponse"]; }; }; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; }; }; getAutomationRun: { parameters: { query?: never; header?: never; path: { automationId: string; runId: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Automation run detail */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["AutomationRunResponse"]; }; }; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; }; }; assistDraftAutomation: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": { message: string; /** Format: uuid */ agent_id?: string; timezone?: string; }; }; }; responses: { /** @description Reviewable automation draft */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["AssistDraftResponse"]; }; }; 401: components["responses"]["Unauthorized"]; }; }; assistAutomationSession: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: { content: { "application/json": { /** Format: uuid */ runtime_id?: string; }; }; }; responses: { /** @description Assist session token */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["AssistSessionResponse"]; }; }; 401: components["responses"]["Unauthorized"]; }; }; webhookTriggerAutomation: { parameters: { query?: never; header?: never; path: { automationId: string; token: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Automation run queued */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["AutomationRunResponse"]; }; }; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; }; }; rotateAutomationWebhookToken: { parameters: { query?: never; header?: never; path: { automationId: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description New one-time webhook URL and token */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["WebhookTokenRotatedResponse"]; }; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; }; }; cancelAutomationRun: { parameters: { query?: never; header?: never; path: { automationId: string; runId: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Run cancelled */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["AutomationRunResponse"]; }; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; }; }; resumeAutomationRun: { parameters: { query?: never; header?: never; path: { automationId: string; runId: string; }; cookie?: never; }; requestBody?: { content: { "application/json": { /** @description Exposed to later steps as `{{resume.*}}`. */ payload?: Record; }; }; }; responses: { /** @description The run, now running (or unchanged if it was not parked) */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["AutomationRunResponse"]; }; }; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; listAutomationPresets: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Automation preset list */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["AutomationPresetsResponse"]; }; }; }; }; createAgentAutomation: { parameters: { query?: never; header?: never; path: { agent_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["AgentCreateAutomationRequest"]; }; }; responses: { /** @description Automation created (includes one-time webhook credentials when trigger_type is webhook) */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["AutomationCreatedResponse"]; }; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; listRuntimes: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Runtime list */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["RuntimeListResponse"]; }; }; 401: components["responses"]["Unauthorized"]; }; }; createRuntime: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["CreateRuntimeRequest"]; }; }; responses: { /** @description Runtime created */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["RuntimeResponse"]; }; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; }; }; getRuntime: { parameters: { query?: never; header?: never; path: { runtimeId: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Runtime details */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["RuntimeResponse"]; }; }; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; }; }; deleteRuntime: { parameters: { query?: never; header?: never; path: { runtimeId: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Runtime deleted */ 204: { headers: { [name: string]: unknown; }; content?: never; }; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; }; }; updateRuntime: { parameters: { query?: never; header?: never; path: { runtimeId: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["UpdateRuntimeRequest"]; }; }; responses: { /** @description Runtime updated */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["RuntimeResponse"]; }; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; }; }; startRuntime: { parameters: { query?: never; header?: never; path: { runtimeId: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Runtime started */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["RuntimeResponse"]; }; }; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; }; }; stopRuntime: { parameters: { query?: never; header?: never; path: { runtimeId: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Runtime stopped */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["RuntimeResponse"]; }; }; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; }; }; getRuntimeLogs: { parameters: { query?: { /** @description Number of recent log lines to return */ tail?: number; }; header?: never; path: { runtimeId: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Runtime logs */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { entries: { /** Format: date-time */ timestamp?: string; message: string; level?: string; }[]; }; }; }; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; }; }; checkSlugAvailability: { parameters: { query?: never; header?: never; path: { slug: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Slug availability result */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["SlugCheckResponse"]; }; }; 401: components["responses"]["Unauthorized"]; }; }; createShellSession: { parameters: { query?: never; header?: never; path: { runtimeId: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["ShellSessionRequest"]; }; }; responses: { /** @description Shell session created */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ShellSessionResponse"]; }; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; beginShellPasskey: { parameters: { query?: never; header?: never; path: { runtimeId: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Passkey challenge for shell session */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { [key: string]: unknown; }; }; }; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; runtimeChat: { parameters: { query?: never; header?: never; path: { runtimeId: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["RuntimeChatRequest"]; }; }; responses: { /** @description Chat completion (JSON) or SSE stream */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { [key: string]: unknown; }; "text/event-stream": string; }; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; /** * @description The runtime's last start failed less than 120 seconds ago and is not * being retried yet. Chat starts a stopped runtime, so a client that * retries on failure turns every attempt into another deploy — one * polling client did exactly that every 8 seconds for days. Wait out * the cooldown, or call the start endpoint to see the underlying error. */ 503: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ProblemDetails"]; }; }; }; }; listMemoryNamespaces: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody?: never; responses: { /** @description Namespace list */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["MemoryNamespaceListResponse"]; }; }; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; }; }; listMemoryEntries: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; namespace: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Memory entries */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["MemoryEntryListResponse"]; }; }; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; }; }; deleteMemoryNamespace: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; namespace: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Namespace deleted */ 204: { headers: { [name: string]: unknown; }; content?: never; }; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; }; }; getMemoryEntry: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; namespace: string; key: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Memory entry */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["MemoryEntry"]; }; }; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; }; }; putMemoryEntry: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; namespace: string; key: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["PutMemoryRequest"]; }; }; responses: { /** @description Memory entry stored */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["MemoryEntry"]; }; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; }; }; deleteMemoryEntry: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; namespace: string; key: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Memory entry deleted */ 204: { headers: { [name: string]: unknown; }; content?: never; }; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; }; }; searchMemory: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["MemorySearchRequest"]; }; }; responses: { /** @description Search results */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["MemorySearchResponse"]; }; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; }; }; getAgentCard: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody?: never; responses: { /** @description Agent card */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["AgentCardResponse"]; }; }; 404: components["responses"]["NotFound"]; }; }; listDirectory: { parameters: { query?: { page?: number; per_page?: number; /** @description Comma-separated tag filter */ tags?: string; /** @description Search query */ q?: string; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Directory listing */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["DirectoryResponse"]; }; }; }; }; listOrgDirectory: { parameters: { query?: { /** @description Search query to filter agents by name or description */ q?: string; /** @description Comma-separated tag filter */ tags?: string; page?: number; page_size?: number; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Org agent directory listing */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["OrgDirectoryResponse"]; }; }; 401: components["responses"]["Unauthorized"]; }; }; updateDiscoverySettings: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["UpdateDiscoveryRequest"]; }; }; responses: { /** @description Discovery settings updated */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["AgentCardResponse"]; }; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; }; }; listMarketplace: { parameters: { query?: { page?: number; per_page?: number; /** @description Search query */ q?: string; /** @description Filter by app category */ category?: string; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Marketplace listing */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["MarketplaceResponse"]; }; }; }; }; sendChatMessage: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["SendChatMessageRequest"]; }; }; responses: { /** @description Chat response */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["SendChatMessageResponse"]; "text/event-stream": string; }; }; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; }; }; listChatConversations: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody?: never; responses: { /** @description Conversation list */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ChatConversationListResponse"]; }; }; 401: components["responses"]["Unauthorized"]; }; }; getChatConversation: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; conversation_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Conversation detail */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ConversationDetailResponse"]; }; }; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; }; }; deleteChatConversation: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; conversation_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Conversation archived */ 204: { headers: { [name: string]: unknown; }; content?: never; }; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; }; }; listChannels: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody?: never; responses: { /** @description Channel list */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ChannelListResponse"]; }; }; 401: components["responses"]["Unauthorized"]; }; }; createChannel: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["CreateChannelRequest"]; }; }; responses: { /** @description Channel created */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ChannelResponse"]; }; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; }; }; deleteChannel: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; channel_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Channel deleted */ 204: { headers: { [name: string]: unknown; }; content?: never; }; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; updateChannel: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; channel_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["UpdateChannelRequest"]; }; }; responses: { /** @description Channel updated */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ChannelResponse"]; }; }; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; sendChannelMessage: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; channel_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["SendChannelMessageRequest"]; }; }; responses: { /** @description Message sent */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ChannelMessageResponse"]; }; }; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; }; }; listChannelMessages: { parameters: { query?: { limit?: number; }; header?: never; path: { agent_id: components["parameters"]["AgentId"]; channel_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Message list */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ChannelMessageListResponse"]; }; }; 401: components["responses"]["Unauthorized"]; }; }; testChannel: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; channel_id: string; }; cookie?: never; }; requestBody?: { content: { "application/json": { /** @description Optional chat ID to send the test message to */ external_chat_id?: string; /** @description Optional custom test message content */ content?: string; }; }; }; responses: { /** @description Test result */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { success?: boolean; message?: string | null; error?: string | null; }; }; }; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; }; }; telegramWebhook: { parameters: { query?: never; header?: never; path: { webhook_path: string; }; cookie?: never; }; requestBody: { content: { "application/json": Record; }; }; responses: { /** @description Webhook processed */ 200: { headers: { [name: string]: unknown; }; content?: never; }; }; }; whatsappWebhookVerify: { parameters: { query?: { "hub.mode"?: string; "hub.verify_token"?: string; "hub.challenge"?: string; }; header?: never; path: { webhook_path: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Challenge response */ 200: { headers: { [name: string]: unknown; }; content?: never; }; }; }; whatsappWebhook: { parameters: { query?: never; header?: never; path: { webhook_path: string; }; cookie?: never; }; requestBody: { content: { "application/json": Record; }; }; responses: { /** @description Webhook processed */ 200: { headers: { [name: string]: unknown; }; content?: never; }; }; }; getAppUsage: { parameters: { query?: never; header?: never; path: { app_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Usage report */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["AppUsageReport"]; }; }; 404: components["responses"]["NotFound"]; }; }; exportAppUsage: { parameters: { query?: never; header?: never; path: { app_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description CSV */ 200: { headers: { [name: string]: unknown; }; content: { "text/csv": string; }; }; 404: components["responses"]["NotFound"]; }; }; applyChart: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": { /** @description A chart document — `apiVersion`, `kind`, `metadata`, `spec`. */ chart: Record; applied_state?: { [key: string]: unknown; }; }; }; }; responses: { /** @description What happened to each resource */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { chart_name?: string; resources?: { kind?: string; name?: string; /** @enum {string} */ result?: "created" | "patched" | "unchanged" | "skipped" | "refused" | "awaiting_approval" | "failed"; /** Format: uuid */ id?: string; detail?: string; /** @description Connectors only — where a person signs in to finish the install. */ authorization_url?: string; }[]; warnings?: string[]; /** @description Save to `.1claw/apply-state.json`. */ applied_state?: { [key: string]: unknown; }; /** @description The chart is not fully applied — something is waiting on a person. */ needs_attention?: boolean; }; }; }; 400: components["responses"]["BadRequest"]; 403: components["responses"]["Forbidden"]; }; }; getApprovalLearningShadowReport: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Report */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { /** @enum {string} */ mode?: "shadow" | "enforce"; /** @description Consecutive approvals in one bucket before it appears here. */ threshold?: number; can_promote?: boolean; observed_buckets?: number; total_decisions?: number; suggestions?: { /** Format: uuid */ profile_id?: string; action_type?: string; /** @example refund.create|0-10|known|a@b.co */ fingerprint_bucket?: string; consecutive_approvals?: number; total_requests?: number; would_write_rule?: Record | null; /** @description Present when a bound prevents promotion, saying which. */ blocked?: string; /** Format: date-time */ last_decision_at?: string; }[]; }; }; }; 403: components["responses"]["Forbidden"]; }; }; promoteApprovalLearningProfile: { parameters: { query?: never; header?: never; path: { profile_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": { /** Format: uuid */ agent_id: string; /** @default false */ widen_to_action_type?: boolean; }; }; }; responses: { /** @description Promoted */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { /** Format: uuid */ profile_id?: string; /** Format: uuid */ agent_id?: string; rule?: Record; }; }; }; 400: components["responses"]["BadRequest"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; 409: components["responses"]["Conflict"]; }; }; listPolicyPresets: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Catalogue */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { presets?: Record[]; }; }; }; }; }; previewPolicyPreset: { parameters: { query?: never; header?: never; path: { agent_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": { /** @example small-business-spender */ preset: string; }; }; }; responses: { /** @description Proposal */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { preset_slug?: string; guardrails?: Record; action_approval_policy?: Record; access_policy?: Record; /** @description Fields this preset would loosen. Show these, not a generic warning. */ widens?: string[]; requires_guardrail_approval?: boolean; explanation?: string; }; }; }; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; listDirectoryJobs: { parameters: { query?: { /** @description Comma-separated. */ tags?: string; q?: string; limit?: number; offset?: number; mine?: boolean; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Jobs */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { jobs?: components["schemas"]["DirectoryJob"][]; count?: number; }; }; }; 401: components["responses"]["Unauthorized"]; }; }; createDirectoryJob: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": { title: string; description: string; tags?: string[]; required_capabilities?: string[]; /** @description { "amount": "10", "currency": "USD" } — optional. */ budget?: Record; /** Format: date-time */ deadline_at?: string; }; }; }; responses: { /** @description Job posted */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["DirectoryJob"]; }; }; /** @description Content refused by inspection, or the open-job limit reached */ 400: { headers: { [name: string]: unknown; }; content?: never; }; }; }; getDirectoryJob: { parameters: { query?: never; header?: never; path: { job_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Job */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["DirectoryJob"]; }; }; 404: components["responses"]["NotFound"]; }; }; listDirectoryJobBids: { parameters: { query?: never; header?: never; path: { job_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Bids */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { bids?: components["schemas"]["DirectoryJobBid"][]; count?: number; }; }; }; 403: components["responses"]["Forbidden"]; }; }; createDirectoryJobBid: { parameters: { query?: never; header?: never; path: { job_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": { summary: string; proposed_cost?: Record; estimated_duration_mins?: number; a2a_task_ref?: Record; }; }; }; responses: { /** @description Bid placed */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["DirectoryJobBid"]; }; }; /** @description Not an agent, or the agent is not discoverable */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description The job is not open */ 409: { headers: { [name: string]: unknown; }; content?: never; }; }; }; acceptDirectoryJobBid: { parameters: { query?: never; header?: never; path: { job_id: string; bid_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Awarded */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { /** Format: uuid */ job_id?: string; /** Format: uuid */ awarded_bid_id?: string; /** Format: uuid */ awarded_agent_id?: string; a2a_handoff?: Record; next_step?: string; }; }; }; /** @description The job is no longer open */ 409: { headers: { [name: string]: unknown; }; content?: never; }; }; }; cancelDirectoryJob: { parameters: { query?: never; header?: never; path: { job_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Cancelled */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description A job in this status cannot be cancelled */ 409: { headers: { [name: string]: unknown; }; content?: never; }; }; }; completeDirectoryJob: { parameters: { query?: never; header?: never; path: { job_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Completed */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Only an awarded job can be completed */ 409: { headers: { [name: string]: unknown; }; content?: never; }; }; }; exportPolicyPresetCedar: { parameters: { query?: never; header?: never; path: { agent_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": { /** @example treasury-operator */ preset: string; }; }; }; responses: { /** @description Generated Cedar plus the limits it cannot carry */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { preset?: string; /** Format: uuid */ agent_id?: string; /** @description Cedar text, validated against the deployed schema. */ cedar?: string; /** @description Limits Cedar cannot express, still enforced by guardrails. Show these next to the text. */ residual_guardrails?: string[]; /** @enum {string} */ enforcement_mode?: "shadow"; /** @description Intermediate representation, so a caller can render a different policy backend without re-deriving the preset. */ ir?: { preset_slug?: string; permit_actions?: string[]; forbid_actions?: string[]; secret_paths?: string[]; residual_guardrails?: string[]; }; }; }; }; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; applyPolicyPreset: { parameters: { query?: never; header?: never; path: { agent_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": { preset: string; /** Format: uuid */ approval_id?: string; }; }; }; responses: { /** @description Applied */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Queued behind a guardrail approval */ 202: { headers: { [name: string]: unknown; }; content?: never; }; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; getAgentTrust: { parameters: { query?: never; header?: never; path: { agent_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Trust signals */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { trust?: { /** @enum {string} */ tier?: "unverified" | "platform_reviewed" | "identity_verified" | "enterprise"; install_count?: number; avg_rating?: number | null; review_count?: number; badges?: string[]; flagged_for_review?: boolean; }; }; }; }; 404: components["responses"]["NotFound"]; }; }; reportAgent: { parameters: { query?: never; header?: never; path: { agent_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": { reason?: string; }; }; }; responses: { /** @description Received */ 202: { headers: { [name: string]: unknown; }; content?: never; }; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; reviewAgent: { parameters: { query?: never; header?: never; path: { agent_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": { rating: number; comment?: string; }; }; }; responses: { /** @description Recorded */ 201: { headers: { [name: string]: unknown; }; content?: never; }; 400: components["responses"]["BadRequest"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; createPeer: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": { /** @enum {string} */ peer_type: "user" | "platform_connection" | "external"; peer_ref: string; display_name?: string; /** Format: uuid */ platform_connection_id?: string; /** @description Empty means nobody. A peer with no observers is readable by no agent. */ observer_agent_ids?: string[]; }; }; }; responses: { /** @description Peer created or updated */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": { peer?: components["schemas"]["Peer"]; }; }; }; 400: components["responses"]["BadRequest"]; 403: components["responses"]["Forbidden"]; }; }; exportPeerData: { parameters: { query?: never; header?: never; path: { peer_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Export */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { peer?: Record; facts?: { fact_key?: string; fact_value?: Record; confidence?: string | null; why_we_believe_this?: Record[]; corrected_by_a_human?: boolean; }[]; raw_observations?: Record[]; note?: string; }; }; }; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; deletePeerData: { parameters: { query?: never; header?: never; path: { peer_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Deleted */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { deleted?: boolean; facts_deleted?: number; observations_deleted?: number; }; }; }; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; editPeerFact: { parameters: { query?: never; header?: never; path: { peer_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": { fact_key: string; fact_value: Record; }; }; }; responses: { /** @description Corrected */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { fact_key?: string; edited_by_human?: boolean; note?: string; }; }; }; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; getPeerContext: { parameters: { query?: { /** @description Characters. Default 2000, capped at 8000. */ budget?: number; }; header?: never; path: { peer_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Context */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { context?: string; characters?: number; budget?: number; facts_available?: number; }; }; }; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; getAgentPeerContext: { parameters: { query?: { budget?: number; }; header?: never; path: { agent_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Context */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { /** Format: uuid */ peer_id?: string; context?: string; characters?: number; }; }; }; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; getPeer: { parameters: { query?: never; header?: never; path: { peer_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Peer and facts */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { peer?: components["schemas"]["Peer"]; facts?: components["schemas"]["PeerFact"][]; }; }; }; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; recordPeerEvent: { parameters: { query?: never; header?: never; path: { peer_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": { /** @enum {string} */ event_type: "message" | "approval" | "action" | "observation"; content: { [key: string]: unknown; }; }; }; }; responses: { /** @description Recorded */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": { /** Format: uuid */ event_id?: string; }; }; }; 400: components["responses"]["BadRequest"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; predictApproval: { parameters: { query?: never; header?: never; path: { peer_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": { /** @example refund.create */ action_type: string; payload?: { [key: string]: unknown; }; effective_risk_tier: number; }; }; }; responses: { /** @description Prediction */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { /** @description Absent when there is no comparable history. */ likelihood?: number | null; reasoning: string; /** @description Whether the operator's own policy already permits this. */ suggest_auto: boolean; /** @enum {string} */ blocked_reason?: "no_matching_rule" | "rule_requires_approval" | "above_configured_threshold" | "risk_tier_requires_step_up" | "action_is_sensitive"; }; }; }; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; getPeerByConnection: { parameters: { query?: never; header?: never; path: { connection_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Peer */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { peer?: components["schemas"]["Peer"]; }; }; }; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; diffChart: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": { /** @description A chart document — `apiVersion`, `kind`, `metadata`, `spec`. */ chart: Record; /** @description What a previous apply recorded, keyed `kind/name`. */ applied_state?: { [key: string]: unknown; }; }; }; }; responses: { /** @description The plan */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { chart_name?: string; actions?: Record[]; warnings?: string[]; summary?: { create?: number; patch?: number; skipped_drifted?: number; unchanged?: number; refused?: number; no_changes?: boolean; }; }; }; }; 400: components["responses"]["BadRequest"]; 403: components["responses"]["Forbidden"]; }; }; listNotificationTargets: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Your targets */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { targets?: components["schemas"]["NotificationTarget"][]; }; }; }; }; }; createNotificationTarget: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": { /** @enum {string} */ target_type: "sms" | "webhook" | "expo" | "email"; /** * @description `{"phone_number": "+14155550123"}` for sms (E.164 only), * `{"url": "https://…"}` for webhook (https only), * `{"email": "…"}`, or `{"push_token": "…"}`. */ config: Record; /** @description Empty means every event. */ events?: string[]; /** * Format: uuid * @description The agent whose SMS channel sends to this target. */ agent_id?: string; /** * Format: uuid * @description Defaults to the caller. */ user_id?: string; }; }; }; responses: { /** @description Target created, unverified */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["NotificationTarget"]; }; }; 400: components["responses"]["BadRequest"]; 403: components["responses"]["Forbidden"]; 409: components["responses"]["Conflict"]; }; }; deleteNotificationTarget: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Removed */ 204: { headers: { [name: string]: unknown; }; content?: never; }; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; startNotificationTargetVerification: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Code sent */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { message?: string; expires_in_seconds?: number; }; }; }; 400: components["responses"]["BadRequest"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; completeNotificationTargetVerification: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody: { content: { "application/json": { /** @example 042913 */ code: string; }; }; }; responses: { /** @description Verified */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { verified?: boolean; }; }; }; 400: components["responses"]["BadRequest"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; smsWebhook: { parameters: { query?: never; header: { "X-Twilio-Signature": string; }; path: { webhook_path: string; }; cookie?: never; }; requestBody: { content: { "application/x-www-form-urlencoded": { /** @example +14155550123 */ From?: string; /** @example +14155550999 */ To?: string; /** @example YES A1 */ Body?: string; }; }; }; responses: { /** @description TwiML response; `` when there is nothing to reply */ 200: { headers: { [name: string]: unknown; }; content: { "application/xml": string; }; }; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; discordWebhook: { parameters: { query?: never; header?: never; path: { webhook_path: string; }; cookie?: never; }; requestBody: { content: { "application/json": Record; }; }; responses: { /** @description Webhook processed */ 200: { headers: { [name: string]: unknown; }; content?: never; }; }; }; listOAuthProviders: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Provider list */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["OAuthProviderListResponse"]; }; }; }; }; listConnectorPresets: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Preset catalogue */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { presets?: components["schemas"]["ConnectorPreset"][]; }; }; }; }; }; listInstalledConnectors: { parameters: { query?: never; header?: never; path: { agent_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Installed connectors */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { connectors?: components["schemas"]["InstalledConnector"][]; }; }; }; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; installConnector: { parameters: { query?: never; header?: never; path: { agent_id: string; /** @description Connector preset slug, e.g. `gmail`. */ slug: string; }; cookie?: never; }; requestBody: { content: { "application/json": { /** @description Defaults to the preset slug. */ binding_name?: string; /** * @description Narrow the preset's scopes. Widening is refused — the * preset's scope list is the reviewed part of a one-click * install. Must still include the preset's required scopes. */ scopes?: string[]; /** @description Where to send the user after the OAuth round trip. */ redirect_after?: string; }; }; }; responses: { /** @description Connector installed; OAuth may still be pending */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": { /** Format: uuid */ binding_id: string; binding_name: string; preset_slug: string; /** @description Absent for connectors that use a pasted API key rather than OAuth. */ authorization_url?: string | null; /** @description What the user still has to do, in words. */ next_step: string; }; }; }; 400: components["responses"]["BadRequest"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; 409: components["responses"]["Conflict"]; }; }; connectOAuth: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["ConnectOAuthRequest"]; }; }; responses: { /** @description Authorization URL generated */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ConnectOAuthResponse"]; }; }; 400: components["responses"]["BadRequest"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; listEventSubscriptions: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody?: never; responses: { /** @description Subscriptions */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { subscriptions?: components["schemas"]["EventSubscription"][]; }; }; }; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; createEventSubscription: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody: { content: { "application/json": { /** Format: uuid */ binding_id: string; /** @example gmail.message.received */ event_type: string; /** @description Poll interval, at least the source's `min_interval_secs` and at most 86400. Defaults to the minimum. */ interval_secs?: number; }; }; }; responses: { /** @description Subscribed */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["EventSubscription"]; }; }; 400: components["responses"]["BadRequest"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; /** @description This binding already subscribes to that event type */ 409: { headers: { [name: string]: unknown; }; content?: never; }; }; }; deleteEventSubscription: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Deleted */ 204: { headers: { [name: string]: unknown; }; content?: never; }; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; pollEventSubscriptionNow: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Polled */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { emitted: number; subscription: components["schemas"]["EventSubscription"]; }; }; }; 400: components["responses"]["BadRequest"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; listRouterKeys: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody?: never; responses: { /** @description Router keys */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { keys: components["schemas"]["RouterKey"][]; }; }; }; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; createRouterKey: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody?: { content: { "application/json": components["schemas"]["CreateRouterKeyRequest"]; }; }; responses: { /** @description Router key created (plaintext returned once) */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["RouterKeyCreated"]; }; }; 400: components["responses"]["BadRequest"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; revokeRouterKey: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; key_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Revoked */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["RouterKey"]; }; }; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; listToolBindings: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody?: never; responses: { /** @description Bindings */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { bindings: components["schemas"]["SecretToolBinding"][]; }; }; }; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; createToolBinding: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["CreateToolBindingRequest"]; }; }; responses: { /** @description Created */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["SecretToolBinding"]; }; }; 400: components["responses"]["BadRequest"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; /** @description A binding for this secret, tool and argument already exists */ 409: { headers: { [name: string]: unknown; }; content?: never; }; }; }; deleteToolBinding: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; binding_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Deleted */ 204: { headers: { [name: string]: unknown; }; content?: never; }; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; listOAuthConnections: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody?: never; responses: { /** @description Connection list */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["OAuthConnectionListResponse"]; }; }; 404: components["responses"]["NotFound"]; }; }; disconnectOAuth: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; binding_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Connection disconnected */ 204: { headers: { [name: string]: unknown; }; content?: never; }; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; listOAuthAppCredentials: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody?: never; responses: { /** @description Credential list */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["OAuthAppCredentialListResponse"]; }; }; 404: components["responses"]["NotFound"]; }; }; saveOAuthAppCredentials: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["SaveOAuthAppCredentialsRequest"]; }; }; responses: { /** @description Credentials saved */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["OAuthAppCredentialResponse"]; }; }; 400: components["responses"]["BadRequest"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; deleteOAuthAppCredentials: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; /** @description Provider identifier (e.g. "github", "google", "slack") */ provider_slug: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Credentials deleted */ 204: { headers: { [name: string]: unknown; }; content?: never; }; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; oauthConnectCallback: { parameters: { query?: { /** @description Authorization code from the OAuth provider */ code?: string; /** @description Opaque state parameter for CSRF protection and session binding */ state?: string; /** @description Error code if the authorization was denied or failed */ error?: string; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Redirect to dashboard with success or error status */ 302: { headers: { [name: string]: unknown; }; content?: never; }; }; }; listCedarPolicies: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Cedar policies list */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["CedarPolicyListResponse"]; }; }; 401: components["responses"]["Unauthorized"]; }; }; createCedarPolicy: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["CreateCedarPolicyRequest"]; }; }; responses: { /** @description Cedar policy created */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["CedarPolicyResponse"]; }; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; }; }; getCedarPolicy: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Cedar policy details */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["CedarPolicyResponse"]; }; }; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; }; }; deleteCedarPolicy: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Cedar policy deleted */ 204: { headers: { [name: string]: unknown; }; content?: never; }; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; }; }; testCedarPolicy: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["CedarPolicyTestRequest"]; }; }; responses: { /** @description Policy evaluation result */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["CedarPolicyTestResponse"]; }; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; }; }; listOpaPolicies: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description OPA policies list */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["OpaPolicyListResponse"]; }; }; 401: components["responses"]["Unauthorized"]; }; }; createOpaPolicy: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["CreateOpaPolicyRequest"]; }; }; responses: { /** @description OPA policy created */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["OpaPolicyResponse"]; }; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; }; }; getOpaPolicy: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description OPA policy details */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["OpaPolicyResponse"]; }; }; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; }; }; deleteOpaPolicy: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description OPA policy deleted */ 204: { headers: { [name: string]: unknown; }; content?: never; }; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; }; }; testOpaPolicy: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["OpaPolicyTestRequest"]; }; }; responses: { /** @description Policy evaluation result */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["OpaPolicyTestResponse"]; }; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; }; }; getPolicyBackendSettings: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Policy backend settings */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PolicyBackendSettingsResponse"]; }; }; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; }; }; updatePolicyBackendSettings: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["UpdatePolicyBackendSettingsRequest"]; }; }; responses: { /** @description Updated settings */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PolicyBackendSettingsResponse"]; }; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; }; }; getPolicyShadowReport: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Shadow divergence report */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PolicyShadowReportResponse"]; }; }; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; }; }; getGuardrailShadowReport: { parameters: { query?: { since?: string; until?: string; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Guardrail shadow report */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["GuardrailShadowReportResponse"]; }; }; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; }; }; listGuardrailRevisions: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Guardrail revisions */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["GuardrailRevisionListResponse"]; }; }; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; }; }; listContractAbis: { parameters: { query?: { /** @description Filter by chain name */ chain?: string; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description ABI list */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ContractAbiListResponse"]; }; }; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; }; }; createContractAbi: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["CreateContractAbiRequest"]; }; }; responses: { /** @description ABI registered */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ContractAbiResponse"]; }; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; 409: components["responses"]["Conflict"]; }; }; getContractAbi: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description ABI details */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ContractAbiResponse"]; }; }; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; deleteContractAbi: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description ABI deleted */ 204: { headers: { [name: string]: unknown; }; content?: never; }; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; listPendingApprovals: { parameters: { query?: { status?: string; agent_id?: string; limit?: number; offset?: number; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Pending approvals list */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PendingApprovalListResponse"]; }; }; 401: components["responses"]["Unauthorized"]; }; }; submitPendingApproval: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["SubmitPendingApprovalRequest"]; }; }; responses: { /** @description Approval required */ 202: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["SubmitPendingApprovalResponse"]; }; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; }; }; getPendingApproval: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Pending approval with signatures */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PendingApprovalResponse"]; }; }; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; approvePendingApproval: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["ApprovePendingApprovalRequest"]; }; }; responses: { /** @description Updated pending approval */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PendingApprovalResponse"]; }; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; 409: components["responses"]["Conflict"]; }; }; executePendingApproval: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Action executed */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ExecutePendingApprovalResponse"]; }; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; cancelPendingApproval: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Cancelled pending approval */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PendingApprovalResponse"]; }; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; listSubOrgs: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Sub-organizations list */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["SubOrgListResponse"]; }; }; 401: components["responses"]["Unauthorized"]; }; }; createSubOrg: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["CreateSubOrgRequest"]; }; }; responses: { /** @description Sub-organization created */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["SubOrgResponse"]; }; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; }; }; getSubOrg: { parameters: { query?: never; header?: never; path: { sub_org_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Sub-organization details */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["SubOrgResponse"]; }; }; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; }; }; deleteSubOrg: { parameters: { query?: never; header?: never; path: { sub_org_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Sub-organization archived */ 204: { headers: { [name: string]: unknown; }; content?: never; }; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; }; }; updateSubOrg: { parameters: { query?: never; header?: never; path: { sub_org_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["CreateSubOrgRequest"]; }; }; responses: { /** @description Sub-organization updated */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["SubOrgResponse"]; }; }; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; }; }; addSubOrgUser: { parameters: { query?: never; header?: never; path: { sub_org_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["SubOrgAddUserRequest"]; }; }; responses: { /** @description User added to sub-organization */ 201: { headers: { [name: string]: unknown; }; content?: never; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; }; }; grantSubOrgPermission: { parameters: { query?: never; header?: never; path: { sub_org_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["SubOrgPermissionRequest"]; }; }; responses: { /** @description Permission granted */ 201: { headers: { [name: string]: unknown; }; content?: never; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; }; }; revokeSubOrgPermission: { parameters: { query?: never; header?: never; path: { sub_org_id: string; /** @description The permission scope to revoke */ permission: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Permission revoked */ 204: { headers: { [name: string]: unknown; }; content?: never; }; 401: components["responses"]["Unauthorized"]; 404: components["responses"]["NotFound"]; }; }; generateSubOrgWallets: { parameters: { query?: never; header?: never; path: { sub_org_id: string; }; cookie?: never; }; requestBody?: { content: { "application/json": components["schemas"]["SubOrgGenerateWalletsRequest"]; }; }; responses: { /** @description Wallets generated */ 201: { headers: { [name: string]: unknown; }; content?: never; }; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; getPortfolio: { parameters: { query?: { /** @description Comma-separated list of chain names to filter by (e.g. "ethereum,solana") */ chains?: string; /** @description Whether to include token balances alongside native balances */ include_tokens?: boolean; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Portfolio summary */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["PortfolioResponse"]; }; }; 401: components["responses"]["Unauthorized"]; }; }; importSmartAccount: { parameters: { query?: never; header?: never; path: { agent_id: components["parameters"]["AgentId"]; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["ImportSmartAccountRequest"]; }; }; responses: { /** @description Smart account imported */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ImportSmartAccountResponse"]; }; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; }; }; listWalletAccessPolicies: { parameters: { query?: { /** @description Filter by scope type */ scope_type?: "wallet" | "platform_app" | "org"; /** @description Filter by scope ID (wallet or platform app UUID) */ scope_id?: string; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Policy list */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["WalletAccessPolicyListResponse"]; }; }; 401: components["responses"]["Unauthorized"]; }; }; createWalletAccessPolicy: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["CreateWalletAccessPolicyRequest"]; }; }; responses: { /** @description Policy created */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["WalletAccessPolicyResponse"]; }; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; }; }; deleteWalletAccessPolicy: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Policy deleted */ 204: { headers: { [name: string]: unknown; }; content?: never; }; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; requestCredentialRecovery: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["CredentialRecoveryRequest"]; }; }; responses: { /** @description Recovery request created */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["CredentialRecoveryResponse"]; }; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; }; }; listCredentialRecoveryRequests: { parameters: { query?: { /** @description Filter by status */ status?: "pending_approval" | "approved" | "rejected" | "expired"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Recovery request list */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["CredentialRecoveryListResponse"]; }; }; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; }; }; approveCredentialRecovery: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Request approved */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["CredentialRecoveryApproveResponse"]; }; }; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; executeCredentialRecovery: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Recovery executed */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["CredentialRecoveryExecuteResponse"]; }; }; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; 404: components["responses"]["NotFound"]; }; }; getCredentialRecoveryPolicy: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Recovery policy */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["CredentialRecoveryPolicyResponse"]; }; }; 401: components["responses"]["Unauthorized"]; }; }; updateCredentialRecoveryPolicy: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["CredentialRecoveryPolicyRequest"]; }; }; responses: { /** @description Policy updated */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["CredentialRecoveryPolicyResponse"]; }; }; 400: components["responses"]["BadRequest"]; 401: components["responses"]["Unauthorized"]; 403: components["responses"]["Forbidden"]; }; }; batch_delete_agents: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; approve_enrollment: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": { token: string; /** * Format: uuid * @description Consensus approval to spend on this creation. * Approving an enrollment creates an agent, so it is * gated on `agent.create` exactly as POST /v1/agents * is. Orgs without a control-plane consensus policy * never need this. */ approval_id?: string; }; }; }; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** * @description Forbidden, the plan does not include this, or the org requires * M-of-N consensus for `agent.create` and no approval was supplied. */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; deny_enrollment: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": { token: string; }; }; }; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; getEnrollmentStatus: { parameters: { query: { /** @description The `poll_token` from the enrol response. */ poll: string; }; header?: never; path: { pairing_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Status */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["EnrollmentStatusResponse"]; }; }; 400: components["responses"]["BadRequest"]; 404: components["responses"]["NotFound"]; }; }; get_enrollment_pending: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { agent_name?: string; /** Format: date-time */ expires_at?: string; /** @description Pairing only — the agent key's `SHA256:` fingerprint to verify visually. */ fingerprint?: string; description?: string; }; }; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; refresh_channel_webhook: { parameters: { query?: never; header?: never; path: { agent_id: string; channel_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; repair_channel_webhook: { parameters: { query?: never; header?: never; path: { agent_id: string; channel_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; get_agent_eoa: { parameters: { query?: never; header?: never; path: { agent_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; generate_agent_eoa: { parameters: { query?: never; header?: never; path: { agent_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; rotate_signer_key: { parameters: { query?: never; header?: never; path: { agent_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; delete_smart_account: { parameters: { query?: never; header?: never; path: { agent_id: string; chain_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; unlock_agent_platform: { parameters: { query?: never; header?: never; path: { agent_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; export_audit_events: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; cancel_request: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; migration_status: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; vault_assert_begin: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; vault_assert_complete: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": { credential_id: string; authenticator_data: string; client_data_json: string; signature: string; }; }; }; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; reauth_begin: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": { method: string; purpose?: string; }; }; }; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; reauth_complete: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": { method: string; purpose?: string; password?: string; credential_id?: string; authenticator_data?: string; client_data_json?: string; signature?: string; }; }; }; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; disconnect_social: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; sso_authorize: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; sso_callback: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; sso_status: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; get_llm_models: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; get_llm_pricing: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; get_llm_billing_status: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; redeem_promo: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": { code: string; }; }; }; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; validate_promo: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; chain_rpc_proxy: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": { chain_id: number; method: string; params: { [key: string]: unknown; }[]; }; }; }; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; fiat_webhook: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; list_shared_namespaces: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; create_shared_namespace: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": { namespace: string; agent_ids: string[]; }; }; }; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; delete_shared_namespace: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; update_shared_namespace: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody: { content: { "application/json": { agent_ids: string[]; }; }; }; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; record_journey: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": { journey: string; step?: string; }; }; }; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; delete_org_env_var: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; get_custody: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; setup_custody: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": { custody_mode: string; }; }; }; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; list_org_env_vars: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; reconstruct: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": { approval_id: Record; client_share?: string; action: { [key: string]: unknown; }; }; }; }; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; list_org_settings: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; update_org_setting: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": { key: string; value: string; /** Format: uuid */ approval_id?: string; }; }; }; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; app_branding: { parameters: { query?: never; header?: never; path: { slug: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; list_platform_automations: { parameters: { query?: never; header?: never; path: { app_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; upsert_user: { parameters: { query?: never; header?: never; path: { app_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": { subject_token?: string; subject_token_type?: string; email?: string; display_name?: string; siwe_message?: string; siwe_signature?: string; return_to?: string; create_sub_org?: boolean; app_id?: Record; }; }; }; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; unlock_connection_resources: { parameters: { query?: never; header?: never; path: { connection_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; list_connection_memory_namespaces: { parameters: { query?: never; header?: never; path: { connection_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; list_connection_memory_entries: { parameters: { query?: never; header?: never; path: { connection_id: string; namespace: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; get_platform_connection_otel_topology: { parameters: { query?: never; header?: never; path: { connection_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Nodes and edges reachable from the connection's agents */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["OtelTopology"]; }; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not a plt_ key */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Connection not found for this app */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; get_platform_connection_otel_threats: { parameters: { query?: { state?: "open" | "all"; }; header?: never; path: { connection_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Threats on the connection's agents, highest blast radius first */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["OtelThreatList"]; }; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not a plt_ key */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Connection not found for this app */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; get_platform_connection_otel_summary: { parameters: { query?: never; header?: never; path: { connection_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Posture and counts for the connection */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["OtelSummary"]; }; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not a plt_ key */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Connection not found for this app */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; get_platform_connection_otel_stream: { parameters: { query?: never; header?: { "Last-Event-ID"?: string; }; path: { connection_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description text/event-stream */ 200: { headers: { [name: string]: unknown; }; content: { "text/event-stream": string; }; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not a plt_ key */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Connection not found for this app */ 404: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Stream slot cap for this app reached */ 429: { headers: { [name: string]: unknown; }; content?: never; }; }; }; list_connection_resources: { parameters: { query?: never; header?: never; path: { connection_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; create_app_policy: { parameters: { query?: never; header?: never; path: { connection_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": { user_id?: Record; to_allowlist?: string[]; to_denylist?: string[]; max_value_per_tx_eth?: string; daily_limit_eth?: string; allowed_chains?: string[]; allowed_tokens?: string[]; max_transactions_per_day?: number; human_factor_auth?: { [key: string]: unknown; }; }; }; }; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; link_account: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": { client_id: string; }; }; }; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; list_orphaned_platform_resources: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; request_report: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": { first_name: string; last_name: string; email: string; company: string; job_title?: string; report_slug?: string; marketing_consent?: boolean; }; }; }; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; list_runtime_chat_conversations: { parameters: { query?: never; header?: never; path: { runtime_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; get_runtime_chat_conversation: { parameters: { query?: never; header?: never; path: { runtime_id: string; conversation_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; archive_runtime_chat_conversation: { parameters: { query?: never; header?: never; path: { runtime_id: string; conversation_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; runtime_chat_diagnostics: { parameters: { query?: never; header?: never; path: { runtime_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; unlock_runtime_chat: { parameters: { query?: never; header?: never; path: { runtime_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; stream_otel_signals: { parameters: { query?: { /** @description Set to `1` to request synthetic data. Available only on deployments with fixtures enabled, or to callers in the platform organization; refused with 403 otherwise. */ fixture?: "1" | "true"; }; header?: { /** @description Resume after this event id. */ "Last-Event-ID"?: string; }; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description An event stream */ 200: { headers: { [name: string]: unknown; }; content: { "text/event-stream": string; }; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not a human user, or fixtures are not available here */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Too many concurrent streams for this user */ 429: { headers: { [name: string]: unknown; }; content?: never; }; }; }; list_otel_threats: { parameters: { query?: { /** @description `open` (default) returns anything not yet resolved; `all` includes resolved. */ state?: "open" | "all"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Threats, highest blast radius first */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["OtelThreatList"]; }; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not a human user */ 403: { headers: { [name: string]: unknown; }; content?: never; }; }; }; get_otel_export_config: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Current config, or null when unconfigured */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { enabled?: boolean; endpoint?: string; header_names?: string[]; resource_attributes?: { [key: string]: string; }; signal_filter?: ("spans" | "metrics" | "logs")[]; } | null; }; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Requires the Team plan or higher */ 402: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not an owner or admin */ 403: { headers: { [name: string]: unknown; }; content?: never; }; }; }; patch_otel_export_config: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: { content: { "application/json": { enabled?: boolean; /** * Format: uri * @description HTTPS only. */ endpoint?: string; /** @description Sent on every export request, e.g. an Authorization header. Reserved hop-by-hop names are refused. */ headers?: { [key: string]: string; }; resource_attributes?: { [key: string]: string; }; signal_filter?: ("spans" | "metrics" | "logs")[]; }; }; }; responses: { /** @description The updated config, header names only */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Endpoint refused (scheme */ 400: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Requires the Team plan or higher */ 402: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not an owner or admin */ 403: { headers: { [name: string]: unknown; }; content?: never; }; }; }; test_otel_export: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description The collector's HTTP status for the probe */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { endpoint?: string; status?: number; ok?: boolean; }; }; }; /** @description Not configured */ 400: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Requires the Team plan or higher */ 402: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not an owner or admin */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description More than 5 test sends this minute */ 429: { headers: { [name: string]: unknown; }; content?: never; }; }; }; get_otel_metrics: { parameters: { query?: { /** @description Lookback, e.g. `30m`, `24h`, `7d`. Default 24h, maximum 30d. */ window?: string; /** @description Bucket width. Defaults to a twenty-fourth of the window, minimum 60s. */ step?: string; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Bucketed metrics */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { /** @description The window and step actually used. */ window: { window_secs?: number; step_secs?: number; }; buckets: { /** Format: date-time */ t: string; executions: number; denials: number; transactions: number; llm_calls: number; }[]; /** @description Null when nothing in the window recorded a duration. */ latency_p50_ms?: number | null; latency_p95_ms?: number | null; total_executions: number; total_denials: number; }; }; }; /** @description Unparseable window or step, window over 30d, or step larger than window */ 400: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not a human user */ 403: { headers: { [name: string]: unknown; }; content?: never; }; }; }; get_otel_agent_trust: { parameters: { query?: never; header?: never; path: { agent_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Current score, components, history, recent actions */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { /** Format: uuid */ agent_id: string; score?: number | null; /** @description True while the engine is recommend-only or the agent is unscored. */ shadow: boolean; /** Format: date-time */ updated_at?: string | null; /** @description 0-100 per component; null means no source in this deployment. */ components: { denial_rate?: number | null; threat_hits?: number | null; egress_blocks?: number | null; spend_velocity?: number | null; off_hours?: number | null; consensus_bypass?: number | null; }; /** @description Oldest first, last 24 hours. */ history: { /** Format: date-time */ at: string; score: number; }[]; /** @description Newest first. */ recent: { /** Format: date-time */ at: string; action: string; resource_type?: string | null; }[]; }; }; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not a human user */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description No such agent in the caller's organization */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; get_otel_flows: { parameters: { query?: { /** @description Lookback, e.g. `1h`, `24h`, `7d`. Default 24h, maximum 30d. */ window?: string; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Read flows, highest first */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { window: { window_secs?: number; step_secs?: number; }; edges: { /** Format: uuid */ agent_id: string; agent_name: string; /** Format: uuid */ vault_id: string; vault_name: string; /** @description secret.read events in the window. */ reads: number; /** @description Distinct secret paths touched. */ distinct_paths: number; }[]; total_reads: number; }; }; }; /** @description Unparseable window or window over 30d */ 400: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not a human user */ 403: { headers: { [name: string]: unknown; }; content?: never; }; }; }; get_otel_summary: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Posture summary */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["OtelSummary"]; }; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not a human user */ 403: { headers: { [name: string]: unknown; }; content?: never; }; }; }; get_otel_topology: { parameters: { query?: { /** @description Set to `1` to request a synthetic graph. Same gating as the stream endpoint. A fixture response carries `fixture: true`. */ fixture?: "1" | "true"; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Topology snapshot */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["OtelTopology"]; }; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not a human user, or fixtures are not available here */ 403: { headers: { [name: string]: unknown; }; content?: never; }; }; }; stream_runtime_logs: { parameters: { query?: never; header?: never; path: { runtime_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; unlock_runtime_logs: { parameters: { query?: never; header?: never; path: { runtime_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; rebuild_runtime: { parameters: { query?: never; header?: never; path: { runtime_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; restart_runtime: { parameters: { query?: never; header?: never; path: { runtime_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; disable_version: { parameters: { query?: never; header?: never; path: { vault_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; get_secret_version: { parameters: { query?: never; header?: never; path: { vault_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; unlock_vault_platform: { parameters: { query?: never; header?: never; path: { vault_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden, or the plan does not include this */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; register_webinar: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": { first_name: string; last_name: string; email: string; company: string; job_title?: string; webinar_slug?: string; marketing_consent?: boolean; }; }; }; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; list_runtime_templates: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description The template catalogue */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { templates?: { id?: string; description?: string; chat_capable?: boolean; /** @description SPDX id, or null when the agent is proprietary */ license?: string | null; /** @description Whether the agent needs a paid account with its vendor. Independent of licence — the Codex CLI is Apache-2.0 and still requires a ChatGPT plan. */ requires_vendor_subscription?: boolean; vendor_credential_env?: string | null; }[]; }; }; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; }; }; list_automation_step_types: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Supported step types */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; }; }; list_platform_runtimes: { parameters: { query?: never; header?: never; path: { app_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Success */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden */ 403: { headers: { [name: string]: unknown; }; content?: never; }; }; }; list_browser_devices: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description The paired devices. No credential material is returned — the row holds an Argon2 hash and a prefix, and neither is exposed. */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { devices?: { /** Format: uuid */ id?: string; label?: string; platform?: string | null; bridge_version?: string | null; /** Format: date-time */ last_seen_at?: string | null; /** * Format: date-time * @description Set once revoked. A revoked credential stops resolving. */ revoked_at?: string | null; /** Format: date-time */ created_at?: string; }[]; }; }; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; }; }; pair_browser_device: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": { /** @description Name for this device. Re-pairing an existing label must present the same key. */ label: string; /** @description The bridge's public key, pinned on first use for this label. */ public_key_pin: string; bridge_version?: string; platform?: string; }; }; }; responses: { /** @description Paired. The credential is returned once and there is no endpoint that returns it again. */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": { /** Format: uuid */ device_id?: string; label?: string; /** @description The bb_ bridge credential. Shown once. */ credential?: string; }; }; }; /** @description Unauthenticated, or step-up re-auth not satisfied */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not a human caller — agents and platform keys cannot pair a device */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description That label is already pinned to a different key */ 409: { headers: { [name: string]: unknown; }; content?: never; }; }; }; revoke_browser_device: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Revoked. Subsequent use of that credential resolves to nothing. */ 204: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description No such device in this organization */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; list_browser_credentials: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description The bindings */ 200: { headers: { [name: string]: unknown; }; content?: never; }; }; }; create_browser_credential: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": { label: string; /** * Format: uuid * @description Must belong to the caller's org. */ vault_id: string; /** @description Path of the secret inside that vault. The value never lands in the binding. */ secret_path: string; /** @description https only, and its host must be in allowed_hosts or sso_hosts — the bridge navigates here itself, one step before a password is typed. */ login_url: string; /** @description Hostnames. A bare entry matches only itself; a leading dot ('.example.com') matches that host and any subdomain. URLs, ports and '*' are refused — '*' has no meaning to the matcher, so it would be stored and then match nothing. */ allowed_hosts: string[]; /** @description Identity-provider hosts the login legitimately bounces through. */ sso_hosts?: string[]; }; }; }; responses: { /** @description Created. Every field is a pointer or a policy; none is secret. */ 201: { headers: { [name: string]: unknown; }; content?: never; }; /** @description A host is not a bare hostname, allowed_hosts is empty, or login_url is http or outside the allowlist */ 400: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not a human caller, step-up not satisfied, or the vault belongs to another org */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Vault not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; delete_browser_credential: { parameters: { query?: never; header?: never; path: { id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Deleted */ 204: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not a human caller */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Binding not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; create_browser_session: { parameters: { query?: never; header: { /** @description The bb_ credential from `1claw browser-bridge login` */ "x-1claw-bridge-credential": string; /** @description Bridge build. Versions below the server minimum are refused. */ "x-1claw-bridge-version": string; }; path: { id: string; }; cookie?: never; }; requestBody: { content: { "application/json": { /** * Format: uuid * @description Must belong to the same org as the paired device. */ agent_id: string; client_id: string; bridge_version?: string; protocol_version?: string; }; }; }; responses: { /** @description Session created */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { /** Format: uuid */ session_id?: string; /** @description bs_ prefixed. Only its hash is stored. */ session_token?: string; /** Format: date-time */ expires_at?: string; }; }; }; /** @description Missing or unsupported bridge version */ 400: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Not a paired bridge, or an agent token was presented */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description The device and the agent are not in the same org */ 403: { headers: { [name: string]: unknown; }; content?: never; }; }; }; authorize_browser_fill: { parameters: { query?: never; header: { "x-1claw-bridge-credential": string; "x-1claw-bridge-version": string; }; path: { id: string; }; cookie?: never; }; requestBody: { content: { "application/json": { /** * Format: uuid * @description Must match the session the presented bs_ token opened. */ session_id: string; /** Format: uuid */ binding_id: string; /** @description The target the fill is for. Recorded on the grant. */ frame_id: string; /** * Format: int64 * @description The bridge's navigation counter. Compared again at consume: a navigation in between means the page decided about is no longer the page in front of the bridge. */ generation: number; /** @description Where the form would POST. Checked as well as the two origins — a login form on an allowed page can still submit to somebody else's host. Absent is not treated as 'same as the tab'; it denies. */ form_action_origin?: string; /** @description Path of the form being filled, checked against the binding's fingerprint. */ form_path: string; /** @description Field names on that form. Every field the fingerprint expects must be present; extra fields are fine, since sites add hidden inputs. */ field_names: string[]; /** @description Hosts the login has redirected through, in order. Each is checked against the binding's allowed hosts union its sso hosts. */ redirect_chain: string[]; /** * Format: int64 * @description The target's generation now. A mismatch with `generation` means the page moved and the fill is denied. */ current_generation: number; /** @description Origin of the tab being driven. Checked against the binding's allowed and sso hosts by exact host match. */ tab_origin: string; /** @description Origin of the frame holding the form. Checked separately — a credential typed into an allowed tab can still land in an attacker's iframe. */ frame_origin: string; }; }; }; responses: { /** @description A grant, a denial, or a pending approval. Never a secret. */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": { /** @enum {string} */ kind?: "grant"; /** * Format: uuid * @description Single-use, short-lived, redeemable only by the session it was issued to. */ grant_id?: string; /** Format: uuid */ binding_id?: string; /** Format: date-time */ expires_at?: string; /** @description The bridge navigates here itself. An agent-supplied URL would be the agent choosing who receives the password. */ login_url?: string; }; }; }; /** @description Missing or unsupported bridge version */ 400: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Only one of the two required credentials was presented, an origin is not on the binding's allowlist, or the fill velocity cap was hit */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description No such binding for this org */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; consume_browser_fill: { parameters: { query?: never; header: { "x-1claw-bridge-credential": string; /** @description The bs_ session token. Proof the redemption belongs to a session this bridge opened. */ "x-1claw-bridge-session": string; "x-1claw-bridge-version": string; }; path: { id: string; }; cookie?: never; }; requestBody: { content: { "application/json": { /** Format: uuid */ session_id: string; /** Format: uuid */ grant_id: string; /** * Format: int64 * @description The bridge's navigation counter now. A mismatch means the page moved after the decision. */ generation: number; }; }; }; responses: { /** @description The credential itself, as raw bytes — the only route in the feature that returns secret material. Not a JSON envelope: the bridge adopts the body into a zeroable buffer, and a wrapper would force it to parse, interning the secret as a string that lives until GC. Metadata rides in `x-1claw-binding-id` and `x-1claw-form-fingerprint`; the response is `cache-control: no-store`. */ 200: { headers: { "x-1claw-binding-id"?: string; /** @description The binding's form fingerprint, base64-encoded JSON, when it has one. Base64 because a fingerprint naming a non-ASCII field is not a legal header value as raw JSON. */ "x-1claw-form-fingerprint"?: string; [name: string]: unknown; }; content: { "application/octet-stream": string; }; }; /** @description Missing or unsupported bridge version */ 400: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Grant expired, already used, issued to another session or device; the page navigated after authorisation; or an agent principal was presented */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description The binding or the secret behind it is missing */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; unlock_agent_chat: { parameters: { query?: never; header?: never; path: { agent_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Unlocked */ 200: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Unauthenticated */ 401: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Forbidden */ 403: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Agent not found */ 404: { headers: { [name: string]: unknown; }; content?: never; }; }; }; } //# sourceMappingURL=api-types.d.ts.map