From 286963affe40d4dbec9b4cde3aa293f9b0396df9 Mon Sep 17 00:00:00 2001 From: Eric Velazquez Date: Mon, 20 Jul 2026 20:46:15 +0200 Subject: [PATCH 01/15] docs: add earn documentation --- products/earn/end-to-end-example.mdx | 287 ++++++++++++++++++++++ products/earn/features/deploy-wrapper.mdx | 188 ++++++++++++++ products/earn/features/deposit.mdx | 178 ++++++++++++++ products/earn/features/positions.mdx | 117 +++++++++ products/earn/features/vault-catalog.mdx | 165 +++++++++++++ products/earn/features/withdraw.mdx | 207 ++++++++++++++++ products/earn/overview.mdx | 107 ++++++++ snippets/shared/earn-beta-note.mdx | 9 + 8 files changed, 1258 insertions(+) create mode 100644 products/earn/end-to-end-example.mdx create mode 100644 products/earn/features/deploy-wrapper.mdx create mode 100644 products/earn/features/deposit.mdx create mode 100644 products/earn/features/positions.mdx create mode 100644 products/earn/features/vault-catalog.mdx create mode 100644 products/earn/features/withdraw.mdx create mode 100644 products/earn/overview.mdx create mode 100644 snippets/shared/earn-beta-note.mdx diff --git a/products/earn/end-to-end-example.mdx b/products/earn/end-to-end-example.mdx new file mode 100644 index 00000000..3687992e --- /dev/null +++ b/products/earn/end-to-end-example.mdx @@ -0,0 +1,287 @@ +--- +title: "End-to-end example: earn on Base" +description: "Deploy a wrapper for a Morpho USDC vault on Base, deposit, track the position, and withdraw: the full Earn lifecycle." +sidebarTitle: "End-to-end example" +noindex: true +mode: wide +--- + +import EarnBetaNote from "/snippets/shared/earn-beta-note.mdx"; + +This walkthrough runs the complete Earn lifecycle against Base mainnet: find a Morpho USDC vault (we'll use Steakhouse USDC), enable it, deposit 100 USDC from a Turnkey wallet, check the position, and withdraw everything. + + + +**Prerequisites** + +- Earn beta access enabled for your organization (and a Pro plan or higher if you want gas sponsorship) +- A Turnkey API key pair +- A wallet account holding USDC on Base, plus ETH on Base for gas if you don't sponsor +- An org-owned wallet address to receive your fee payouts + + + + All requests go through the generic `request` method of `TurnkeyClient`, stamped by your API key. Deposits, withdrawals, and deployments all confirm asynchronously, so define a small polling helper here as well. + + ```javascript + import { TurnkeyClient } from "@turnkey/http"; + import { ApiKeyStamper } from "@turnkey/api-key-stamper"; + + const organizationId = ""; + + const client = new TurnkeyClient( + { baseUrl: "https://api.turnkey.com" }, + new ApiKeyStamper({ + apiPublicKey: process.env.TURNKEY_API_PUBLIC_KEY, + apiPrivateKey: process.env.TURNKEY_API_PRIVATE_KEY, + }), + ); + + // Poll an earn status endpoint until the transaction lands on-chain. + async function pollEarnStatus(path, idField, id) { + for (;;) { + const res = await client.request(path, { + organizationId, + [idField]: id, + }); + if (res.status === "COMPLETED") return res; + if (res.status === "FAILED") { + throw new Error(`${path} failed: ${res.error}`); + } + await new Promise((r) => setTimeout(r, 3000)); + } + } + ``` + + + + Query the catalog for USDC vaults on Base. The chain comes from the CAIP-19 asset identifier; results are sorted by TVL. + + + + ```javascript title="JavaScript" + const { vaults } = await client.request("/public/v1/query/earn_vaults", { + organizationId, + caip19: "eip155:8453/erc20:0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", + provider: "EARN_PROVIDER_MORPHO", + }); + + // Pick the vault you want to offer. Here we use Steakhouse USDC. + const vault = vaults[0]; + console.log(vault.vaultAddress, vault.apyPct, vault.display.usd); + ``` + + ```bash title="cURL" + curl --request POST \ + --url https://api.turnkey.com/public/v1/query/earn_vaults \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header "X-Stamp: (see Stamps)" \ + --data '{ + "organizationId": "", + "caip19": "eip155:8453/erc20:0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", + "provider": "EARN_PROVIDER_MORPHO" + }' + ``` + + + + + + Enable the vault for your organization with a 1% performance fee (`"100"` bps) paid to your fee wallet. Turnkey pays the deployment gas. This step is safe to re-run: identical parameters return the same addresses without redeploying. + + + + ```javascript title="JavaScript" + const { activity: deploy } = await client.request( + "/public/v1/submit/earn_deploy_wrapper", + { + type: "ACTIVITY_TYPE_EARN_DEPLOY_WRAPPER", + timestampMs: String(Date.now()), + organizationId, + parameters: { + vaultAddress: vault.vaultAddress, + chainCaip2: "eip155:8453", + clientFeeBps: "100", + clientFeeWallet: "", + }, + }, + ); + + const { deployRequestId, wrapperAddress } = + deploy.result.earnDeployWrapperResult; + ``` + + ```bash title="cURL" + curl --request POST \ + --url https://api.turnkey.com/public/v1/submit/earn_deploy_wrapper \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header "X-Stamp: (see Stamps)" \ + --data '{ + "type": "ACTIVITY_TYPE_EARN_DEPLOY_WRAPPER", + "timestampMs": " (e.g. 1745474677453)", + "organizationId": "", + "parameters": { + "vaultAddress": "", + "chainCaip2": "eip155:8453", + "clientFeeBps": "100", + "clientFeeWallet": "" + } + }' + ``` + + + + + + Poll until the wrapper is live on-chain. + + ```javascript + await pollEarnStatus( + "/public/v1/query/earn_deploy_status", + "deployRequestId", + deployRequestId, + ); + ``` + + + + USDC has 6 decimals, so 100 USDC is `"100000000"` raw units. The approval and deposit run as one atomic transaction. With `sponsor: true`, Gas Station pays the gas (Pro plan or higher); set it to `false` to have the wallet pay with its own ETH. + + + + ```javascript title="JavaScript" + const { activity: deposit } = await client.request( + "/public/v1/submit/earn_deposit", + { + type: "ACTIVITY_TYPE_EARN_DEPOSIT", + timestampMs: String(Date.now()), + organizationId, + parameters: { + wrapperAddress, + signWith: "", + assets: "100000000", + chainCaip2: "eip155:8453", + sponsor: true, + }, + }, + ); + + const { depositRequestId } = deposit.result.earnDepositResult; + ``` + + ```bash title="cURL" + curl --request POST \ + --url https://api.turnkey.com/public/v1/submit/earn_deposit \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header "X-Stamp: (see Stamps)" \ + --data '{ + "type": "ACTIVITY_TYPE_EARN_DEPOSIT", + "timestampMs": " (e.g. 1745474677453)", + "organizationId": "", + "parameters": { + "wrapperAddress": "", + "signWith": "", + "assets": "100000000", + "chainCaip2": "eip155:8453", + "sponsor": true + } + }' + ``` + + + + + + The activity completing only means the transaction was enqueued. Poll until it's included on-chain. + + ```javascript + const { depositTxHash } = await pollEarnStatus( + "/public/v1/query/earn_deposit_status", + "depositRequestId", + depositRequestId, + ); + console.log("deposited:", depositTxHash); + ``` + + + + Query the wallet's positions and compute the yield earned so far from the raw fields, using `BigInt` rather than floats or the `display` values. + + ```javascript + const { positions } = await client.request( + "/public/v1/query/earn_positions", + { + organizationId, + walletAddress: "", + }, + ); + + const p = positions.find((p) => p.wrapperAddress === wrapperAddress); + + const yieldEarned = + BigInt(p.currentValue) - + BigInt(p.totalDeposited) + + BigInt(p.totalWithdrawn); + + console.log(`current value: ${p.display.currentValueUsd} USD`); + console.log(`yield earned: ${yieldEarned} raw units`); + ``` + + + + Exit the full position with `"MAX"`, which redeems the exact live share balance, then poll the withdrawal to confirmation. + + ```javascript + const { activity: withdraw } = await client.request( + "/public/v1/submit/earn_withdraw", + { + type: "ACTIVITY_TYPE_EARN_WITHDRAW", + timestampMs: String(Date.now()), + organizationId, + parameters: { + wrapperAddress, + signWith: "", + amountValue: "MAX", + chainCaip2: "eip155:8453", + sponsor: true, + }, + }, + ); + + const { withdrawRequestId } = withdraw.result.earnWithdrawResult; + + const { withdrawTxHash } = await pollEarnStatus( + "/public/v1/query/earn_withdraw_status", + "withdrawRequestId", + withdrawRequestId, + ); + console.log("withdrawn:", withdrawTxHash); + ``` + + + +## Dive deeper + + + + Fee model, chains, and the full API surface. + + + Catalog and enabled-vault queries in detail. + + + Fee configuration, idempotency, and status polling. + + + Gas options and deposit semantics. + + + Partial and yield-only withdrawals. + + + Position fields, units, and precision. + + diff --git a/products/earn/features/deploy-wrapper.mdx b/products/earn/features/deploy-wrapper.mdx new file mode 100644 index 00000000..02be4612 --- /dev/null +++ b/products/earn/features/deploy-wrapper.mdx @@ -0,0 +1,188 @@ +--- +title: "Deploy a vault wrapper" +description: "Enable a yield vault for your organization by deploying its fee wrapper, a one-time setup step that also sets your fee." +sidebarTitle: "Deploy wrapper" +noindex: true +mode: wide +--- + +import EarnBetaNote from "/snippets/shared/earn-beta-note.mdx"; + +Before your users can deposit into a vault, your organization must deploy a **fee wrapper** for it. The wrapper is the contract users actually deposit into. It routes funds to the underlying vault and takes the performance fees out of its share price. Deploying it is a one-time activity per vault, and Turnkey pays the gas. + + + +## When to deploy + +Deploy once per vault you want to offer, per fee configuration. Deposits into a vault with no deployed wrapper fail with `EARN_SETUP_REQUIRED` (see [Deposit into a vault](/products/earn/features/deposit#prerequisites)). Pick vaults from the [vault catalog](/products/earn/features/vault-catalog); the catalog's `enabled` flag tells you which vaults your organization has already enabled. + +## Choose your fee configuration + +The deploy intent carries your fee: + +- `clientFeeBps`: your performance fee on gross yield, in basis points (`"2000"` = 20%). Combined with Turnkey's fee (10% of yield by default), the total cannot exceed 5,000 bps (50% of yield); deployments above the cap are rejected. +- `clientFeeWallet`: the address that receives your fee payouts on-chain. It must be a wallet account owned by your organization; addresses outside your org are rejected. + + + The fee configuration is bound into the wrapper's deterministic (CREATE2) + address. Deploying the same vault with a different `clientFeeBps` or + `clientFeeWallet` produces a new wrapper at a new address. Positions in the + old wrapper remain fully withdrawable; new deposits should target the new + wrapper. To change your fee, redeploy and point deposits at the new address. + + +## Submit the activity + + + `ACTIVITY_TYPE_EARN_DEPLOY_WRAPPER` + + + + Timestamp (in milliseconds) of the request, used to verify liveness. + + + + Unique identifier for your organization. + + + + Address of the underlying yield vault to wrap, from the [vault catalog](/products/earn/features/vault-catalog). + + + + CAIP-2 chain identifier the vault lives on, e.g. `eip155:8453` for Base. + + + + Your performance fee on gross yield, in basis points (e.g. `"2000"` for 20%). + + + + The org-owned wallet address that receives your fee payouts. + + + + +```bash title="cURL" +curl --request POST \ + --url https://api.turnkey.com/public/v1/submit/earn_deploy_wrapper \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header "X-Stamp: (see Stamps)" \ + --data '{ + "type": "ACTIVITY_TYPE_EARN_DEPLOY_WRAPPER", + "timestampMs": " (e.g. 1745474677453)", + "organizationId": "", + "parameters": { + "vaultAddress": "", + "chainCaip2": "eip155:8453", + "clientFeeBps": "2000", + "clientFeeWallet": "" + } + }' +``` + +```javascript title="JavaScript" +import { TurnkeyClient } from "@turnkey/http"; +import { ApiKeyStamper } from "@turnkey/api-key-stamper"; + +const client = new TurnkeyClient( + { baseUrl: "https://api.turnkey.com" }, + new ApiKeyStamper({ + apiPublicKey: process.env.TURNKEY_API_PUBLIC_KEY, + apiPrivateKey: process.env.TURNKEY_API_PRIVATE_KEY, + }), +); + +const { activity } = await client.request( + "/public/v1/submit/earn_deploy_wrapper", + { + type: "ACTIVITY_TYPE_EARN_DEPLOY_WRAPPER", + timestampMs: String(Date.now()), + organizationId: "", + parameters: { + vaultAddress: "", + chainCaip2: "eip155:8453", + clientFeeBps: "2000", + clientFeeWallet: "", + }, + }, +); +``` + + + +The activity result returns the deployed addresses immediately; they are derived deterministically before the transaction confirms: + +```json +{ + "activity": { + "id": "", + "status": "ACTIVITY_STATUS_COMPLETED", + "type": "ACTIVITY_TYPE_EARN_DEPLOY_WRAPPER", + "result": { + "earnDeployWrapperResult": { + "deployRequestId": "", + "wrapperAddress": "", + "splitterAddress": "" + } + } + } +} +``` + +- `wrapperAddress`: the deposit target for this vault. +- `splitterAddress`: the payment splitter that distributes fees between you and Turnkey. +- `deployRequestId`: poll handle for the deployment transaction. + +## Poll deployment status + +The activity completes when the deployment transaction is broadcast, not when it confirms. Poll `earn_deploy_status` until it reports `COMPLETED` before accepting deposits: + + + +```bash title="cURL" +curl --request POST \ + --url https://api.turnkey.com/public/v1/query/earn_deploy_status \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header "X-Stamp: (see Stamps)" \ + --data '{ + "organizationId": "", + "deployRequestId": "" + }' +``` + +```javascript title="JavaScript" +const status = await client.request("/public/v1/query/earn_deploy_status", { + organizationId: "", + deployRequestId: "", +}); +``` + + + +```json +{ + "status": "COMPLETED", + "deployTxHash": "" +} +``` + +`status` is `PENDING`, `COMPLETED`, or `FAILED`. On `FAILED`, the response includes an `error` field with the reason. + +## Gas and idempotency + + + Turnkey pays the wrapper deployment gas (roughly 7.1M gas per deployment), + not you or your users. Deployments are also idempotent: resubmitting the + activity with identical parameters re-derives the same wrapper and splitter + addresses and skips the broadcast if the contracts already exist, so + retries are safe. + + +## Next steps + +- [Browse the vault catalog](/products/earn/features/vault-catalog) to pick vaults to enable +- [Deposit into a vault](/products/earn/features/deposit) once the deployment is `COMPLETED` +- Review the [fee model](/products/earn/overview#fees) diff --git a/products/earn/features/deposit.mdx b/products/earn/features/deposit.mdx new file mode 100644 index 00000000..918d6b97 --- /dev/null +++ b/products/earn/features/deposit.mdx @@ -0,0 +1,178 @@ +--- +title: "Deposit into a vault" +description: "Move assets from a Turnkey wallet into an enabled yield vault in one atomic transaction, optionally gas-sponsored." +noindex: true +mode: wide +--- + +import EarnBetaNote from "/snippets/shared/earn-beta-note.mdx"; + +A deposit moves assets from a user's wallet into your organization's fee wrapper for a vault. The token approval and the vault deposit execute as a single atomic batch transaction, so there is no separate approval step to manage. + + + +## Prerequisites + +- Your organization has [deployed a wrapper](/products/earn/features/deploy-wrapper) for the vault, and its deployment status is `COMPLETED`. Deposits targeting an address with no deployed wrapper fail with `EARN_SETUP_REQUIRED`. +- The `signWith` wallet holds enough of the vault's underlying asset. For non-sponsored deposits it also needs the chain's native token for gas. + + + Sub-organization wallets can deposit into (and withdraw from) wrappers + deployed by their parent organization. The wrapper configuration lives on + the parent, the sub-org wallet signs, and no per-sub-org deployment is + needed. + + +## Submit the deposit + + + `ACTIVITY_TYPE_EARN_DEPOSIT` + + + + Timestamp (in milliseconds) of the request, used to verify liveness. + + + + Unique identifier for your organization (or the sub-organization whose wallet is depositing). + + + + Address of the deployed fee wrapper to deposit into, from [`earn_enabled_vaults`](/products/earn/features/vault-catalog#list-your-enabled-vaults). + + + + The wallet account address to deposit from and sign with. + + + + Amount of the underlying asset to deposit, in raw on-chain units (e.g. `"1000000"` for 1 USDC at 6 decimals). + + + + CAIP-2 chain identifier, e.g. `eip155:8453`. + + + + Whether to sponsor the transaction's gas via Gas Station. Defaults to `false`. + + + + +```bash title="cURL" +curl --request POST \ + --url https://api.turnkey.com/public/v1/submit/earn_deposit \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header "X-Stamp: (see Stamps)" \ + --data '{ + "type": "ACTIVITY_TYPE_EARN_DEPOSIT", + "timestampMs": " (e.g. 1745474677453)", + "organizationId": "", + "parameters": { + "wrapperAddress": "", + "signWith": "", + "assets": "1000000", + "chainCaip2": "eip155:8453", + "sponsor": false + } + }' +``` + +```javascript title="JavaScript" +import { TurnkeyClient } from "@turnkey/http"; +import { ApiKeyStamper } from "@turnkey/api-key-stamper"; + +const client = new TurnkeyClient( + { baseUrl: "https://api.turnkey.com" }, + new ApiKeyStamper({ + apiPublicKey: process.env.TURNKEY_API_PUBLIC_KEY, + apiPrivateKey: process.env.TURNKEY_API_PRIVATE_KEY, + }), +); + +const { activity } = await client.request("/public/v1/submit/earn_deposit", { + type: "ACTIVITY_TYPE_EARN_DEPOSIT", + timestampMs: String(Date.now()), + organizationId: "", + parameters: { + wrapperAddress: "", + signWith: "", + assets: "1000000", + chainCaip2: "eip155:8453", + sponsor: false, + }, +}); +``` + + + +The result contains only a poll handle: + +```json +{ + "activity": { + "id": "", + "status": "ACTIVITY_STATUS_COMPLETED", + "type": "ACTIVITY_TYPE_EARN_DEPOSIT", + "result": { + "earnDepositResult": { + "depositRequestId": "" + } + } + } +} +``` + +## Gas: sponsored vs self-funded + +With `sponsor: true`, Gas Station pays the gas and the batch executes as an EIP-7702 sponsored transaction. The `signWith` wallet needs no native token at all. This requires a Pro plan or higher. + +With `sponsor: false`, the `signWith` wallet pays gas itself, so fund it with the chain's native token before depositing. + +## Poll deposit status (required) + + + A `COMPLETED` activity means the transaction was enqueued for broadcast, + not that it landed on-chain. A transaction that later fails (for example, + from an insufficient token balance) is invisible in the activity result. + Poll `earn_deposit_status` until it reports `COMPLETED` (included on-chain) + or `FAILED`. + + + + +```bash title="cURL" +curl --request POST \ + --url https://api.turnkey.com/public/v1/query/earn_deposit_status \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header "X-Stamp: (see Stamps)" \ + --data '{ + "organizationId": "", + "depositRequestId": "" + }' +``` + +```javascript title="JavaScript" +const status = await client.request("/public/v1/query/earn_deposit_status", { + organizationId: "", + depositRequestId: "", +}); +``` + + + +```json +{ + "status": "COMPLETED", + "depositTxHash": "" +} +``` + +`status` is `PENDING`, `COMPLETED`, or `FAILED`. On `FAILED`, the response includes an `error` field with the reason. See [Submissions](/developer-reference/api-overview/submissions) for general activity semantics. + +## Next steps + +- [Track positions](/products/earn/features/positions) once the deposit is `COMPLETED` +- [Withdraw from a vault](/products/earn/features/withdraw) diff --git a/products/earn/features/positions.mdx b/products/earn/features/positions.mdx new file mode 100644 index 00000000..c65b5381 --- /dev/null +++ b/products/earn/features/positions.mdx @@ -0,0 +1,117 @@ +--- +title: "Track positions" +description: "Query a wallet's active Earn positions: current value, lifetime deposits and withdrawals, and the yield earned." +noindex: true +mode: wide +--- + +import EarnBetaNote from "/snippets/shared/earn-beta-note.mdx"; + +`earn_positions` returns the active positions for a single wallet address, one entry per wrapper the wallet holds shares in, with live on-chain values. + + + +## Query positions + + + Unique identifier for your organization (or the sub-organization that owns the wallet). + + + + The wallet address to return positions for. Positions are scoped per wallet, not org-wide. + + + + +```bash title="cURL" +curl --request POST \ + --url https://api.turnkey.com/public/v1/query/earn_positions \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header "X-Stamp: (see Stamps)" \ + --data '{ + "organizationId": "", + "walletAddress": "" + }' +``` + +```javascript title="JavaScript" +import { TurnkeyClient } from "@turnkey/http"; +import { ApiKeyStamper } from "@turnkey/api-key-stamper"; + +const client = new TurnkeyClient( + { baseUrl: "https://api.turnkey.com" }, + new ApiKeyStamper({ + apiPublicKey: process.env.TURNKEY_API_PUBLIC_KEY, + apiPrivateKey: process.env.TURNKEY_API_PRIVATE_KEY, + }), +); + +const { positions } = await client.request("/public/v1/query/earn_positions", { + organizationId: "", + walletAddress: "", +}); +``` + + + +```json +{ + "positions": [ + { + "vaultAddress": "", + "wrapperAddress": "", + "provider": "EARN_PROVIDER_MORPHO", + "caip19": "eip155:8453/erc20:0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", + "currentValue": "100512340", + "totalDeposited": "100000000", + "totalWithdrawn": "0", + "display": { + "currentValueUsd": "100.51", + "totalDepositedUsd": "100.00", + "totalWithdrawnUsd": "0.00", + "currentValueCrypto": "100.512340", + "totalDepositedCrypto": "100.000000", + "totalWithdrawnCrypto": "0.000000" + } + } + ] +} +``` + +## Understanding the fields + +| Field | Units | Meaning | +| :--- | :--- | :--- | +| `currentValue` | raw on-chain units of the underlying asset | Live value of the position, already net of the wrapper's performance fees. This is what a full withdrawal would return right now | +| `totalDeposited` | raw on-chain units | Lifetime amount deposited into this position since it was opened (or since the last full `MAX` exit) | +| `totalWithdrawn` | raw on-chain units | Lifetime amount withdrawn over the same window | +| `display.*` | formatted strings | USD and asset-denominated renderings for UI display only | + +Raw fields are exact base-10 integers in the asset's smallest unit (e.g. `"100512340"` = 100.51234 USDC at 6 decimals). The totals accumulate from your deposit and withdrawal amounts; a [`MAX` withdrawal](/products/earn/features/withdraw#full-exit-with-max) closes the position and resets both totals to zero. + + + Don't do arithmetic with `display` values; they are formatted, rounded + strings for presentation. Compute with the raw fields using `BigInt` (or + your language's arbitrary-precision integers) rather than floats. + + +## Computing yield + +Yield earned to date is: + +``` +yield = currentValue - totalDeposited + totalWithdrawn +``` + +For example, a position with `totalDeposited = "100000000"` (100 USDC), `totalWithdrawn = "0"`, and `currentValue = "100512340"` has earned `512340` raw units (0.51234 USDC), net of all fees. To pay out just the yield, see [Claiming yield only](/products/earn/features/withdraw#claiming-yield-only). + +## Access notes + +- Positions are per wallet address: deposits made by a sub-organization wallet appear under that wallet's address, queried with the sub-organization's ID. +- Some Earn management reads are restricted to the parent organization; position queries work for both parent and sub-organizations. + +## Next steps + +- [Withdraw from a vault](/products/earn/features/withdraw) for a partial, yield-only, or `MAX` exit +- [Deposit into a vault](/products/earn/features/deposit) to grow a position diff --git a/products/earn/features/vault-catalog.mdx b/products/earn/features/vault-catalog.mdx new file mode 100644 index 00000000..059ae5ef --- /dev/null +++ b/products/earn/features/vault-catalog.mdx @@ -0,0 +1,165 @@ +--- +title: "Browse the vault catalog" +description: "Discover the yield vaults available for an asset with live TVL and APY, and list the vaults your organization has enabled." +sidebarTitle: "Vault catalog" +noindex: true +mode: wide +--- + +import EarnBetaNote from "/snippets/shared/earn-beta-note.mdx"; + +Two queries cover vault discovery: `earn_vaults` returns the market of wrappable vaults for an asset, and `earn_enabled_vaults` returns the wrappers your organization has already deployed. + + + +## Discover vaults with earn_vaults + + + Unique identifier for your organization. Used to annotate which vaults you have already enabled. + + + + CAIP-19 asset identifier to return vaults for, e.g. `eip155:8453/erc20:0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913` for USDC on Base. The chain is derived from this identifier. + + + + Optional filter: `EARN_PROVIDER_MORPHO` or `EARN_PROVIDER_AAVE`. Omit to return all providers. + + + + Cursor pagination over the TVL-sorted catalog. `limit` defaults to 10 (max 100); pass the last `vaultAddress` of a page as the `after` cursor for the next page. + + + + +```bash title="cURL" +curl --request POST \ + --url https://api.turnkey.com/public/v1/query/earn_vaults \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header "X-Stamp: (see Stamps)" \ + --data '{ + "organizationId": "", + "caip19": "eip155:8453/erc20:0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913" + }' +``` + +```javascript title="JavaScript" +import { TurnkeyClient } from "@turnkey/http"; +import { ApiKeyStamper } from "@turnkey/api-key-stamper"; + +const client = new TurnkeyClient( + { baseUrl: "https://api.turnkey.com" }, + new ApiKeyStamper({ + apiPublicKey: process.env.TURNKEY_API_PUBLIC_KEY, + apiPrivateKey: process.env.TURNKEY_API_PRIVATE_KEY, + }), +); + +const { vaults } = await client.request("/public/v1/query/earn_vaults", { + organizationId: "", + caip19: "eip155:8453/erc20:0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", +}); +``` + + + +```json +{ + "vaults": [ + { + "vaultAddress": "", + "provider": "EARN_PROVIDER_MORPHO", + "caip19": "eip155:8453/erc20:0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", + "tvl": "182734550123456", + "apyPct": "0.0812", + "enabled": false, + "display": { + "usd": "182,734,550.12", + "crypto": "182,734,550.123456" + } + } + ] +} +``` + + + - The catalog is sorted by TVL in USD, descending, and only includes vaults + with at least **$100k TVL**. + - `tvl` is in raw on-chain units of the underlying asset; `apyPct` is a + decimal fraction (`"0.0812"` = 8.12% gross APY, before fees). + - `display` values are for presentation only. Don't do arithmetic with + them. + - `enabled: true` means your organization already has a wrapper deployed for + the vault. + + +## List your enabled vaults + +The management view of every wrapper your organization has deployed, with on-chain totals and the full fee breakdown: + + + Unique identifier for your organization. + + + + Optional provider filter. + + + + Optional filter: only return enabled vaults whose underlying asset matches this CAIP-19 identifier. + + + + +```bash title="cURL" +curl --request POST \ + --url https://api.turnkey.com/public/v1/query/earn_enabled_vaults \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header "X-Stamp: (see Stamps)" \ + --data '{ + "organizationId": "" + }' +``` + +```javascript title="JavaScript" +const { enabledVaults } = await client.request( + "/public/v1/query/earn_enabled_vaults", + { organizationId: "" }, +); +``` + + + +```json +{ + "enabledVaults": [ + { + "vaultAddress": "", + "wrapperAddress": "", + "provider": "EARN_PROVIDER_MORPHO", + "caip19": "eip155:8453/erc20:0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", + "apyPct": "0.0812", + "netApyPct": "0.0568", + "turnkeyFeeBps": "1000", + "clientFeeBps": "2000", + "totalDeposited": "2500000000", + "display": { + "usd": "2,500.00", + "crypto": "2,500.00" + } + } + ] +} +``` + +`apyPct` is the gross APY; `netApyPct` is what depositors earn after both performance fees: `netApy = grossApy × (1 - (turnkeyFeeBps + clientFeeBps) / 10000)`. `totalDeposited` is the wrapper's TVL in raw units of the underlying asset. `wrapperAddress` is the deposit target to pass to [`earn_deposit`](/products/earn/features/deposit). + +## Providers + +Morpho vaults are available today. Aave support is upcoming; the API shape is identical, so no integration changes will be needed. See the [chain support table](/products/earn/overview#supported-protocols-and-chains). + +## Next steps + +- [Deploy a vault wrapper](/products/earn/features/deploy-wrapper) for a vault from the catalog diff --git a/products/earn/features/withdraw.mdx b/products/earn/features/withdraw.mdx new file mode 100644 index 00000000..95548198 --- /dev/null +++ b/products/earn/features/withdraw.mdx @@ -0,0 +1,207 @@ +--- +title: "Withdraw from a vault" +description: "Withdraw any amount, just the yield, or the entire position from an enabled yield vault." +noindex: true +mode: wide +--- + +import EarnBetaNote from "/snippets/shared/earn-beta-note.mdx"; + +A withdrawal moves assets from your organization's fee wrapper back to the user's wallet. Amounts are specified in the underlying asset (vault shares are not exposed in the API), or pass `"MAX"` to exit the position entirely. + + + +## Submit the withdrawal + + + `ACTIVITY_TYPE_EARN_WITHDRAW` + + + + Timestamp (in milliseconds) of the request, used to verify liveness. + + + + Unique identifier for your organization (or the sub-organization whose wallet is withdrawing). + + + + Address of the deployed fee wrapper holding the position, from [`earn_positions`](/products/earn/features/positions). + + + + The wallet account address to withdraw to and sign with. + + + + Amount of the underlying asset to withdraw, in raw on-chain units (e.g. `"500000"` for 0.50 USDC), or the literal `"MAX"` to withdraw the entire position. + + + + CAIP-2 chain identifier, e.g. `eip155:8453`. + + + + Whether to sponsor the transaction's gas via Gas Station. Defaults to `false`. + + + + +```bash title="cURL" +curl --request POST \ + --url https://api.turnkey.com/public/v1/submit/earn_withdraw \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header "X-Stamp: (see Stamps)" \ + --data '{ + "type": "ACTIVITY_TYPE_EARN_WITHDRAW", + "timestampMs": " (e.g. 1745474677453)", + "organizationId": "", + "parameters": { + "wrapperAddress": "", + "signWith": "", + "amountValue": "MAX", + "chainCaip2": "eip155:8453", + "sponsor": false + } + }' +``` + +```javascript title="JavaScript" +import { TurnkeyClient } from "@turnkey/http"; +import { ApiKeyStamper } from "@turnkey/api-key-stamper"; + +const client = new TurnkeyClient( + { baseUrl: "https://api.turnkey.com" }, + new ApiKeyStamper({ + apiPublicKey: process.env.TURNKEY_API_PUBLIC_KEY, + apiPrivateKey: process.env.TURNKEY_API_PRIVATE_KEY, + }), +); + +const { activity } = await client.request("/public/v1/submit/earn_withdraw", { + type: "ACTIVITY_TYPE_EARN_WITHDRAW", + timestampMs: String(Date.now()), + organizationId: "", + parameters: { + wrapperAddress: "", + signWith: "", + amountValue: "MAX", + chainCaip2: "eip155:8453", + sponsor: false, + }, +}); +``` + + + +The result contains only a poll handle: + +```json +{ + "activity": { + "id": "", + "status": "ACTIVITY_STATUS_COMPLETED", + "type": "ACTIVITY_TYPE_EARN_WITHDRAW", + "result": { + "earnWithdrawResult": { + "withdrawRequestId": "" + } + } + } +} +``` + +## Full exit with MAX + +`"amountValue": "MAX"` redeems the wallet's exact live share balance in the wrapper, so the position closes completely without leaving dust. + + + A `MAX` withdrawal resets the position's lifetime accounting: after it + confirms, `totalDeposited` and `totalWithdrawn` in + [`earn_positions`](/products/earn/features/positions) start again from zero + for that wrapper. + + +Positions in wrappers you have since replaced (after a [fee change](/products/earn/features/deploy-wrapper#choose-your-fee-configuration)) remain withdrawable. Target the old wrapper's address. + +## Claiming yield only + +To pay out yield without touching principal, withdraw exactly the yield amount. Compute it from the position's raw fields: + +```javascript title="JavaScript" +const { positions } = await client.request("/public/v1/query/earn_positions", { + organizationId: "", + walletAddress: "", +}); + +const p = positions.find( + (p) => p.wrapperAddress === "", +); + +// These are raw on-chain unit strings, so use BigInt rather than floats. +const yieldEarned = + BigInt(p.currentValue) - BigInt(p.totalDeposited) + BigInt(p.totalWithdrawn); + +// Withdraw the yield, leave the principal earning. +await client.request("/public/v1/submit/earn_withdraw", { + type: "ACTIVITY_TYPE_EARN_WITHDRAW", + timestampMs: String(Date.now()), + organizationId: "", + parameters: { + wrapperAddress: "", + signWith: "", + amountValue: yieldEarned.toString(), + chainCaip2: "eip155:8453", + sponsor: false, + }, +}); +``` + +## Poll withdrawal status (required) + + + As with deposits, a `COMPLETED` activity means the transaction was enqueued + for broadcast, not that it confirmed. Poll `earn_withdraw_status` until it + reports `COMPLETED` (included on-chain) or `FAILED`. + + + + +```bash title="cURL" +curl --request POST \ + --url https://api.turnkey.com/public/v1/query/earn_withdraw_status \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header "X-Stamp: (see Stamps)" \ + --data '{ + "organizationId": "", + "withdrawRequestId": "" + }' +``` + +```javascript title="JavaScript" +const status = await client.request("/public/v1/query/earn_withdraw_status", { + organizationId: "", + withdrawRequestId: "", +}); +``` + + + +```json +{ + "status": "COMPLETED", + "withdrawTxHash": "" +} +``` + +`status` is `PENDING`, `COMPLETED`, or `FAILED`. On `FAILED`, the response includes an `error` field with the reason. + +## Gas + +Identical to deposits: `sponsor: true` uses Gas Station (Pro plan or higher); otherwise the `signWith` wallet pays gas natively. See [Gas: sponsored vs self-funded](/products/earn/features/deposit#gas-sponsored-vs-self-funded). + +## Next steps + +- [Track positions](/products/earn/features/positions) to verify the position after withdrawing diff --git a/products/earn/overview.mdx b/products/earn/overview.mdx new file mode 100644 index 00000000..9779abef --- /dev/null +++ b/products/earn/overview.mdx @@ -0,0 +1,107 @@ +--- +title: "Earn" +description: "Deposit into DeFi yield vaults from Turnkey wallets, with on-chain fee collection for your organization." +noindex: true +--- + +import EarnBetaNote from "/snippets/shared/earn-beta-note.mdx"; + +Earn lets wallets in your organization deposit into DeFi yield vaults, track their positions, and withdraw, all through Turnkey activities with the usual audit trail and policy controls. You can take your own performance fee on the yield your users earn, paid on-chain to a wallet you control. + + + +## What is Earn + +Earn connects Turnkey wallets to [ERC-4626](https://eips.ethereum.org/EIPS/eip-4626) yield vaults. Morpho vaults are supported today; Aave is coming. Users don't deposit into the raw vault directly. Instead, they deposit into a **fee wrapper**: a vault contract we deploy once per vault for your organization. The wrapper forwards deposits to the underlying vault and takes the performance fees out of its share price, so users never submit separate fee transactions. + +Deploying a wrapper is a one-time setup step per vault. After that, deposits, withdrawals, and position queries are each a single API call. + +## How it works + +1. Query [`earn_vaults`](/products/earn/features/vault-catalog) for the vaults available for an asset, with live TVL and APY. +2. Run [`earn_deploy_wrapper`](/products/earn/features/deploy-wrapper) once per vault to enable it for your organization and set your fee. Turnkey pays the deployment gas. +3. Call [`earn_deposit`](/products/earn/features/deposit) to move assets from a user's wallet into the vault. +4. Poll the matching status endpoint until the transaction confirms. Deposits, withdrawals, and deployments all confirm asynchronously. +5. Query [`earn_positions`](/products/earn/features/positions) for a wallet's current value and lifetime totals. +6. Call [`earn_withdraw`](/products/earn/features/withdraw) for a partial amount, the yield only, or the full position. + +## Supported protocols and chains + +| Chain | CAIP-2 | Providers | +| :--- | :--- | :--- | +| Ethereum | `eip155:1` | Morpho (Aave upcoming) | +| Base | `eip155:8453` | Morpho (Aave upcoming) | +| Arbitrum | `eip155:42161` | Morpho (Aave upcoming) | +| Polygon | `eip155:137` | Morpho (Aave upcoming) | +| BNB Chain | `eip155:56` | Aave (upcoming) | + +Earn is EVM-only in V1. The vault catalog only includes vaults with at least $100k TVL. + +## Fees + +Earn fees are performance fees: a percentage of the yield a position earns. Principal is never charged. Two fees apply, both in basis points of gross yield: + +- **Your fee**: you set it per wrapper at deploy time (`clientFeeBps`), along with the payout wallet (`clientFeeWallet`, a wallet account owned by your organization). Payouts accrue on-chain to that wallet. +- **Turnkey's fee**: resolved automatically when you deploy. The default is 10% of yield (1,000 bps); enterprise customers can have custom rates. + +The combined fee is capped at 50% of yield (5,000 bps), and deployments above the cap are rejected. Both fees come out of the wrapper's share price and are split on-chain by a payment splitter contract deployed alongside the wrapper. + +The net APY your users earn is `grossApy × (1 - totalFeeBps / 10000)`. The [`earn_enabled_vaults`](/products/earn/features/vault-catalog#list-your-enabled-vaults) endpoint returns gross APY, net APY, and both fee rates for every wrapper you've deployed. + + + The fee configuration is fixed per wrapper. To change your fee, deploy a new wrapper for the same vault. Existing positions in the old wrapper remain fully withdrawable, and new deposits go to the new wrapper. See [Deploy a vault wrapper](/products/earn/features/deploy-wrapper#choose-your-fee-configuration). + + +## API surface + +Earn adds three activities: + +| Activity | Endpoint | Purpose | +| :--- | :--- | :--- | +| `ACTIVITY_TYPE_EARN_DEPLOY_WRAPPER` | `POST /public/v1/submit/earn_deploy_wrapper` | Enable a vault for your org by deploying its fee wrapper | +| `ACTIVITY_TYPE_EARN_DEPOSIT` | `POST /public/v1/submit/earn_deposit` | Deposit assets from a wallet into an enabled vault | +| `ACTIVITY_TYPE_EARN_WITHDRAW` | `POST /public/v1/submit/earn_withdraw` | Withdraw assets or exit a position | + +and six queries: + +| Query | Endpoint | Purpose | +| :--- | :--- | :--- | +| Vault catalog | `POST /public/v1/query/earn_vaults` | All wrappable vaults for an asset, with live TVL/APY | +| Enabled vaults | `POST /public/v1/query/earn_enabled_vaults` | Your org's deployed wrappers (management view) | +| Positions | `POST /public/v1/query/earn_positions` | A wallet's active positions | +| Deploy status | `POST /public/v1/query/earn_deploy_status` | Poll a wrapper deployment | +| Deposit status | `POST /public/v1/query/earn_deposit_status` | Poll a deposit until it lands on-chain | +| Withdraw status | `POST /public/v1/query/earn_withdraw_status` | Poll a withdrawal until it lands on-chain | + + + Earn requests are stamped and submitted like any other Turnkey request. See + [Stamps](/developer-reference/api-overview/stamps) and + [Submissions](/developer-reference/api-overview/submissions). There are no + Earn-specific SDK methods during the beta, so the examples on these pages + use cURL and the generic `request` method of + [`@turnkey/http`](https://www.npmjs.com/package/@turnkey/http)'s + `TurnkeyClient`. + + +## Explore + + + + Discover vaults and check your enabled wrappers. + + + Enable a vault and set your fee. + + + One transaction, optionally gas-sponsored. + + + Partial, yield-only, or full exit. + + + Current value, lifetime totals, and yield. + + + Deploy, deposit, and withdraw USDC on Base. + + diff --git a/snippets/shared/earn-beta-note.mdx b/snippets/shared/earn-beta-note.mdx new file mode 100644 index 00000000..0b38cca9 --- /dev/null +++ b/snippets/shared/earn-beta-note.mdx @@ -0,0 +1,9 @@ + + Earn is in private beta. Turnkey enables it per organization, so + [contact us](https://www.turnkey.com/contact-us) for access. For + sub-organizations, access is checked on the parent organization. Earn + requires a Pay-As-You-Go plan or higher, and gas sponsorship for Earn + requires a Pro plan or higher. The endpoints are live but not yet part of + the generated API reference or the SDKs, so these pages are the reference + during the beta. + From 8045320dad948ba9af4b31ccf04e966ae0e783f0 Mon Sep 17 00:00:00 2001 From: Eric Velazquez Date: Fri, 24 Jul 2026 17:55:51 +0200 Subject: [PATCH 02/15] docs: surface earn pages under Transaction management Earn RPCs are now EXTERNAL and placement moved to a Feature section under Transaction management (per TXL-313 updates): - move pages from products/earn/ to features/transaction-management/earn/ - add an Earn group to docs.json nav - drop noindex frontmatter (pages are no longer hidden) - point stamps/submissions links at post-restructure paths - refresh beta note wording (API reference and SDKs come with GA) Co-Authored-By: Claude Fable 5 --- docs.json | 14 ++++++++- .../transaction-management/earn.mdx | 31 +++++++++---------- .../earn}/deploy-wrapper.mdx | 11 +++---- .../transaction-management/earn}/deposit.mdx | 11 +++---- .../earn/end-to-end-example.mdx | 13 ++++---- .../earn}/positions.mdx | 9 +++--- .../earn}/vault-catalog.mdx | 7 ++--- .../transaction-management/earn}/withdraw.mdx | 11 +++---- snippets/shared/earn-beta-note.mdx | 6 ++-- 9 files changed, 59 insertions(+), 54 deletions(-) rename products/earn/overview.mdx => features/transaction-management/earn.mdx (72%) rename {products/earn/features => features/transaction-management/earn}/deploy-wrapper.mdx (90%) rename {products/earn/features => features/transaction-management/earn}/deposit.mdx (89%) rename {products => features/transaction-management}/earn/end-to-end-example.mdx (94%) rename {products/earn/features => features/transaction-management/earn}/positions.mdx (89%) rename {products/earn/features => features/transaction-management/earn}/vault-catalog.mdx (94%) rename {products/earn/features => features/transaction-management/earn}/withdraw.mdx (91%) diff --git a/docs.json b/docs.json index 269a8f18..5a0e548d 100644 --- a/docs.json +++ b/docs.json @@ -443,7 +443,19 @@ ] }, "features/transaction-management/balances", - "features/transaction-management/fiat-on-ramp" + "features/transaction-management/fiat-on-ramp", + { + "group": "Earn", + "pages": [ + "features/transaction-management/earn", + "features/transaction-management/earn/vault-catalog", + "features/transaction-management/earn/deploy-wrapper", + "features/transaction-management/earn/deposit", + "features/transaction-management/earn/withdraw", + "features/transaction-management/earn/positions", + "features/transaction-management/earn/end-to-end-example" + ] + } ] }, { diff --git a/products/earn/overview.mdx b/features/transaction-management/earn.mdx similarity index 72% rename from products/earn/overview.mdx rename to features/transaction-management/earn.mdx index 9779abef..7d4425ec 100644 --- a/products/earn/overview.mdx +++ b/features/transaction-management/earn.mdx @@ -1,7 +1,6 @@ --- title: "Earn" description: "Deposit into DeFi yield vaults from Turnkey wallets, with on-chain fee collection for your organization." -noindex: true --- import EarnBetaNote from "/snippets/shared/earn-beta-note.mdx"; @@ -18,12 +17,12 @@ Deploying a wrapper is a one-time setup step per vault. After that, deposits, wi ## How it works -1. Query [`earn_vaults`](/products/earn/features/vault-catalog) for the vaults available for an asset, with live TVL and APY. -2. Run [`earn_deploy_wrapper`](/products/earn/features/deploy-wrapper) once per vault to enable it for your organization and set your fee. Turnkey pays the deployment gas. -3. Call [`earn_deposit`](/products/earn/features/deposit) to move assets from a user's wallet into the vault. +1. Query [`earn_vaults`](/features/transaction-management/earn/vault-catalog) for the vaults available for an asset, with live TVL and APY. +2. Run [`earn_deploy_wrapper`](/features/transaction-management/earn/deploy-wrapper) once per vault to enable it for your organization and set your fee. Turnkey pays the deployment gas. +3. Call [`earn_deposit`](/features/transaction-management/earn/deposit) to move assets from a user's wallet into the vault. 4. Poll the matching status endpoint until the transaction confirms. Deposits, withdrawals, and deployments all confirm asynchronously. -5. Query [`earn_positions`](/products/earn/features/positions) for a wallet's current value and lifetime totals. -6. Call [`earn_withdraw`](/products/earn/features/withdraw) for a partial amount, the yield only, or the full position. +5. Query [`earn_positions`](/features/transaction-management/earn/positions) for a wallet's current value and lifetime totals. +6. Call [`earn_withdraw`](/features/transaction-management/earn/withdraw) for a partial amount, the yield only, or the full position. ## Supported protocols and chains @@ -46,10 +45,10 @@ Earn fees are performance fees: a percentage of the yield a position earns. Prin The combined fee is capped at 50% of yield (5,000 bps), and deployments above the cap are rejected. Both fees come out of the wrapper's share price and are split on-chain by a payment splitter contract deployed alongside the wrapper. -The net APY your users earn is `grossApy × (1 - totalFeeBps / 10000)`. The [`earn_enabled_vaults`](/products/earn/features/vault-catalog#list-your-enabled-vaults) endpoint returns gross APY, net APY, and both fee rates for every wrapper you've deployed. +The net APY your users earn is `grossApy × (1 - totalFeeBps / 10000)`. The [`earn_enabled_vaults`](/features/transaction-management/earn/vault-catalog#list-your-enabled-vaults) endpoint returns gross APY, net APY, and both fee rates for every wrapper you've deployed. - The fee configuration is fixed per wrapper. To change your fee, deploy a new wrapper for the same vault. Existing positions in the old wrapper remain fully withdrawable, and new deposits go to the new wrapper. See [Deploy a vault wrapper](/products/earn/features/deploy-wrapper#choose-your-fee-configuration). + The fee configuration is fixed per wrapper. To change your fee, deploy a new wrapper for the same vault. Existing positions in the old wrapper remain fully withdrawable, and new deposits go to the new wrapper. See [Deploy a vault wrapper](/features/transaction-management/earn/deploy-wrapper#choose-your-fee-configuration). ## API surface @@ -75,8 +74,8 @@ and six queries: Earn requests are stamped and submitted like any other Turnkey request. See - [Stamps](/developer-reference/api-overview/stamps) and - [Submissions](/developer-reference/api-overview/submissions). There are no + [Stamps](/api-reference/overview/stamps) and + [Submissions](/api-reference/activities/overview). There are no Earn-specific SDK methods during the beta, so the examples on these pages use cURL and the generic `request` method of [`@turnkey/http`](https://www.npmjs.com/package/@turnkey/http)'s @@ -86,22 +85,22 @@ and six queries: ## Explore - + Discover vaults and check your enabled wrappers. - + Enable a vault and set your fee. - + One transaction, optionally gas-sponsored. - + Partial, yield-only, or full exit. - + Current value, lifetime totals, and yield. - + Deploy, deposit, and withdraw USDC on Base. diff --git a/products/earn/features/deploy-wrapper.mdx b/features/transaction-management/earn/deploy-wrapper.mdx similarity index 90% rename from products/earn/features/deploy-wrapper.mdx rename to features/transaction-management/earn/deploy-wrapper.mdx index 02be4612..a21c7ebe 100644 --- a/products/earn/features/deploy-wrapper.mdx +++ b/features/transaction-management/earn/deploy-wrapper.mdx @@ -2,7 +2,6 @@ title: "Deploy a vault wrapper" description: "Enable a yield vault for your organization by deploying its fee wrapper, a one-time setup step that also sets your fee." sidebarTitle: "Deploy wrapper" -noindex: true mode: wide --- @@ -14,7 +13,7 @@ Before your users can deposit into a vault, your organization must deploy a **fe ## When to deploy -Deploy once per vault you want to offer, per fee configuration. Deposits into a vault with no deployed wrapper fail with `EARN_SETUP_REQUIRED` (see [Deposit into a vault](/products/earn/features/deposit#prerequisites)). Pick vaults from the [vault catalog](/products/earn/features/vault-catalog); the catalog's `enabled` flag tells you which vaults your organization has already enabled. +Deploy once per vault you want to offer, per fee configuration. Deposits into a vault with no deployed wrapper fail with `EARN_SETUP_REQUIRED` (see [Deposit into a vault](/features/transaction-management/earn/deposit#prerequisites)). Pick vaults from the [vault catalog](/features/transaction-management/earn/vault-catalog); the catalog's `enabled` flag tells you which vaults your organization has already enabled. ## Choose your fee configuration @@ -46,7 +45,7 @@ The deploy intent carries your fee: - Address of the underlying yield vault to wrap, from the [vault catalog](/products/earn/features/vault-catalog). + Address of the underlying yield vault to wrap, from the [vault catalog](/features/transaction-management/earn/vault-catalog). @@ -183,6 +182,6 @@ const status = await client.request("/public/v1/query/earn_deploy_status", { ## Next steps -- [Browse the vault catalog](/products/earn/features/vault-catalog) to pick vaults to enable -- [Deposit into a vault](/products/earn/features/deposit) once the deployment is `COMPLETED` -- Review the [fee model](/products/earn/overview#fees) +- [Browse the vault catalog](/features/transaction-management/earn/vault-catalog) to pick vaults to enable +- [Deposit into a vault](/features/transaction-management/earn/deposit) once the deployment is `COMPLETED` +- Review the [fee model](/features/transaction-management/earn#fees) diff --git a/products/earn/features/deposit.mdx b/features/transaction-management/earn/deposit.mdx similarity index 89% rename from products/earn/features/deposit.mdx rename to features/transaction-management/earn/deposit.mdx index 918d6b97..7984de86 100644 --- a/products/earn/features/deposit.mdx +++ b/features/transaction-management/earn/deposit.mdx @@ -1,7 +1,6 @@ --- title: "Deposit into a vault" description: "Move assets from a Turnkey wallet into an enabled yield vault in one atomic transaction, optionally gas-sponsored." -noindex: true mode: wide --- @@ -13,7 +12,7 @@ A deposit moves assets from a user's wallet into your organization's fee wrapper ## Prerequisites -- Your organization has [deployed a wrapper](/products/earn/features/deploy-wrapper) for the vault, and its deployment status is `COMPLETED`. Deposits targeting an address with no deployed wrapper fail with `EARN_SETUP_REQUIRED`. +- Your organization has [deployed a wrapper](/features/transaction-management/earn/deploy-wrapper) for the vault, and its deployment status is `COMPLETED`. Deposits targeting an address with no deployed wrapper fail with `EARN_SETUP_REQUIRED`. - The `signWith` wallet holds enough of the vault's underlying asset. For non-sponsored deposits it also needs the chain's native token for gas. @@ -38,7 +37,7 @@ A deposit moves assets from a user's wallet into your organization's fee wrapper - Address of the deployed fee wrapper to deposit into, from [`earn_enabled_vaults`](/products/earn/features/vault-catalog#list-your-enabled-vaults). + Address of the deployed fee wrapper to deposit into, from [`earn_enabled_vaults`](/features/transaction-management/earn/vault-catalog#list-your-enabled-vaults). @@ -170,9 +169,9 @@ const status = await client.request("/public/v1/query/earn_deposit_status", { } ``` -`status` is `PENDING`, `COMPLETED`, or `FAILED`. On `FAILED`, the response includes an `error` field with the reason. See [Submissions](/developer-reference/api-overview/submissions) for general activity semantics. +`status` is `PENDING`, `COMPLETED`, or `FAILED`. On `FAILED`, the response includes an `error` field with the reason. See [Submissions](/api-reference/activities/overview) for general activity semantics. ## Next steps -- [Track positions](/products/earn/features/positions) once the deposit is `COMPLETED` -- [Withdraw from a vault](/products/earn/features/withdraw) +- [Track positions](/features/transaction-management/earn/positions) once the deposit is `COMPLETED` +- [Withdraw from a vault](/features/transaction-management/earn/withdraw) diff --git a/products/earn/end-to-end-example.mdx b/features/transaction-management/earn/end-to-end-example.mdx similarity index 94% rename from products/earn/end-to-end-example.mdx rename to features/transaction-management/earn/end-to-end-example.mdx index 3687992e..ccadbd12 100644 --- a/products/earn/end-to-end-example.mdx +++ b/features/transaction-management/earn/end-to-end-example.mdx @@ -2,7 +2,6 @@ title: "End-to-end example: earn on Base" description: "Deploy a wrapper for a Morpho USDC vault on Base, deposit, track the position, and withdraw: the full Earn lifecycle." sidebarTitle: "End-to-end example" -noindex: true mode: wide --- @@ -266,22 +265,22 @@ This walkthrough runs the complete Earn lifecycle against Base mainnet: find a M ## Dive deeper - + Fee model, chains, and the full API surface. - + Catalog and enabled-vault queries in detail. - + Fee configuration, idempotency, and status polling. - + Gas options and deposit semantics. - + Partial and yield-only withdrawals. - + Position fields, units, and precision. diff --git a/products/earn/features/positions.mdx b/features/transaction-management/earn/positions.mdx similarity index 89% rename from products/earn/features/positions.mdx rename to features/transaction-management/earn/positions.mdx index c65b5381..825f77d8 100644 --- a/products/earn/features/positions.mdx +++ b/features/transaction-management/earn/positions.mdx @@ -1,7 +1,6 @@ --- title: "Track positions" description: "Query a wallet's active Earn positions: current value, lifetime deposits and withdrawals, and the yield earned." -noindex: true mode: wide --- @@ -88,7 +87,7 @@ const { positions } = await client.request("/public/v1/query/earn_positions", { | `totalWithdrawn` | raw on-chain units | Lifetime amount withdrawn over the same window | | `display.*` | formatted strings | USD and asset-denominated renderings for UI display only | -Raw fields are exact base-10 integers in the asset's smallest unit (e.g. `"100512340"` = 100.51234 USDC at 6 decimals). The totals accumulate from your deposit and withdrawal amounts; a [`MAX` withdrawal](/products/earn/features/withdraw#full-exit-with-max) closes the position and resets both totals to zero. +Raw fields are exact base-10 integers in the asset's smallest unit (e.g. `"100512340"` = 100.51234 USDC at 6 decimals). The totals accumulate from your deposit and withdrawal amounts; a [`MAX` withdrawal](/features/transaction-management/earn/withdraw#full-exit-with-max) closes the position and resets both totals to zero. Don't do arithmetic with `display` values; they are formatted, rounded @@ -104,7 +103,7 @@ Yield earned to date is: yield = currentValue - totalDeposited + totalWithdrawn ``` -For example, a position with `totalDeposited = "100000000"` (100 USDC), `totalWithdrawn = "0"`, and `currentValue = "100512340"` has earned `512340` raw units (0.51234 USDC), net of all fees. To pay out just the yield, see [Claiming yield only](/products/earn/features/withdraw#claiming-yield-only). +For example, a position with `totalDeposited = "100000000"` (100 USDC), `totalWithdrawn = "0"`, and `currentValue = "100512340"` has earned `512340` raw units (0.51234 USDC), net of all fees. To pay out just the yield, see [Claiming yield only](/features/transaction-management/earn/withdraw#claiming-yield-only). ## Access notes @@ -113,5 +112,5 @@ For example, a position with `totalDeposited = "100000000"` (100 USDC), `totalWi ## Next steps -- [Withdraw from a vault](/products/earn/features/withdraw) for a partial, yield-only, or `MAX` exit -- [Deposit into a vault](/products/earn/features/deposit) to grow a position +- [Withdraw from a vault](/features/transaction-management/earn/withdraw) for a partial, yield-only, or `MAX` exit +- [Deposit into a vault](/features/transaction-management/earn/deposit) to grow a position diff --git a/products/earn/features/vault-catalog.mdx b/features/transaction-management/earn/vault-catalog.mdx similarity index 94% rename from products/earn/features/vault-catalog.mdx rename to features/transaction-management/earn/vault-catalog.mdx index 059ae5ef..234dd3fb 100644 --- a/products/earn/features/vault-catalog.mdx +++ b/features/transaction-management/earn/vault-catalog.mdx @@ -2,7 +2,6 @@ title: "Browse the vault catalog" description: "Discover the yield vaults available for an asset with live TVL and APY, and list the vaults your organization has enabled." sidebarTitle: "Vault catalog" -noindex: true mode: wide --- @@ -154,12 +153,12 @@ const { enabledVaults } = await client.request( } ``` -`apyPct` is the gross APY; `netApyPct` is what depositors earn after both performance fees: `netApy = grossApy × (1 - (turnkeyFeeBps + clientFeeBps) / 10000)`. `totalDeposited` is the wrapper's TVL in raw units of the underlying asset. `wrapperAddress` is the deposit target to pass to [`earn_deposit`](/products/earn/features/deposit). +`apyPct` is the gross APY; `netApyPct` is what depositors earn after both performance fees: `netApy = grossApy × (1 - (turnkeyFeeBps + clientFeeBps) / 10000)`. `totalDeposited` is the wrapper's TVL in raw units of the underlying asset. `wrapperAddress` is the deposit target to pass to [`earn_deposit`](/features/transaction-management/earn/deposit). ## Providers -Morpho vaults are available today. Aave support is upcoming; the API shape is identical, so no integration changes will be needed. See the [chain support table](/products/earn/overview#supported-protocols-and-chains). +Morpho vaults are available today. Aave support is upcoming; the API shape is identical, so no integration changes will be needed. See the [chain support table](/features/transaction-management/earn#supported-protocols-and-chains). ## Next steps -- [Deploy a vault wrapper](/products/earn/features/deploy-wrapper) for a vault from the catalog +- [Deploy a vault wrapper](/features/transaction-management/earn/deploy-wrapper) for a vault from the catalog diff --git a/products/earn/features/withdraw.mdx b/features/transaction-management/earn/withdraw.mdx similarity index 91% rename from products/earn/features/withdraw.mdx rename to features/transaction-management/earn/withdraw.mdx index 95548198..96de30f5 100644 --- a/products/earn/features/withdraw.mdx +++ b/features/transaction-management/earn/withdraw.mdx @@ -1,7 +1,6 @@ --- title: "Withdraw from a vault" description: "Withdraw any amount, just the yield, or the entire position from an enabled yield vault." -noindex: true mode: wide --- @@ -26,7 +25,7 @@ A withdrawal moves assets from your organization's fee wrapper back to the user' - Address of the deployed fee wrapper holding the position, from [`earn_positions`](/products/earn/features/positions). + Address of the deployed fee wrapper holding the position, from [`earn_positions`](/features/transaction-management/earn/positions). @@ -119,11 +118,11 @@ The result contains only a poll handle: A `MAX` withdrawal resets the position's lifetime accounting: after it confirms, `totalDeposited` and `totalWithdrawn` in - [`earn_positions`](/products/earn/features/positions) start again from zero + [`earn_positions`](/features/transaction-management/earn/positions) start again from zero for that wrapper. -Positions in wrappers you have since replaced (after a [fee change](/products/earn/features/deploy-wrapper#choose-your-fee-configuration)) remain withdrawable. Target the old wrapper's address. +Positions in wrappers you have since replaced (after a [fee change](/features/transaction-management/earn/deploy-wrapper#choose-your-fee-configuration)) remain withdrawable. Target the old wrapper's address. ## Claiming yield only @@ -200,8 +199,8 @@ const status = await client.request("/public/v1/query/earn_withdraw_status", { ## Gas -Identical to deposits: `sponsor: true` uses Gas Station (Pro plan or higher); otherwise the `signWith` wallet pays gas natively. See [Gas: sponsored vs self-funded](/products/earn/features/deposit#gas-sponsored-vs-self-funded). +Identical to deposits: `sponsor: true` uses Gas Station (Pro plan or higher); otherwise the `signWith` wallet pays gas natively. See [Gas: sponsored vs self-funded](/features/transaction-management/earn/deposit#gas-sponsored-vs-self-funded). ## Next steps -- [Track positions](/products/earn/features/positions) to verify the position after withdrawing +- [Track positions](/features/transaction-management/earn/positions) to verify the position after withdrawing diff --git a/snippets/shared/earn-beta-note.mdx b/snippets/shared/earn-beta-note.mdx index 0b38cca9..17d0a85a 100644 --- a/snippets/shared/earn-beta-note.mdx +++ b/snippets/shared/earn-beta-note.mdx @@ -3,7 +3,7 @@ [contact us](https://www.turnkey.com/contact-us) for access. For sub-organizations, access is checked on the parent organization. Earn requires a Pay-As-You-Go plan or higher, and gas sponsorship for Earn - requires a Pro plan or higher. The endpoints are live but not yet part of - the generated API reference or the SDKs, so these pages are the reference - during the beta. + requires a Pro plan or higher. The endpoints are live, but the generated + API reference and SDK methods are coming with general availability, so + these pages are the reference during the beta. From 6306c25153c9bfca34901a33bc2fdcdb6c941b1c Mon Sep 17 00:00:00 2001 From: Eric Velazquez Date: Fri, 24 Jul 2026 19:51:32 +0200 Subject: [PATCH 03/15] cleanup docs --- snippets/shared/earn-beta-note.mdx | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/snippets/shared/earn-beta-note.mdx b/snippets/shared/earn-beta-note.mdx index 17d0a85a..f59b4d69 100644 --- a/snippets/shared/earn-beta-note.mdx +++ b/snippets/shared/earn-beta-note.mdx @@ -1,9 +1,4 @@ - Earn is in private beta. Turnkey enables it per organization, so - [contact us](https://www.turnkey.com/contact-us) for access. For - sub-organizations, access is checked on the parent organization. Earn - requires a Pay-As-You-Go plan or higher, and gas sponsorship for Earn - requires a Pro plan or higher. The endpoints are live, but the generated - API reference and SDK methods are coming with general availability, so - these pages are the reference during the beta. + Earn is in private beta. [Contact us](https://www.turnkey.com/contact-us) + to enable it for your organization. From 9f3ce704bad62043278161552c028698f2b69503 Mon Sep 17 00:00:00 2001 From: "mintlify[bot]" <109931778+mintlify[bot]@users.noreply.github.com> Date: Wed, 29 Jul 2026 17:38:25 +0000 Subject: [PATCH 04/15] Updated mintlify pages - Updated docs.json Mintlify-Source: dashboard-editor --- docs.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs.json b/docs.json index 5a0e548d..08eed0e2 100644 --- a/docs.json +++ b/docs.json @@ -454,7 +454,8 @@ "features/transaction-management/earn/withdraw", "features/transaction-management/earn/positions", "features/transaction-management/earn/end-to-end-example" - ] + ], + "tag": "Early Access" } ] }, From b2cd3f0e915991207007d75a4d84d46af673f576 Mon Sep 17 00:00:00 2001 From: "mintlify[bot]" <109931778+mintlify[bot]@users.noreply.github.com> Date: Wed, 29 Jul 2026 18:31:02 +0000 Subject: [PATCH 05/15] Updated mintlify pages - Updated snippets/shared/earn-beta-note.mdx Mintlify-Source: dashboard-editor --- snippets/shared/earn-beta-note.mdx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/snippets/shared/earn-beta-note.mdx b/snippets/shared/earn-beta-note.mdx index f59b4d69..588cb1af 100644 --- a/snippets/shared/earn-beta-note.mdx +++ b/snippets/shared/earn-beta-note.mdx @@ -1,4 +1,3 @@ - Earn is in private beta. [Contact us](https://www.turnkey.com/contact-us) - to enable it for your organization. - + Earn is in early access. [Contact us](https://www.turnkey.com/contact-us) to enable it for your organization. + \ No newline at end of file From 66dd04ddd35253c37e80eef46dd99baff69b4781 Mon Sep 17 00:00:00 2001 From: Eric Velazquez Date: Thu, 30 Jul 2026 12:53:05 -0700 Subject: [PATCH 06/15] update docs --- .../activities/broadcast-svm-transaction.mdx | 44 +- api-reference/activities/claim-earn-fees.mdx | 189 + .../activities/create-a-tvc-deployment.mdx | 16 +- .../activities/deploy-earn-wrapper.mdx | 230 + .../activities/deposit-into-earn-vault.mdx | 232 + .../remove-organization-feature.mdx | 6 +- .../activities/set-earn-wrapper-state.mdx | 203 + .../activities/set-organization-feature.mdx | 6 +- .../activities/withdraw-from-earn-vault.mdx | 232 + api-reference/queries/get-activity.mdx | 506 +- api-reference/queries/get-configs.mdx | 2 +- .../queries/get-earn-deploy-status.mdx | 81 + .../queries/get-earn-deposit-status.mdx | 81 + .../queries/get-earn-enabled-vaults.mdx | 171 + api-reference/queries/get-earn-positions.mdx | 148 + .../queries/get-earn-vault-catalog.mdx | 189 + .../queries/get-earn-withdraw-status.mdx | 81 + api-reference/queries/list-activities.mdx | 595 +- docs.json | 13 +- features/transaction-management/earn.mdx | 37 +- .../earn/deploy-wrapper.mdx | 137 +- .../transaction-management/earn/deposit.mdx | 143 +- .../earn/end-to-end-example.mdx | 12 +- .../transaction-management/earn/positions.mdx | 71 +- .../earn/vault-catalog.mdx | 171 +- .../transaction-management/earn/withdraw.mdx | 152 +- public_api.swagger.json | 5480 ++++++++++++++--- scripts/openapi-gen/openapi.json | 2024 +++++- .../utils/mdx-generator/generator.ts | 14 +- snippets/data/endpoint-tags.mdx | 243 + 30 files changed, 9776 insertions(+), 1733 deletions(-) create mode 100644 api-reference/activities/claim-earn-fees.mdx create mode 100644 api-reference/activities/deploy-earn-wrapper.mdx create mode 100644 api-reference/activities/deposit-into-earn-vault.mdx create mode 100644 api-reference/activities/set-earn-wrapper-state.mdx create mode 100644 api-reference/activities/withdraw-from-earn-vault.mdx create mode 100644 api-reference/queries/get-earn-deploy-status.mdx create mode 100644 api-reference/queries/get-earn-deposit-status.mdx create mode 100644 api-reference/queries/get-earn-enabled-vaults.mdx create mode 100644 api-reference/queries/get-earn-positions.mdx create mode 100644 api-reference/queries/get-earn-vault-catalog.mdx create mode 100644 api-reference/queries/get-earn-withdraw-status.mdx diff --git a/api-reference/activities/broadcast-svm-transaction.mdx b/api-reference/activities/broadcast-svm-transaction.mdx index 20ec8ce7..d0d41471 100644 --- a/api-reference/activities/broadcast-svm-transaction.mdx +++ b/api-reference/activities/broadcast-svm-transaction.mdx @@ -80,26 +80,32 @@ The activity type The intent of the activity - - The solSendTransactionIntent object - - -Base64-encoded serialized unsigned Solana transaction + + The solSendTransactionIntentV2 object + + +Hex-encoded serialized unsigned Solana transaction (full wire format with zeroed signature placeholders) - -A wallet or private key address to sign with. This does not support private key IDs. + + Ordered Solana signer addresses Turnkey signs with. Between 1 and 16 signers. For sponsored transactions this must list every required signer of the transaction in transaction order. + + +item field - + + + + Whether to sponsor this transaction via Gas Station. - + CAIP-2 chain ID (e.g., 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' for Solana mainnet). Human-readable Solana aliases ('solana:mainnet', 'solana:devnet') are also accepted and normalized to canonical CAIP-2 values. Enum options: `solana:mainnet`, `solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp`, `solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d`, `solana:devnet`, `solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1`, `solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1wcaWoxPkrZBG` - -user-provided blockhash for replay protection / deadline control. If omitted and sponsor=true, we fetch a fresh blockhash during execution + +User-provided blockhash for replay protection / deadline control. If provided, it is used as-is, including for sponsored transactions (the transaction is only broadcastable while the blockhash is current). If omitted and sponsor=true, a fresh blockhash is fetched during execution. @@ -110,10 +116,10 @@ user-provided blockhash for replay protection / deadline control. If omitted and The result of the activity - - The solSendTransactionResult object - - + + The solSendTransactionResultV2 object + + The send_transaction_status ID associated with the transaction submission @@ -204,16 +210,18 @@ const response = await turnkeyClient.apiClient().solSendTransaction({ "status": "", "type": "", "intent": { - "solSendTransactionIntent": { + "solSendTransactionIntentV2": { "unsignedTransaction": "", - "signWith": "", + "signWiths": [ + "" + ], "sponsor": "", "caip2": "", "recentBlockhash": "" } }, "result": { - "solSendTransactionResult": { + "solSendTransactionResultV2": { "sendTransactionStatusId": "" } }, diff --git a/api-reference/activities/claim-earn-fees.mdx b/api-reference/activities/claim-earn-fees.mdx new file mode 100644 index 00000000..9df26d71 --- /dev/null +++ b/api-reference/activities/claim-earn-fees.mdx @@ -0,0 +1,189 @@ +--- +title: "Claim earn fees" +description: "Claim earn fees through the activity pipeline." +--- + +import { Authorizations } from "/snippets/api/authorizations.mdx"; +import { H3Bordered } from "/snippets/h3-bordered.mdx"; +import { NestedParam } from "/snippets/nested-param.mdx"; +import { EndpointPath } from "/snippets/api/endpoint.mdx"; + + + + + + + + + +Enum options: `ACTIVITY_TYPE_CLAIM_EARN_FEES` + + + + +Timestamp (in milliseconds) of the request, used to verify liveness of user requests. + + + + +Unique identifier for a given Organization. + + + +

The parameters object containing the specific intent data for this activity.

+ + + Address of the deployed Earn wrapper to claim fees for. Must be one of the org's deployed wrappers. + + +
+ + +Enable to have your activity generate and return App Proofs, enabling verifiability. + + + + +A successful response returns the following fields: + + + The activity object containing type, intent, and result + + +Unique identifier for a given Activity object. + + +Unique identifier for a given Organization. + + +The activity status + + +The activity type + + + The intent of the activity + + + The claimEarnFeesIntent object + + +Address of the deployed Earn wrapper to claim fees for. Must be one of the org's deployed wrappers. + + + + + + + + + The result of the activity + + + The claimEarnFeesResult object + + +Identifier to poll claim status and tx hash via GetClaimEarnFeesStatus. + + + + + + + + +A list of objects representing a particular User's approval or rejection of a Consensus request, including all relevant metadata. + + +An artifact verifying a User's action. + + +Whether the activity can be approved. + + +Whether the activity can be rejected. + + +The creation timestamp. + + +The last update timestamp. + + + + + + + +```bash title="cURL" +curl --request POST \ + --url https://api.turnkey.com/public/v1/submit/claim_earn_fees \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header "X-Stamp: (see Authorizations)" \ + --data '{ + "type": "ACTIVITY_TYPE_CLAIM_EARN_FEES", + "timestampMs": " (e.g. 1746736509954)", + "organizationId": " (Your Organization ID)", + "parameters": { + "wrapperAddress": "" + } +}' +``` + +```javascript title="JavaScript" +import { Turnkey } from "@turnkey/sdk-server"; + +const turnkeyClient = new Turnkey({ + apiBaseUrl: "https://api.turnkey.com", + apiPublicKey: process.env.API_PUBLIC_KEY!, + apiPrivateKey: process.env.API_PRIVATE_KEY!, + defaultOrganizationId: process.env.ORGANIZATION_ID!, +}); + +const response = await turnkeyClient.apiClient().claimEarnFees({ + wrapperAddress: " (Address of the deployed Earn wrapper to claim fees for. Must be one of the org's deployed wrappers.)" +}); +``` + + + + + +```json 200 +{ + "activity": { + "id": "", + "status": "ACTIVITY_STATUS_COMPLETED", + "type": "ACTIVITY_TYPE_CLAIM_EARN_FEES", + "organizationId": "", + "timestampMs": " (e.g. 1746736509954)", + "result": { + "activity": { + "id": "", + "organizationId": "", + "status": "", + "type": "", + "intent": { + "claimEarnFeesIntent": { + "wrapperAddress": "" + } + }, + "result": { + "claimEarnFeesResult": { + "claimRequestId": "" + } + }, + "votes": "", + "fingerprint": "", + "canApprove": "", + "canReject": "", + "createdAt": "", + "updatedAt": "" + } + } + } +} +``` + + diff --git a/api-reference/activities/create-a-tvc-deployment.mdx b/api-reference/activities/create-a-tvc-deployment.mdx index 666d27cf..a11e483c 100644 --- a/api-reference/activities/create-a-tvc-deployment.mdx +++ b/api-reference/activities/create-a-tvc-deployment.mdx @@ -82,6 +82,10 @@ Unique identifier for a given Organization. Port to use for public ingress. + + + Optional desired replica count for this deployment. +
@@ -153,6 +157,9 @@ Port to use for health checks.
Port to use for public ingress. + + +Optional desired replica count for this deployment.
@@ -226,7 +233,8 @@ curl --request POST \ "debugMode": "", "healthCheckType": "", "healthCheckPort": "", - "publicIngressPort": "" + "publicIngressPort": "", + "replicas": "" } }' ``` @@ -253,7 +261,8 @@ const response = await turnkeyClient.apiClient().createTvcDeployment({ debugMode: true // Optional flag to indicate whether to deploy the TVC app in debug mode, which includes additional logging and debugging tools. Default is false., healthCheckType: "" // healthCheckType field, healthCheckPort: 0 // Port to use for health checks., - publicIngressPort: 0 // Port to use for public ingress. + publicIngressPort: 0 // Port to use for public ingress., + replicas: 0 // Optional desired replica count for this deployment. }); ``` @@ -290,7 +299,8 @@ const response = await turnkeyClient.apiClient().createTvcDeployment({ "debugMode": "", "healthCheckType": "", "healthCheckPort": "", - "publicIngressPort": "" + "publicIngressPort": "", + "replicas": "" } }, "result": { diff --git a/api-reference/activities/deploy-earn-wrapper.mdx b/api-reference/activities/deploy-earn-wrapper.mdx new file mode 100644 index 00000000..c829b328 --- /dev/null +++ b/api-reference/activities/deploy-earn-wrapper.mdx @@ -0,0 +1,230 @@ +--- +title: "Deploy Earn wrapper" +description: "Enable a yield vault for an organization by deploying its fee wrapper. Must be called before any deposits into the vault." +--- + +import { Authorizations } from "/snippets/api/authorizations.mdx"; +import { H3Bordered } from "/snippets/h3-bordered.mdx"; +import { NestedParam } from "/snippets/nested-param.mdx"; +import { EndpointPath } from "/snippets/api/endpoint.mdx"; + + + + + + + + + +Enum options: `ACTIVITY_TYPE_EARN_DEPLOY_WRAPPER` + + + + +Timestamp (in milliseconds) of the request, used to verify liveness of user requests. + + + + +Unique identifier for a given Organization. + + + +

The parameters object containing the specific intent data for this activity.

+ + + Address of the underlying yield vault to wrap (from the ListEarnVaults catalog). + + + + Enum options: `eip155:1`, `eip155:8453`, `eip155:42161`, `eip155:137`, `eip155:56`, `eip155:4217` + + + + Your performance fee on gross yield, in basis points (e.g., '2000' for 20%). Your fee plus Turnkey's fee cannot exceed 50% of yield. + + + + The wallet address that receives the client's fee payouts on-chain. Must be a Turnkey-managed wallet address. + + +
+ + +Enable to have your activity generate and return App Proofs, enabling verifiability. + + + + +A successful response returns the following fields: + + + The activity object containing type, intent, and result + + +Unique identifier for a given Activity object. + + +Unique identifier for a given Organization. + + +The activity status + + +The activity type + + + The intent of the activity + + + The earnDeployWrapperIntent object + + +Address of the underlying yield vault to wrap (from the ListEarnVaults catalog). + + +CAIP-2 chain ID the vault lives on (e.g., 'eip155:8453' for Base). + +Enum options: `eip155:1`, `eip155:8453`, `eip155:42161`, `eip155:137`, `eip155:56`, `eip155:4217` + + + +Your performance fee on gross yield, in basis points (e.g., '2000' for 20%). Your fee plus Turnkey's fee cannot exceed 50% of yield. + + +The wallet address that receives the client's fee payouts on-chain. Must be a Turnkey-managed wallet address. + + + + + + + + + The result of the activity + + + The earnDeployWrapperResult object + + +Address of the deployed fee wrapper (the deposit target). + + +Address of the deployed fee splitter (PaymentSplitter for Morpho, RevenueSplitterOwner for Aave). + + +Identifier to poll deploy status. + + + + + + + + +A list of objects representing a particular User's approval or rejection of a Consensus request, including all relevant metadata. + + +An artifact verifying a User's action. + + +Whether the activity can be approved. + + +Whether the activity can be rejected. + + +The creation timestamp. + + +The last update timestamp. + + + + + + + +```bash title="cURL" +curl --request POST \ + --url https://api.turnkey.com/public/v1/submit/earn_deploy_wrapper \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header "X-Stamp: (see Authorizations)" \ + --data '{ + "type": "ACTIVITY_TYPE_EARN_DEPLOY_WRAPPER", + "timestampMs": " (e.g. 1746736509954)", + "organizationId": " (Your Organization ID)", + "parameters": { + "vaultAddress": "", + "chainCaip2": "", + "clientFeeBps": "", + "clientFeeWallet": "" + } +}' +``` + +```javascript title="JavaScript" +import { Turnkey } from "@turnkey/sdk-server"; + +const turnkeyClient = new Turnkey({ + apiBaseUrl: "https://api.turnkey.com", + apiPublicKey: process.env.API_PUBLIC_KEY!, + apiPrivateKey: process.env.API_PRIVATE_KEY!, + defaultOrganizationId: process.env.ORGANIZATION_ID!, +}); + +const response = await turnkeyClient.apiClient().earnDeployWrapper({ + vaultAddress: " (Address of the underlying yield vault to wrap (from the ListEarnVaults catalog).)", + chainCaip2: "" // CAIP-2 chain ID the vault lives on (e.g., 'eip155:8453' for Base)., + clientFeeBps: " (Your performance fee on gross yield, in basis points (e.g., '2000' for 20%). Your fee plus Turnkey's fee cannot exceed 50% of yield.)", + clientFeeWallet: " (The wallet address that receives the client's fee payouts on-chain. Must be a Turnkey-managed wallet address.)" +}); +``` + + + + + +```json 200 +{ + "activity": { + "id": "", + "status": "ACTIVITY_STATUS_COMPLETED", + "type": "ACTIVITY_TYPE_EARN_DEPLOY_WRAPPER", + "organizationId": "", + "timestampMs": " (e.g. 1746736509954)", + "result": { + "activity": { + "id": "", + "organizationId": "", + "status": "", + "type": "", + "intent": { + "earnDeployWrapperIntent": { + "vaultAddress": "", + "chainCaip2": "", + "clientFeeBps": "", + "clientFeeWallet": "" + } + }, + "result": { + "earnDeployWrapperResult": { + "wrapperAddress": "", + "splitterAddress": "", + "deployRequestId": "" + } + }, + "votes": "", + "fingerprint": "", + "canApprove": "", + "canReject": "", + "createdAt": "", + "updatedAt": "" + } + } + } +} +``` + + diff --git a/api-reference/activities/deposit-into-earn-vault.mdx b/api-reference/activities/deposit-into-earn-vault.mdx new file mode 100644 index 00000000..35bd9e13 --- /dev/null +++ b/api-reference/activities/deposit-into-earn-vault.mdx @@ -0,0 +1,232 @@ +--- +title: "Deposit into Earn vault" +description: "Deposit assets from a wallet into an enabled yield vault." +--- + +import { Authorizations } from "/snippets/api/authorizations.mdx"; +import { H3Bordered } from "/snippets/h3-bordered.mdx"; +import { NestedParam } from "/snippets/nested-param.mdx"; +import { EndpointPath } from "/snippets/api/endpoint.mdx"; + + + + + + + + + +Enum options: `ACTIVITY_TYPE_EARN_DEPOSIT` + + + + +Timestamp (in milliseconds) of the request, used to verify liveness of user requests. + + + + +Unique identifier for a given Organization. + + + +

The parameters object containing the specific intent data for this activity.

+ + + Address of the deployed Earn wrapper to deposit into, from ListEarnVaults/ListEarnPositions. Must be one of the org's deployed wrappers. + + + + A Wallet account address or Private Key address to deposit from and sign with. Must be an on-chain address; Private Key identifiers are not supported. + + + + Amount of the underlying asset to deposit, in raw on-chain units (e.g., '1000000' for 1 USDC at 6 decimals). + + + + Enum options: `eip155:1`, `eip155:8453`, `eip155:42161`, `eip155:137`, `eip155:56`, `eip155:4217` + + + + Whether to sponsor this transaction via Gas Station. + + +
+ + +Enable to have your activity generate and return App Proofs, enabling verifiability. + + + + +A successful response returns the following fields: + + + The activity object containing type, intent, and result + + +Unique identifier for a given Activity object. + + +Unique identifier for a given Organization. + + +The activity status + + +The activity type + + + The intent of the activity + + + The earnDepositIntent object + + +Address of the deployed Earn wrapper to deposit into, from ListEarnVaults/ListEarnPositions. Must be one of the org's deployed wrappers. + + +A Wallet account address or Private Key address to deposit from and sign with. Must be an on-chain address; Private Key identifiers are not supported. + + +Amount of the underlying asset to deposit, in raw on-chain units (e.g., '1000000' for 1 USDC at 6 decimals). + + +CAIP-2 chain ID the vault lives on (e.g., 'eip155:8453' for Base). + +Enum options: `eip155:1`, `eip155:8453`, `eip155:42161`, `eip155:137`, `eip155:56`, `eip155:4217` + + + +Whether to sponsor this transaction via Gas Station. + + + + + + + + + The result of the activity + + + The earnDepositResult object + + +Identifier to poll deposit status and tx hash via GetEarnDepositStatus. + + + + + + + + +A list of objects representing a particular User's approval or rejection of a Consensus request, including all relevant metadata. + + +An artifact verifying a User's action. + + +Whether the activity can be approved. + + +Whether the activity can be rejected. + + +The creation timestamp. + + +The last update timestamp. + + + + + + + +```bash title="cURL" +curl --request POST \ + --url https://api.turnkey.com/public/v1/submit/earn_deposit \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header "X-Stamp: (see Authorizations)" \ + --data '{ + "type": "ACTIVITY_TYPE_EARN_DEPOSIT", + "timestampMs": " (e.g. 1746736509954)", + "organizationId": " (Your Organization ID)", + "parameters": { + "wrapperAddress": "", + "signWith": "", + "assets": "", + "chainCaip2": "", + "sponsor": "" + } +}' +``` + +```javascript title="JavaScript" +import { Turnkey } from "@turnkey/sdk-server"; + +const turnkeyClient = new Turnkey({ + apiBaseUrl: "https://api.turnkey.com", + apiPublicKey: process.env.API_PUBLIC_KEY!, + apiPrivateKey: process.env.API_PRIVATE_KEY!, + defaultOrganizationId: process.env.ORGANIZATION_ID!, +}); + +const response = await turnkeyClient.apiClient().earnDeposit({ + wrapperAddress: " (Address of the deployed Earn wrapper to deposit into, from ListEarnVaults/ListEarnPositions. Must be one of the org's deployed wrappers.)", + signWith: " (A Wallet account address or Private Key address to deposit from and sign with. Must be an on-chain address; Private Key identifiers are not supported.)", + assets: " (Amount of the underlying asset to deposit, in raw on-chain units (e.g., '1000000' for 1 USDC at 6 decimals).)", + chainCaip2: "" // CAIP-2 chain ID the vault lives on (e.g., 'eip155:8453' for Base)., + sponsor: true // Whether to sponsor this transaction via Gas Station. +}); +``` + + + + + +```json 200 +{ + "activity": { + "id": "", + "status": "ACTIVITY_STATUS_COMPLETED", + "type": "ACTIVITY_TYPE_EARN_DEPOSIT", + "organizationId": "", + "timestampMs": " (e.g. 1746736509954)", + "result": { + "activity": { + "id": "", + "organizationId": "", + "status": "", + "type": "", + "intent": { + "earnDepositIntent": { + "wrapperAddress": "", + "signWith": "", + "assets": "", + "chainCaip2": "", + "sponsor": "" + } + }, + "result": { + "earnDepositResult": { + "depositRequestId": "" + } + }, + "votes": "", + "fingerprint": "", + "canApprove": "", + "canReject": "", + "createdAt": "", + "updatedAt": "" + } + } + } +} +``` + + diff --git a/api-reference/activities/remove-organization-feature.mdx b/api-reference/activities/remove-organization-feature.mdx index 4a7a000d..b9977ac3 100644 --- a/api-reference/activities/remove-organization-feature.mdx +++ b/api-reference/activities/remove-organization-feature.mdx @@ -33,7 +33,7 @@ Unique identifier for a given Organization.

The parameters object containing the specific intent data for this activity.

- Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED` + Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_SWAP_CONFIG`, `FEATURE_NAME_EARN_CONFIG` @@ -70,7 +70,7 @@ The activity type name field -Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED` +Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_SWAP_CONFIG`, `FEATURE_NAME_EARN_CONFIG` @@ -91,7 +91,7 @@ Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_OR name field -Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED` +Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_SWAP_CONFIG`, `FEATURE_NAME_EARN_CONFIG` diff --git a/api-reference/activities/set-earn-wrapper-state.mdx b/api-reference/activities/set-earn-wrapper-state.mdx new file mode 100644 index 00000000..856e15e8 --- /dev/null +++ b/api-reference/activities/set-earn-wrapper-state.mdx @@ -0,0 +1,203 @@ +--- +title: "Set Earn wrapper state" +description: "Enable or disable deposits to a deployed Earn wrapper. Withdrawals are always allowed." +--- + +import { Authorizations } from "/snippets/api/authorizations.mdx"; +import { H3Bordered } from "/snippets/h3-bordered.mdx"; +import { NestedParam } from "/snippets/nested-param.mdx"; +import { EndpointPath } from "/snippets/api/endpoint.mdx"; + + + + + + + + + +Enum options: `ACTIVITY_TYPE_EARN_SET_WRAPPER_STATE` + + + + +Timestamp (in milliseconds) of the request, used to verify liveness of user requests. + + + + +Unique identifier for a given Organization. + + + +

The parameters object containing the specific intent data for this activity.

+ + + Address of the deployed Earn wrapper to update, from ListEarnVaults/ListEarnPositions. Must be one of the org's deployed wrappers. + + + + When true, deposits to this wrapper are rejected; withdrawals are unaffected. Set to false to re-enable deposits. + + +
+ + +Enable to have your activity generate and return App Proofs, enabling verifiability. + + + + +A successful response returns the following fields: + + + The activity object containing type, intent, and result + + +Unique identifier for a given Activity object. + + +Unique identifier for a given Organization. + + +The activity status + + +The activity type + + + The intent of the activity + + + The earnSetWrapperStateIntent object + + +Address of the deployed Earn wrapper to update, from ListEarnVaults/ListEarnPositions. Must be one of the org's deployed wrappers. + + +When true, deposits to this wrapper are rejected; withdrawals are unaffected. Set to false to re-enable deposits. + + + + + + + + + The result of the activity + + + The earnSetWrapperStateResult object + + +Address of the updated Earn wrapper. + + +The wrapper's deposit state after this activity. + + + + + + + + +A list of objects representing a particular User's approval or rejection of a Consensus request, including all relevant metadata. + + +An artifact verifying a User's action. + + +Whether the activity can be approved. + + +Whether the activity can be rejected. + + +The creation timestamp. + + +The last update timestamp. + + + + + + + +```bash title="cURL" +curl --request POST \ + --url https://api.turnkey.com/public/v1/submit/earn_set_wrapper_state \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header "X-Stamp: (see Authorizations)" \ + --data '{ + "type": "ACTIVITY_TYPE_EARN_SET_WRAPPER_STATE", + "timestampMs": " (e.g. 1746736509954)", + "organizationId": " (Your Organization ID)", + "parameters": { + "wrapperAddress": "", + "depositsDisabled": "" + } +}' +``` + +```javascript title="JavaScript" +import { Turnkey } from "@turnkey/sdk-server"; + +const turnkeyClient = new Turnkey({ + apiBaseUrl: "https://api.turnkey.com", + apiPublicKey: process.env.API_PUBLIC_KEY!, + apiPrivateKey: process.env.API_PRIVATE_KEY!, + defaultOrganizationId: process.env.ORGANIZATION_ID!, +}); + +const response = await turnkeyClient.apiClient().earnSetWrapperState({ + wrapperAddress: " (Address of the deployed Earn wrapper to update, from ListEarnVaults/ListEarnPositions. Must be one of the org's deployed wrappers.)", + depositsDisabled: true // When true, deposits to this wrapper are rejected; withdrawals are unaffected. Set to false to re-enable deposits. +}); +``` + + + + + +```json 200 +{ + "activity": { + "id": "", + "status": "ACTIVITY_STATUS_COMPLETED", + "type": "ACTIVITY_TYPE_EARN_SET_WRAPPER_STATE", + "organizationId": "", + "timestampMs": " (e.g. 1746736509954)", + "result": { + "activity": { + "id": "", + "organizationId": "", + "status": "", + "type": "", + "intent": { + "earnSetWrapperStateIntent": { + "wrapperAddress": "", + "depositsDisabled": "" + } + }, + "result": { + "earnSetWrapperStateResult": { + "wrapperAddress": "", + "depositsDisabled": "" + } + }, + "votes": "", + "fingerprint": "", + "canApprove": "", + "canReject": "", + "createdAt": "", + "updatedAt": "" + } + } + } +} +``` + + diff --git a/api-reference/activities/set-organization-feature.mdx b/api-reference/activities/set-organization-feature.mdx index dd880f54..59caeb75 100644 --- a/api-reference/activities/set-organization-feature.mdx +++ b/api-reference/activities/set-organization-feature.mdx @@ -33,7 +33,7 @@ Unique identifier for a given Organization.

The parameters object containing the specific intent data for this activity.

- Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED` + Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_SWAP_CONFIG`, `FEATURE_NAME_EARN_CONFIG` @@ -74,7 +74,7 @@ The activity type name field -Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED` +Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_SWAP_CONFIG`, `FEATURE_NAME_EARN_CONFIG` @@ -98,7 +98,7 @@ Optional value for the feature. Will override existing values if feature is alre name field -Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED` +Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_SWAP_CONFIG`, `FEATURE_NAME_EARN_CONFIG` diff --git a/api-reference/activities/withdraw-from-earn-vault.mdx b/api-reference/activities/withdraw-from-earn-vault.mdx new file mode 100644 index 00000000..d7e71800 --- /dev/null +++ b/api-reference/activities/withdraw-from-earn-vault.mdx @@ -0,0 +1,232 @@ +--- +title: "Withdraw from Earn vault" +description: "Withdraw assets or redeem shares from an enabled yield vault." +--- + +import { Authorizations } from "/snippets/api/authorizations.mdx"; +import { H3Bordered } from "/snippets/h3-bordered.mdx"; +import { NestedParam } from "/snippets/nested-param.mdx"; +import { EndpointPath } from "/snippets/api/endpoint.mdx"; + + + + + + + + + +Enum options: `ACTIVITY_TYPE_EARN_WITHDRAW` + + + + +Timestamp (in milliseconds) of the request, used to verify liveness of user requests. + + + + +Unique identifier for a given Organization. + + + +

The parameters object containing the specific intent data for this activity.

+ + + Address of the deployed Earn wrapper holding the position to withdraw from, from ListEarnPositions. Must be one of the org's deployed wrappers. + + + + A Wallet account address or Private Key address to withdraw to and sign with. Must be an on-chain address; Private Key identifiers are not supported. + + + + Enum options: `eip155:1`, `eip155:8453`, `eip155:42161`, `eip155:137`, `eip155:56`, `eip155:4217` + + + + Whether to sponsor this transaction via Gas Station. + + + + The amount of the underlying asset to withdraw, in raw on-chain units. Pass 'MAX' to withdraw the entire position. + + +
+ + +Enable to have your activity generate and return App Proofs, enabling verifiability. + + + + +A successful response returns the following fields: + + + The activity object containing type, intent, and result + + +Unique identifier for a given Activity object. + + +Unique identifier for a given Organization. + + +The activity status + + +The activity type + + + The intent of the activity + + + The earnWithdrawIntent object + + +Address of the deployed Earn wrapper holding the position to withdraw from, from ListEarnPositions. Must be one of the org's deployed wrappers. + + +A Wallet account address or Private Key address to withdraw to and sign with. Must be an on-chain address; Private Key identifiers are not supported. + + +CAIP-2 chain ID the vault lives on (e.g., 'eip155:8453' for Base). + +Enum options: `eip155:1`, `eip155:8453`, `eip155:42161`, `eip155:137`, `eip155:56`, `eip155:4217` + + + +Whether to sponsor this transaction via Gas Station. + + +The amount of the underlying asset to withdraw, in raw on-chain units. Pass 'MAX' to withdraw the entire position. + + + + + + + + + The result of the activity + + + The earnWithdrawResult object + + +Identifier to poll withdrawal status and tx hash via GetEarnWithdrawStatus. + + + + + + + + +A list of objects representing a particular User's approval or rejection of a Consensus request, including all relevant metadata. + + +An artifact verifying a User's action. + + +Whether the activity can be approved. + + +Whether the activity can be rejected. + + +The creation timestamp. + + +The last update timestamp. + + + + + + + +```bash title="cURL" +curl --request POST \ + --url https://api.turnkey.com/public/v1/submit/earn_withdraw \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header "X-Stamp: (see Authorizations)" \ + --data '{ + "type": "ACTIVITY_TYPE_EARN_WITHDRAW", + "timestampMs": " (e.g. 1746736509954)", + "organizationId": " (Your Organization ID)", + "parameters": { + "wrapperAddress": "", + "signWith": "", + "chainCaip2": "", + "sponsor": "", + "amountValue": "" + } +}' +``` + +```javascript title="JavaScript" +import { Turnkey } from "@turnkey/sdk-server"; + +const turnkeyClient = new Turnkey({ + apiBaseUrl: "https://api.turnkey.com", + apiPublicKey: process.env.API_PUBLIC_KEY!, + apiPrivateKey: process.env.API_PRIVATE_KEY!, + defaultOrganizationId: process.env.ORGANIZATION_ID!, +}); + +const response = await turnkeyClient.apiClient().earnWithdraw({ + wrapperAddress: " (Address of the deployed Earn wrapper holding the position to withdraw from, from ListEarnPositions. Must be one of the org's deployed wrappers.)", + signWith: " (A Wallet account address or Private Key address to withdraw to and sign with. Must be an on-chain address; Private Key identifiers are not supported.)", + chainCaip2: "" // CAIP-2 chain ID the vault lives on (e.g., 'eip155:8453' for Base)., + sponsor: true // Whether to sponsor this transaction via Gas Station., + amountValue: " (The amount of the underlying asset to withdraw, in raw on-chain units. Pass 'MAX' to withdraw the entire position.)" +}); +``` + + + + + +```json 200 +{ + "activity": { + "id": "", + "status": "ACTIVITY_STATUS_COMPLETED", + "type": "ACTIVITY_TYPE_EARN_WITHDRAW", + "organizationId": "", + "timestampMs": " (e.g. 1746736509954)", + "result": { + "activity": { + "id": "", + "organizationId": "", + "status": "", + "type": "", + "intent": { + "earnWithdrawIntent": { + "wrapperAddress": "", + "signWith": "", + "chainCaip2": "", + "sponsor": "", + "amountValue": "" + } + }, + "result": { + "earnWithdrawResult": { + "withdrawRequestId": "" + } + }, + "votes": "", + "fingerprint": "", + "canApprove": "", + "canReject": "", + "createdAt": "", + "updatedAt": "" + } + } + } +} +``` + + diff --git a/api-reference/queries/get-activity.mdx b/api-reference/queries/get-activity.mdx index 783f09e4..8a95d1b3 100644 --- a/api-reference/queries/get-activity.mdx +++ b/api-reference/queries/get-activity.mdx @@ -46,7 +46,7 @@ Enum options: `ACTIVITY_STATUS_CREATED`, `ACTIVITY_STATUS_PENDING`, `ACTIVITY_ST type field -Enum options: `ACTIVITY_TYPE_CREATE_API_KEYS`, `ACTIVITY_TYPE_CREATE_USERS`, `ACTIVITY_TYPE_CREATE_PRIVATE_KEYS`, `ACTIVITY_TYPE_SIGN_RAW_PAYLOAD`, `ACTIVITY_TYPE_CREATE_INVITATIONS`, `ACTIVITY_TYPE_ACCEPT_INVITATION`, `ACTIVITY_TYPE_CREATE_POLICY`, `ACTIVITY_TYPE_DISABLE_PRIVATE_KEY`, `ACTIVITY_TYPE_DELETE_USERS`, `ACTIVITY_TYPE_DELETE_API_KEYS`, `ACTIVITY_TYPE_DELETE_INVITATION`, `ACTIVITY_TYPE_DELETE_ORGANIZATION`, `ACTIVITY_TYPE_DELETE_POLICY`, `ACTIVITY_TYPE_CREATE_USER_TAG`, `ACTIVITY_TYPE_DELETE_USER_TAGS`, `ACTIVITY_TYPE_CREATE_ORGANIZATION`, `ACTIVITY_TYPE_SIGN_TRANSACTION`, `ACTIVITY_TYPE_APPROVE_ACTIVITY`, `ACTIVITY_TYPE_REJECT_ACTIVITY`, `ACTIVITY_TYPE_DELETE_AUTHENTICATORS`, `ACTIVITY_TYPE_CREATE_AUTHENTICATORS`, `ACTIVITY_TYPE_CREATE_PRIVATE_KEY_TAG`, `ACTIVITY_TYPE_DELETE_PRIVATE_KEY_TAGS`, `ACTIVITY_TYPE_SET_PAYMENT_METHOD`, `ACTIVITY_TYPE_ACTIVATE_BILLING_TIER`, `ACTIVITY_TYPE_DELETE_PAYMENT_METHOD`, `ACTIVITY_TYPE_CREATE_POLICY_V2`, `ACTIVITY_TYPE_CREATE_POLICY_V3`, `ACTIVITY_TYPE_CREATE_API_ONLY_USERS`, `ACTIVITY_TYPE_UPDATE_ROOT_QUORUM`, `ACTIVITY_TYPE_UPDATE_USER_TAG`, `ACTIVITY_TYPE_UPDATE_PRIVATE_KEY_TAG`, `ACTIVITY_TYPE_CREATE_AUTHENTICATORS_V2`, `ACTIVITY_TYPE_CREATE_ORGANIZATION_V2`, `ACTIVITY_TYPE_CREATE_USERS_V2`, `ACTIVITY_TYPE_ACCEPT_INVITATION_V2`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V2`, `ACTIVITY_TYPE_UPDATE_ALLOWED_ORIGINS`, `ACTIVITY_TYPE_CREATE_PRIVATE_KEYS_V2`, `ACTIVITY_TYPE_UPDATE_USER`, `ACTIVITY_TYPE_UPDATE_POLICY`, `ACTIVITY_TYPE_SET_PAYMENT_METHOD_V2`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V3`, `ACTIVITY_TYPE_CREATE_WALLET`, `ACTIVITY_TYPE_CREATE_WALLET_ACCOUNTS`, `ACTIVITY_TYPE_INIT_USER_EMAIL_RECOVERY`, `ACTIVITY_TYPE_RECOVER_USER`, `ACTIVITY_TYPE_SET_ORGANIZATION_FEATURE`, `ACTIVITY_TYPE_REMOVE_ORGANIZATION_FEATURE`, `ACTIVITY_TYPE_SIGN_RAW_PAYLOAD_V2`, `ACTIVITY_TYPE_SIGN_TRANSACTION_V2`, `ACTIVITY_TYPE_EXPORT_PRIVATE_KEY`, `ACTIVITY_TYPE_EXPORT_WALLET`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V4`, `ACTIVITY_TYPE_EMAIL_AUTH`, `ACTIVITY_TYPE_EXPORT_WALLET_ACCOUNT`, `ACTIVITY_TYPE_INIT_IMPORT_WALLET`, `ACTIVITY_TYPE_IMPORT_WALLET`, `ACTIVITY_TYPE_INIT_IMPORT_PRIVATE_KEY`, `ACTIVITY_TYPE_IMPORT_PRIVATE_KEY`, `ACTIVITY_TYPE_CREATE_POLICIES`, `ACTIVITY_TYPE_SIGN_RAW_PAYLOADS`, `ACTIVITY_TYPE_CREATE_READ_ONLY_SESSION`, `ACTIVITY_TYPE_CREATE_OAUTH_PROVIDERS`, `ACTIVITY_TYPE_DELETE_OAUTH_PROVIDERS`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V5`, `ACTIVITY_TYPE_OAUTH`, `ACTIVITY_TYPE_CREATE_API_KEYS_V2`, `ACTIVITY_TYPE_CREATE_READ_WRITE_SESSION`, `ACTIVITY_TYPE_EMAIL_AUTH_V2`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V6`, `ACTIVITY_TYPE_DELETE_PRIVATE_KEYS`, `ACTIVITY_TYPE_DELETE_WALLETS`, `ACTIVITY_TYPE_CREATE_READ_WRITE_SESSION_V2`, `ACTIVITY_TYPE_DELETE_SUB_ORGANIZATION`, `ACTIVITY_TYPE_INIT_OTP_AUTH`, `ACTIVITY_TYPE_OTP_AUTH`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V7`, `ACTIVITY_TYPE_UPDATE_WALLET`, `ACTIVITY_TYPE_UPDATE_POLICY_V2`, `ACTIVITY_TYPE_CREATE_USERS_V3`, `ACTIVITY_TYPE_INIT_OTP_AUTH_V2`, `ACTIVITY_TYPE_INIT_OTP`, `ACTIVITY_TYPE_VERIFY_OTP`, `ACTIVITY_TYPE_OTP_LOGIN`, `ACTIVITY_TYPE_STAMP_LOGIN`, `ACTIVITY_TYPE_OAUTH_LOGIN`, `ACTIVITY_TYPE_UPDATE_USER_NAME`, `ACTIVITY_TYPE_UPDATE_USER_EMAIL`, `ACTIVITY_TYPE_UPDATE_USER_PHONE_NUMBER`, `ACTIVITY_TYPE_INIT_FIAT_ON_RAMP`, `ACTIVITY_TYPE_CREATE_SMART_CONTRACT_INTERFACE`, `ACTIVITY_TYPE_DELETE_SMART_CONTRACT_INTERFACE`, `ACTIVITY_TYPE_ENABLE_AUTH_PROXY`, `ACTIVITY_TYPE_DISABLE_AUTH_PROXY`, `ACTIVITY_TYPE_UPDATE_AUTH_PROXY_CONFIG`, `ACTIVITY_TYPE_CREATE_OAUTH2_CREDENTIAL`, `ACTIVITY_TYPE_UPDATE_OAUTH2_CREDENTIAL`, `ACTIVITY_TYPE_DELETE_OAUTH2_CREDENTIAL`, `ACTIVITY_TYPE_OAUTH2_AUTHENTICATE`, `ACTIVITY_TYPE_DELETE_WALLET_ACCOUNTS`, `ACTIVITY_TYPE_DELETE_POLICIES`, `ACTIVITY_TYPE_ETH_SEND_RAW_TRANSACTION`, `ACTIVITY_TYPE_ETH_SEND_TRANSACTION`, `ACTIVITY_TYPE_CREATE_FIAT_ON_RAMP_CREDENTIAL`, `ACTIVITY_TYPE_UPDATE_FIAT_ON_RAMP_CREDENTIAL`, `ACTIVITY_TYPE_DELETE_FIAT_ON_RAMP_CREDENTIAL`, `ACTIVITY_TYPE_EMAIL_AUTH_V3`, `ACTIVITY_TYPE_INIT_USER_EMAIL_RECOVERY_V2`, `ACTIVITY_TYPE_INIT_OTP_AUTH_V3`, `ACTIVITY_TYPE_INIT_OTP_V2`, `ACTIVITY_TYPE_UPSERT_GAS_USAGE_CONFIG`, `ACTIVITY_TYPE_CREATE_TVC_APP`, `ACTIVITY_TYPE_CREATE_TVC_DEPLOYMENT`, `ACTIVITY_TYPE_CREATE_TVC_MANIFEST_APPROVALS`, `ACTIVITY_TYPE_SOL_SEND_TRANSACTION`, `ACTIVITY_TYPE_INIT_OTP_V3`, `ACTIVITY_TYPE_VERIFY_OTP_V2`, `ACTIVITY_TYPE_OTP_LOGIN_V2`, `ACTIVITY_TYPE_UPDATE_ORGANIZATION_NAME`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V8`, `ACTIVITY_TYPE_CREATE_OAUTH_PROVIDERS_V2`, `ACTIVITY_TYPE_CREATE_USERS_V4`, `ACTIVITY_TYPE_CREATE_WEBHOOK_ENDPOINT`, `ACTIVITY_TYPE_UPDATE_WEBHOOK_ENDPOINT`, `ACTIVITY_TYPE_DELETE_WEBHOOK_ENDPOINT`, `ACTIVITY_TYPE_SET_IP_ALLOWLIST`, `ACTIVITY_TYPE_REMOVE_IP_ALLOWLIST`, `ACTIVITY_TYPE_UPDATE_TVC_APP_LIVE_DEPLOYMENT`, `ACTIVITY_TYPE_DELETE_TVC_DEPLOYMENT`, `ACTIVITY_TYPE_DELETE_TVC_APP_AND_DEPLOYMENTS`, `ACTIVITY_TYPE_RESTORE_TVC_DEPLOYMENT`, `ACTIVITY_TYPE_SPARK_SIGN_FROST`, `ACTIVITY_TYPE_SPARK_PREPARE_TRANSFER`, `ACTIVITY_TYPE_SPARK_CLAIM_TRANSFER`, `ACTIVITY_TYPE_SPARK_PREPARE_LIGHTNING_RECEIVE`, `ACTIVITY_TYPE_POST_TVC_QUORUM_KEY_SHARE`, `ACTIVITY_TYPE_ETH_SEND_TRANSACTION_V2`, `ACTIVITY_TYPE_CREATE_MFA_POLICY`, `ACTIVITY_TYPE_UPDATE_MFA_POLICY`, `ACTIVITY_TYPE_DELETE_MFA_POLICY`, `ACTIVITY_TYPE_CREATE_SESSION_PROFILE` +Enum options: `ACTIVITY_TYPE_CREATE_API_KEYS`, `ACTIVITY_TYPE_CREATE_USERS`, `ACTIVITY_TYPE_CREATE_PRIVATE_KEYS`, `ACTIVITY_TYPE_SIGN_RAW_PAYLOAD`, `ACTIVITY_TYPE_CREATE_INVITATIONS`, `ACTIVITY_TYPE_ACCEPT_INVITATION`, `ACTIVITY_TYPE_CREATE_POLICY`, `ACTIVITY_TYPE_DISABLE_PRIVATE_KEY`, `ACTIVITY_TYPE_DELETE_USERS`, `ACTIVITY_TYPE_DELETE_API_KEYS`, `ACTIVITY_TYPE_DELETE_INVITATION`, `ACTIVITY_TYPE_DELETE_ORGANIZATION`, `ACTIVITY_TYPE_DELETE_POLICY`, `ACTIVITY_TYPE_CREATE_USER_TAG`, `ACTIVITY_TYPE_DELETE_USER_TAGS`, `ACTIVITY_TYPE_CREATE_ORGANIZATION`, `ACTIVITY_TYPE_SIGN_TRANSACTION`, `ACTIVITY_TYPE_APPROVE_ACTIVITY`, `ACTIVITY_TYPE_REJECT_ACTIVITY`, `ACTIVITY_TYPE_DELETE_AUTHENTICATORS`, `ACTIVITY_TYPE_CREATE_AUTHENTICATORS`, `ACTIVITY_TYPE_CREATE_PRIVATE_KEY_TAG`, `ACTIVITY_TYPE_DELETE_PRIVATE_KEY_TAGS`, `ACTIVITY_TYPE_SET_PAYMENT_METHOD`, `ACTIVITY_TYPE_ACTIVATE_BILLING_TIER`, `ACTIVITY_TYPE_DELETE_PAYMENT_METHOD`, `ACTIVITY_TYPE_CREATE_POLICY_V2`, `ACTIVITY_TYPE_CREATE_POLICY_V3`, `ACTIVITY_TYPE_CREATE_API_ONLY_USERS`, `ACTIVITY_TYPE_UPDATE_ROOT_QUORUM`, `ACTIVITY_TYPE_UPDATE_USER_TAG`, `ACTIVITY_TYPE_UPDATE_PRIVATE_KEY_TAG`, `ACTIVITY_TYPE_CREATE_AUTHENTICATORS_V2`, `ACTIVITY_TYPE_CREATE_ORGANIZATION_V2`, `ACTIVITY_TYPE_CREATE_USERS_V2`, `ACTIVITY_TYPE_ACCEPT_INVITATION_V2`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V2`, `ACTIVITY_TYPE_UPDATE_ALLOWED_ORIGINS`, `ACTIVITY_TYPE_CREATE_PRIVATE_KEYS_V2`, `ACTIVITY_TYPE_UPDATE_USER`, `ACTIVITY_TYPE_UPDATE_POLICY`, `ACTIVITY_TYPE_SET_PAYMENT_METHOD_V2`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V3`, `ACTIVITY_TYPE_CREATE_WALLET`, `ACTIVITY_TYPE_CREATE_WALLET_ACCOUNTS`, `ACTIVITY_TYPE_INIT_USER_EMAIL_RECOVERY`, `ACTIVITY_TYPE_RECOVER_USER`, `ACTIVITY_TYPE_SET_ORGANIZATION_FEATURE`, `ACTIVITY_TYPE_REMOVE_ORGANIZATION_FEATURE`, `ACTIVITY_TYPE_SIGN_RAW_PAYLOAD_V2`, `ACTIVITY_TYPE_SIGN_TRANSACTION_V2`, `ACTIVITY_TYPE_EXPORT_PRIVATE_KEY`, `ACTIVITY_TYPE_EXPORT_WALLET`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V4`, `ACTIVITY_TYPE_EMAIL_AUTH`, `ACTIVITY_TYPE_EXPORT_WALLET_ACCOUNT`, `ACTIVITY_TYPE_INIT_IMPORT_WALLET`, `ACTIVITY_TYPE_IMPORT_WALLET`, `ACTIVITY_TYPE_INIT_IMPORT_PRIVATE_KEY`, `ACTIVITY_TYPE_IMPORT_PRIVATE_KEY`, `ACTIVITY_TYPE_CREATE_POLICIES`, `ACTIVITY_TYPE_SIGN_RAW_PAYLOADS`, `ACTIVITY_TYPE_CREATE_READ_ONLY_SESSION`, `ACTIVITY_TYPE_CREATE_OAUTH_PROVIDERS`, `ACTIVITY_TYPE_DELETE_OAUTH_PROVIDERS`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V5`, `ACTIVITY_TYPE_OAUTH`, `ACTIVITY_TYPE_CREATE_API_KEYS_V2`, `ACTIVITY_TYPE_CREATE_READ_WRITE_SESSION`, `ACTIVITY_TYPE_EMAIL_AUTH_V2`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V6`, `ACTIVITY_TYPE_DELETE_PRIVATE_KEYS`, `ACTIVITY_TYPE_DELETE_WALLETS`, `ACTIVITY_TYPE_CREATE_READ_WRITE_SESSION_V2`, `ACTIVITY_TYPE_DELETE_SUB_ORGANIZATION`, `ACTIVITY_TYPE_INIT_OTP_AUTH`, `ACTIVITY_TYPE_OTP_AUTH`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V7`, `ACTIVITY_TYPE_UPDATE_WALLET`, `ACTIVITY_TYPE_UPDATE_POLICY_V2`, `ACTIVITY_TYPE_CREATE_USERS_V3`, `ACTIVITY_TYPE_INIT_OTP_AUTH_V2`, `ACTIVITY_TYPE_INIT_OTP`, `ACTIVITY_TYPE_VERIFY_OTP`, `ACTIVITY_TYPE_OTP_LOGIN`, `ACTIVITY_TYPE_STAMP_LOGIN`, `ACTIVITY_TYPE_OAUTH_LOGIN`, `ACTIVITY_TYPE_UPDATE_USER_NAME`, `ACTIVITY_TYPE_UPDATE_USER_EMAIL`, `ACTIVITY_TYPE_UPDATE_USER_PHONE_NUMBER`, `ACTIVITY_TYPE_INIT_FIAT_ON_RAMP`, `ACTIVITY_TYPE_CREATE_SMART_CONTRACT_INTERFACE`, `ACTIVITY_TYPE_DELETE_SMART_CONTRACT_INTERFACE`, `ACTIVITY_TYPE_ENABLE_AUTH_PROXY`, `ACTIVITY_TYPE_DISABLE_AUTH_PROXY`, `ACTIVITY_TYPE_UPDATE_AUTH_PROXY_CONFIG`, `ACTIVITY_TYPE_CREATE_OAUTH2_CREDENTIAL`, `ACTIVITY_TYPE_UPDATE_OAUTH2_CREDENTIAL`, `ACTIVITY_TYPE_DELETE_OAUTH2_CREDENTIAL`, `ACTIVITY_TYPE_OAUTH2_AUTHENTICATE`, `ACTIVITY_TYPE_DELETE_WALLET_ACCOUNTS`, `ACTIVITY_TYPE_DELETE_POLICIES`, `ACTIVITY_TYPE_ETH_SEND_RAW_TRANSACTION`, `ACTIVITY_TYPE_ETH_SEND_TRANSACTION`, `ACTIVITY_TYPE_CREATE_FIAT_ON_RAMP_CREDENTIAL`, `ACTIVITY_TYPE_UPDATE_FIAT_ON_RAMP_CREDENTIAL`, `ACTIVITY_TYPE_DELETE_FIAT_ON_RAMP_CREDENTIAL`, `ACTIVITY_TYPE_EMAIL_AUTH_V3`, `ACTIVITY_TYPE_INIT_USER_EMAIL_RECOVERY_V2`, `ACTIVITY_TYPE_INIT_OTP_AUTH_V3`, `ACTIVITY_TYPE_INIT_OTP_V2`, `ACTIVITY_TYPE_UPSERT_GAS_USAGE_CONFIG`, `ACTIVITY_TYPE_CREATE_TVC_APP`, `ACTIVITY_TYPE_CREATE_TVC_DEPLOYMENT`, `ACTIVITY_TYPE_CREATE_TVC_MANIFEST_APPROVALS`, `ACTIVITY_TYPE_SOL_SEND_TRANSACTION`, `ACTIVITY_TYPE_INIT_OTP_V3`, `ACTIVITY_TYPE_VERIFY_OTP_V2`, `ACTIVITY_TYPE_OTP_LOGIN_V2`, `ACTIVITY_TYPE_UPDATE_ORGANIZATION_NAME`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V8`, `ACTIVITY_TYPE_CREATE_OAUTH_PROVIDERS_V2`, `ACTIVITY_TYPE_CREATE_USERS_V4`, `ACTIVITY_TYPE_CREATE_WEBHOOK_ENDPOINT`, `ACTIVITY_TYPE_UPDATE_WEBHOOK_ENDPOINT`, `ACTIVITY_TYPE_DELETE_WEBHOOK_ENDPOINT`, `ACTIVITY_TYPE_SET_IP_ALLOWLIST`, `ACTIVITY_TYPE_REMOVE_IP_ALLOWLIST`, `ACTIVITY_TYPE_UPDATE_TVC_APP_LIVE_DEPLOYMENT`, `ACTIVITY_TYPE_DELETE_TVC_DEPLOYMENT`, `ACTIVITY_TYPE_DELETE_TVC_APP_AND_DEPLOYMENTS`, `ACTIVITY_TYPE_RESTORE_TVC_DEPLOYMENT`, `ACTIVITY_TYPE_SPARK_SIGN_FROST`, `ACTIVITY_TYPE_SPARK_PREPARE_TRANSFER`, `ACTIVITY_TYPE_SPARK_CLAIM_TRANSFER`, `ACTIVITY_TYPE_SPARK_PREPARE_LIGHTNING_RECEIVE`, `ACTIVITY_TYPE_POST_TVC_QUORUM_KEY_SHARE`, `ACTIVITY_TYPE_ETH_SEND_TRANSACTION_V2`, `ACTIVITY_TYPE_CREATE_MFA_POLICY`, `ACTIVITY_TYPE_UPDATE_MFA_POLICY`, `ACTIVITY_TYPE_DELETE_MFA_POLICY`, `ACTIVITY_TYPE_CREATE_SESSION_PROFILE`, `ACTIVITY_TYPE_EARN_DEPLOY_WRAPPER`, `ACTIVITY_TYPE_EARN_DEPOSIT`, `ACTIVITY_TYPE_EARN_WITHDRAW`, `ACTIVITY_TYPE_EXECUTE_SWAP`, `ACTIVITY_TYPE_UPSERT_SWAP_CONFIG`, `ACTIVITY_TYPE_CREATE_TVC_OPERATOR`, `ACTIVITY_TYPE_CREATE_TVC_QUORUM_KEY`, `ACTIVITY_TYPE_RE_ENCRYPT_TVC_QUORUM_KEY_SHARE`, `ACTIVITY_TYPE_INIT_IMPORT_SECRETS`, `ACTIVITY_TYPE_SOL_SEND_TRANSACTION_V2`, `ACTIVITY_TYPE_CLAIM_SWAP_FEES`, `ACTIVITY_TYPE_EARN_SET_WRAPPER_STATE`, `ACTIVITY_TYPE_CLAIM_EARN_FEES`, `ACTIVITY_TYPE_UPDATE_WALLET_ACCOUNT_NAME` @@ -1861,7 +1861,7 @@ Unique identifier for the user performing recovery. name field -Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED` +Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_SWAP_CONFIG`, `FEATURE_NAME_EARN_CONFIG` @@ -1876,7 +1876,7 @@ Optional value for the feature. Will override existing values if feature is alre name field -Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED` +Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_SWAP_CONFIG`, `FEATURE_NAME_EARN_CONFIG` @@ -3676,6 +3676,9 @@ item field
+ +Whether captcha verification is required on sign up & otp init. +
@@ -4293,6 +4296,9 @@ Port to use for health checks.
Port to use for public ingress. + + +Optional desired replica count for this deployment.
@@ -5406,6 +5412,264 @@ The duration in seconds for which sessions created with this Session Profile are
Notes for a Session Profile. + + +
+
+ + earnDeployWrapperIntent field + + +Address of the underlying yield vault to wrap (from the ListEarnVaults catalog). + + +CAIP-2 chain ID the vault lives on (e.g., 'eip155:8453' for Base). + +Enum options: `eip155:1`, `eip155:8453`, `eip155:42161`, `eip155:137`, `eip155:56`, `eip155:4217` + + + +Your performance fee on gross yield, in basis points (e.g., '2000' for 20%). Your fee plus Turnkey's fee cannot exceed 50% of yield. + + +The wallet address that receives the client's fee payouts on-chain. Must be a Turnkey-managed wallet address. + + + + + + earnDepositIntent field + + +Address of the deployed Earn wrapper to deposit into, from ListEarnVaults/ListEarnPositions. Must be one of the org's deployed wrappers. + + +A Wallet account address or Private Key address to deposit from and sign with. Must be an on-chain address; Private Key identifiers are not supported. + + +Amount of the underlying asset to deposit, in raw on-chain units (e.g., '1000000' for 1 USDC at 6 decimals). + + +CAIP-2 chain ID the vault lives on (e.g., 'eip155:8453' for Base). + +Enum options: `eip155:1`, `eip155:8453`, `eip155:42161`, `eip155:137`, `eip155:56`, `eip155:4217` + + + +Whether to sponsor this transaction via Gas Station. + + + + + + earnWithdrawIntent field + + +Address of the deployed Earn wrapper holding the position to withdraw from, from ListEarnPositions. Must be one of the org's deployed wrappers. + + +A Wallet account address or Private Key address to withdraw to and sign with. Must be an on-chain address; Private Key identifiers are not supported. + + +CAIP-2 chain ID the vault lives on (e.g., 'eip155:8453' for Base). + +Enum options: `eip155:1`, `eip155:8453`, `eip155:42161`, `eip155:137`, `eip155:56`, `eip155:4217` + + + +Whether to sponsor this transaction via Gas Station. + + +The amount of the underlying asset to withdraw, in raw on-chain units. Pass 'MAX' to withdraw the entire position. + + + + + + executeSwapIntent field + + +CAIP-19 asset ID for the input asset. The chain is derived from this value. + + +CAIP-19 asset ID for the output asset. May be on a different chain than `input_token` for cross-chain swaps. + + +Base-unit amount of the input asset. + + +Wallet account address to sign and submit the swap transaction from. Cross-wallet swaps are not supported. + + +Whether to sponsor the resulting swap transaction via Gas Station when supported by the chain. + + +Maximum allowed slippage in basis points. + + +Swap provider to execute with, as returned by get_swap_quote. When omitted, execution uses the default provider. + + +Minimum acceptable base-unit amount of the output asset. Execution fails if the swap provider's quoted minimum output falls below this floor at execution time. + + + + + + upsertSwapConfigIntent field + + +feeReceiverWalletAddress field + + +Client fee in basis points applied to swaps; used for all pairs unless stable_fee_bps is set. + + +provider field + + +Optional override applied when both swap assets are stablecoins; falls back to fee_bps when unset. + + + + + + createTvcOperatorIntent field + + +Human-readable name for a new wallet created for this TVC operator + + +Unique identifier for an existing wallet to reuse for this TVC operator + + +Base derivation path for creating TVC operator wallet accounts + + +Human-readable name for this new TVC operator + + + + + + createTvcQuorumKeyIntent field + + +The threshold of operators needed to reassemble this TVC quorum key + + + Operator public keys used to encrypt and later approve the generated TVC quorum key shares + + +item field + + + + + + + + + reEncryptTvcQuorumKeyShareIntent field + + +Base64-encoded attestation document for the TVC deployment provisioning enclave + + +Base64-encoded manifest for the TVC deployment + + +Operator encryption public key used to encrypt the hosted TVC quorum key share + + +Operator signing public key used to approve the TVC manifest + + +Unique identifier of the TVC deployment receiving the re-encrypted quorum key share + + +Quorum key for the TVC application + + + + + + initImportSecretsIntent field + + +encryptionSuite field + +Enum options: `TRANSPORT_ENCRYPTION_SUITE_ENCLAVE_ENCRYPT_V1` + + + +The number of secrets the user intends to import. + + + + + + solSendTransactionIntentV2 field + + +Hex-encoded serialized unsigned Solana transaction (full wire format with zeroed signature placeholders) + + + Ordered Solana signer addresses Turnkey signs with. Between 1 and 16 signers. For sponsored transactions this must list every required signer of the transaction in transaction order. + + +item field + + + + + +Whether to sponsor this transaction via Gas Station. + + +CAIP-2 chain ID (e.g., 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' for Solana mainnet). Human-readable Solana aliases ('solana:mainnet', 'solana:devnet') are also accepted and normalized to canonical CAIP-2 values. + +Enum options: `solana:mainnet`, `solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp`, `solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d`, `solana:devnet`, `solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1`, `solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1wcaWoxPkrZBG` + + + +User-provided blockhash for replay protection / deadline control. If provided, it is used as-is, including for sponsored transactions (the transaction is only broadcastable while the blockhash is current). If omitted and sponsor=true, a fresh blockhash is fetched during execution. + + + + + +claimSwapFeesIntent field + + + earnSetWrapperStateIntent field + + +Address of the deployed Earn wrapper to update, from ListEarnVaults/ListEarnPositions. Must be one of the org's deployed wrappers. + + +When true, deposits to this wrapper are rejected; withdrawals are unaffected. Set to false to re-enable deposits. + + + + + + claimEarnFeesIntent field + + +Address of the deployed Earn wrapper to claim fees for. Must be one of the org's deployed wrappers. + + + + + + updateWalletAccountNameIntent field + + +Unique identifier for a given Wallet Account. + + +Human-readable name for this Wallet Account. @@ -5956,7 +6220,7 @@ item field name field -Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED` +Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_SWAP_CONFIG`, `FEATURE_NAME_EARN_CONFIG` @@ -5977,7 +6241,7 @@ value field name field -Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED` +Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_SWAP_CONFIG`, `FEATURE_NAME_EARN_CONFIG` @@ -7155,6 +7419,180 @@ Unique identifier for a given MFA Policy. Unique identifier for a given Session Profile. + + + + + + earnDeployWrapperResult field + + +Address of the deployed fee wrapper (the deposit target). + + +Address of the deployed fee splitter (PaymentSplitter for Morpho, RevenueSplitterOwner for Aave). + + +Identifier to poll deploy status. + + + + + + earnDepositResult field + + +Identifier to poll deposit status and tx hash via GetEarnDepositStatus. + + + + + + earnWithdrawResult field + + +Identifier to poll withdrawal status and tx hash via GetEarnWithdrawStatus. + + + + + + executeSwapResult field + + +The send_transaction_status ID associated with the swap transaction submission + + +Swap provider used to build the transaction. + + +Quote identifier used for execution, if any. + + + + + + upsertSwapConfigResult field + + +feeReceiverWalletAddress field + + +feeBps field + + +stableFeeBps field + + + + + + createTvcOperatorResult field + + +The unique identifier for the wallet containing TVC operator accounts + + +The unique identifier for the TVC operator + + +Public encryption key for this TVC operator + + +Public signing key for this TVC operator + + + + + + createTvcQuorumKeyResult field + + +The unique identifier for the TVC quorum key + + +Public key for the generated TVC quorum key + + + The unique identifier(s) for the generated TVC quorum key shares + + +item field + + + + + + + + + reEncryptTvcQuorumKeyShareResult field + + +The unique identifier for the provisioning quorum key share + + + + + + initImportSecretsResult field + + + Enclave ingress target keys along with metadata specific to the encryption suite. For enclave encrypt v1 this will be ServerTargetMsgV1. + + +item field + + + + + + + + + solSendTransactionResultV2 field + + +The send_transaction_status ID associated with the transaction submission + + + + + + claimSwapFeesResult field + + +Relay claim request ID submitted through the permit endpoint. + + + + + + earnSetWrapperStateResult field + + +Address of the updated Earn wrapper. + + +The wrapper's deposit state after this activity. + + + + + + claimEarnFeesResult field + + +Identifier to poll claim status and tx hash via GetClaimEarnFeesStatus. + + + + + + updateWalletAccountNameResult field + + +Unique identifier for a given Wallet Account. @@ -8265,6 +8703,64 @@ const response = await turnkeyClient.apiClient().getActivity({ }, "createSessionProfileResult": { "sessionProfileId": "" + }, + "earnDeployWrapperResult": { + "wrapperAddress": "", + "splitterAddress": "", + "deployRequestId": "" + }, + "earnDepositResult": { + "depositRequestId": "" + }, + "earnWithdrawResult": { + "withdrawRequestId": "" + }, + "executeSwapResult": { + "sendTransactionStatusId": "", + "provider": "", + "quoteId": "" + }, + "upsertSwapConfigResult": { + "feeReceiverWalletAddress": "", + "feeBps": "", + "stableFeeBps": "" + }, + "createTvcOperatorResult": { + "walletId": "", + "operatorId": "", + "encryptPublicKey": "", + "signPublicKey": "" + }, + "createTvcQuorumKeyResult": { + "quorumKeyId": "", + "quorumPublicKey": "", + "shareIds": [ + "" + ] + }, + "reEncryptTvcQuorumKeyShareResult": { + "provisioningShareId": "" + }, + "initImportSecretsResult": { + "enclaveTargetMessages": [ + "" + ] + }, + "solSendTransactionResultV2": { + "sendTransactionStatusId": "" + }, + "claimSwapFeesResult": { + "requestId": "" + }, + "earnSetWrapperStateResult": { + "wrapperAddress": "", + "depositsDisabled": "" + }, + "claimEarnFeesResult": { + "claimRequestId": "" + }, + "updateWalletAccountNameResult": { + "walletAccountId": "" } }, "votes": [ diff --git a/api-reference/queries/get-configs.mdx b/api-reference/queries/get-configs.mdx index e85998a0..cf082601 100644 --- a/api-reference/queries/get-configs.mdx +++ b/api-reference/queries/get-configs.mdx @@ -32,7 +32,7 @@ A successful response returns the following fields: name field -Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED` +Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_SWAP_CONFIG`, `FEATURE_NAME_EARN_CONFIG` diff --git a/api-reference/queries/get-earn-deploy-status.mdx b/api-reference/queries/get-earn-deploy-status.mdx new file mode 100644 index 00000000..9966a592 --- /dev/null +++ b/api-reference/queries/get-earn-deploy-status.mdx @@ -0,0 +1,81 @@ +--- +title: "Get Earn deploy status" +description: "Poll the status of a wrapper deployment by its deploy_request_id." +--- + +import { Authorizations } from "/snippets/api/authorizations.mdx"; +import { H3Bordered } from "/snippets/h3-bordered.mdx"; +import { NestedParam } from "/snippets/nested-param.mdx"; +import { EndpointPath } from "/snippets/api/endpoint.mdx"; + + + + + + + + + +Unique identifier for a given Organization. + + + + +The deploy_request_id returned by EarnDeployWrapper. + + + + +A successful response returns the following fields: + + +Status of the wrapper deployment. + +Enum options: `PENDING`, `COMPLETED`, `FAILED` + +Transaction hash of the deployment, once available. +Reason the deployment transaction failed, when status is FAILED. + + + +```bash title="cURL" +curl --request POST \ + --url https://api.turnkey.com/public/v1/query/get_earn_deploy_status \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header "X-Stamp: (see Authorizations)" \ + --data '{ + "organizationId": "", + "deployRequestId": "" +}' +``` + +```javascript title="JavaScript" +import { Turnkey } from "@turnkey/sdk-server"; + +const turnkeyClient = new Turnkey({ + apiBaseUrl: "https://api.turnkey.com", + apiPublicKey: process.env.API_PUBLIC_KEY!, + apiPrivateKey: process.env.API_PRIVATE_KEY!, + defaultOrganizationId: process.env.ORGANIZATION_ID!, +}); + +const response = await turnkeyClient.apiClient().getEarnDeployStatus({ + organizationId: " (Unique identifier for a given Organization.)", + deployRequestId: " (The deploy_request_id returned by EarnDeployWrapper.)" +}); +``` + + + + + +```json 200 +{ + "status": "", + "deployTxHash": "", + "error": "" +} +``` + + diff --git a/api-reference/queries/get-earn-deposit-status.mdx b/api-reference/queries/get-earn-deposit-status.mdx new file mode 100644 index 00000000..385ac11a --- /dev/null +++ b/api-reference/queries/get-earn-deposit-status.mdx @@ -0,0 +1,81 @@ +--- +title: "Get Earn deposit status" +description: "Poll the status of a deposit by its deposit_request_id (for the async/sponsored deposit path)." +--- + +import { Authorizations } from "/snippets/api/authorizations.mdx"; +import { H3Bordered } from "/snippets/h3-bordered.mdx"; +import { NestedParam } from "/snippets/nested-param.mdx"; +import { EndpointPath } from "/snippets/api/endpoint.mdx"; + + + + + + + + + +Unique identifier for a given Organization. + + + + +The deposit_request_id returned by EarnDeposit. + + + + +A successful response returns the following fields: + + +Status of the deposit. + +Enum options: `PENDING`, `COMPLETED`, `FAILED` + +Transaction hash of the deposit, once available. +Reason the deposit transaction failed, when status is FAILED. + + + +```bash title="cURL" +curl --request POST \ + --url https://api.turnkey.com/public/v1/query/get_earn_deposit_status \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header "X-Stamp: (see Authorizations)" \ + --data '{ + "organizationId": "", + "depositRequestId": "" +}' +``` + +```javascript title="JavaScript" +import { Turnkey } from "@turnkey/sdk-server"; + +const turnkeyClient = new Turnkey({ + apiBaseUrl: "https://api.turnkey.com", + apiPublicKey: process.env.API_PUBLIC_KEY!, + apiPrivateKey: process.env.API_PRIVATE_KEY!, + defaultOrganizationId: process.env.ORGANIZATION_ID!, +}); + +const response = await turnkeyClient.apiClient().getEarnDepositStatus({ + organizationId: " (Unique identifier for a given Organization.)", + depositRequestId: " (The deposit_request_id returned by EarnDeposit.)" +}); +``` + + + + + +```json 200 +{ + "status": "", + "depositTxHash": "", + "error": "" +} +``` + + diff --git a/api-reference/queries/get-earn-enabled-vaults.mdx b/api-reference/queries/get-earn-enabled-vaults.mdx new file mode 100644 index 00000000..753d00ad --- /dev/null +++ b/api-reference/queries/get-earn-enabled-vaults.mdx @@ -0,0 +1,171 @@ +--- +title: "Get Earn enabled vaults" +description: "Get the organization's deployed wrappers with on-chain total deposited and live APY. The management view, distinct from per-wallet positions." +--- + +import { Authorizations } from "/snippets/api/authorizations.mdx"; +import { H3Bordered } from "/snippets/h3-bordered.mdx"; +import { NestedParam } from "/snippets/nested-param.mdx"; +import { EndpointPath } from "/snippets/api/endpoint.mdx"; + + + + + + + + + +Unique identifier for a given Organization. + + + + +Enum options: `EARN_PROVIDER_MORPHO`, `EARN_PROVIDER_AAVE` + + + + +Optional filter: only return enabled vaults whose underlying asset matches this CAIP-19 asset ID (e.g. 'eip155:8453/erc20:0x833589...'). The chain is taken from the CAIP-19 identifier. + + + + +A successful response returns the following fields: + + + The organization's deployed wrappers. + + +Address of the underlying yield vault. + + +Address of the deployed fee wrapper (the deposit target). + + +provider field + +Enum options: `EARN_PROVIDER_MORPHO`, `EARN_PROVIDER_AAVE` + + + +CAIP-19 asset ID of the vault's underlying asset (e.g. 'eip155:8453/erc20:0x833589...'); the chain is encoded in the identifier. + + +Gross annual percentage yield, expressed as a decimal fraction (before Turnkey and client fees). + + +Total deposited through this wrapper (wrapper TVL), in raw on-chain units of the underlying asset. + + + display field + + +USD value, for display only. + + +Normalized amount in the asset's own units, for display only. + + + + + +Annual percentage yield net of the Turnkey and client performance fees, expressed as a decimal fraction. + + +Client performance fee taken on yield, in basis points. Currently org-wide; moving to a per-vault setting. + + +When true, deposits to this wrapper are rejected; withdrawals are unaffected. Toggled via EarnSetWrapperState. + + +Human-readable vault name from the provider (e.g. 'Steakhouse Prime USDC' for Morpho; the reserve symbol for Aave). + + +Vault curator name(s), comma-separated when a vault has multiple. Empty for providers without curators (e.g. Aave). + + +The client's claimable performance fee (releasable now), in raw on-chain units of the underlying asset (the caip19 asset). Turnkey's fee is excluded. Only returned to the parent org; unset when a sub-org queries. + + + claimableClientFeeDisplay field + + +USD value, for display only. + + +Normalized amount in the asset's own units, for display only. + + + + + + + + + + +```bash title="cURL" +curl --request POST \ + --url https://api.turnkey.com/public/v1/query/list_earn_enabled_vaults \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header "X-Stamp: (see Authorizations)" \ + --data '{ + "organizationId": "", + "provider": "", + "caip19": "" +}' +``` + +```javascript title="JavaScript" +import { Turnkey } from "@turnkey/sdk-server"; + +const turnkeyClient = new Turnkey({ + apiBaseUrl: "https://api.turnkey.com", + apiPublicKey: process.env.API_PUBLIC_KEY!, + apiPrivateKey: process.env.API_PRIVATE_KEY!, + defaultOrganizationId: process.env.ORGANIZATION_ID!, +}); + +const response = await turnkeyClient.apiClient().listEarnEnabledVaults({ + organizationId: " (Unique identifier for a given Organization.)", + provider: "" // provider field, + caip19: " (Optional filter: only return enabled vaults whose underlying asset matches this CAIP-19 asset ID (e.g. 'eip155:8453/erc20:0x833589...'). The chain is taken from the CAIP-19 identifier.)" +}); +``` + + + + + +```json 200 +{ + "enabledVaults": [ + { + "vaultAddress": "", + "wrapperAddress": "", + "provider": "", + "caip19": "", + "apyPct": "", + "totalDeposited": "", + "display": { + "usd": "", + "crypto": "" + }, + "netApyPct": "", + "clientFeeBps": "", + "depositsDisabled": "", + "name": "", + "curator": "", + "claimableClientFee": "", + "claimableClientFeeDisplay": { + "usd": "", + "crypto": "" + } + } + ] +} +``` + + diff --git a/api-reference/queries/get-earn-positions.mdx b/api-reference/queries/get-earn-positions.mdx new file mode 100644 index 00000000..cc090391 --- /dev/null +++ b/api-reference/queries/get-earn-positions.mdx @@ -0,0 +1,148 @@ +--- +title: "Get Earn positions" +description: "Get the active Earn positions for a specific wallet, including current value, cost basis, yield, and projected fees." +--- + +import { Authorizations } from "/snippets/api/authorizations.mdx"; +import { H3Bordered } from "/snippets/h3-bordered.mdx"; +import { NestedParam } from "/snippets/nested-param.mdx"; +import { EndpointPath } from "/snippets/api/endpoint.mdx"; + + + + + + + + + +Unique identifier for a given Organization. + + + + +The wallet address to return positions for. + + + + +A successful response returns the following fields: + + + The wallet's active Earn positions. + + +Address of the underlying yield vault. + + +Address of the fee wrapper holding the position. + + +provider field + +Enum options: `EARN_PROVIDER_MORPHO`, `EARN_PROVIDER_AAVE` + + + +CAIP-19 asset ID of the vault's underlying asset (e.g. 'eip155:8453/erc20:0x833589...'); the chain is encoded in the identifier. + + +Current value of the position in the underlying asset, in raw on-chain units (already net of the wrapper fee). + + +Lifetime total deposited into this position, in raw on-chain units. + + +Lifetime total withdrawn from this position, in raw on-chain units. + + + display field + + +Current value in USD, for display only. + + +Total deposited in USD, for display only. + + +Total withdrawn in USD, for display only. + + +Current value in the asset's own units, for display only. + + +Total deposited in the asset's own units, for display only. + + +Total withdrawn in the asset's own units, for display only. + + + + + +When true, deposits to this wrapper are rejected; withdrawals are unaffected. Toggled via EarnSetWrapperState. + + + + + + + +```bash title="cURL" +curl --request POST \ + --url https://api.turnkey.com/public/v1/query/list_earn_positions \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header "X-Stamp: (see Authorizations)" \ + --data '{ + "organizationId": "", + "walletAddress": "" +}' +``` + +```javascript title="JavaScript" +import { Turnkey } from "@turnkey/sdk-server"; + +const turnkeyClient = new Turnkey({ + apiBaseUrl: "https://api.turnkey.com", + apiPublicKey: process.env.API_PUBLIC_KEY!, + apiPrivateKey: process.env.API_PRIVATE_KEY!, + defaultOrganizationId: process.env.ORGANIZATION_ID!, +}); + +const response = await turnkeyClient.apiClient().listEarnPositions({ + organizationId: " (Unique identifier for a given Organization.)", + walletAddress: " (The wallet address to return positions for.)" +}); +``` + + + + + +```json 200 +{ + "positions": [ + { + "vaultAddress": "", + "wrapperAddress": "", + "provider": "", + "caip19": "", + "currentValue": "", + "totalDeposited": "", + "totalWithdrawn": "", + "display": { + "currentValueUsd": "", + "totalDepositedUsd": "", + "totalWithdrawnUsd": "", + "currentValueCrypto": "", + "totalDepositedCrypto": "", + "totalWithdrawnCrypto": "" + }, + "depositsDisabled": "" + } + ] +} +``` + + diff --git a/api-reference/queries/get-earn-vault-catalog.mdx b/api-reference/queries/get-earn-vault-catalog.mdx new file mode 100644 index 00000000..54ea6562 --- /dev/null +++ b/api-reference/queries/get-earn-vault-catalog.mdx @@ -0,0 +1,189 @@ +--- +title: "Get Earn vault catalog" +description: "Get the catalog of all wrappable yield vaults across supported chains, enriched with live TVL and APY. Annotates which vaults the organization has already enabled." +--- + +import { Authorizations } from "/snippets/api/authorizations.mdx"; +import { H3Bordered } from "/snippets/h3-bordered.mdx"; +import { NestedParam } from "/snippets/nested-param.mdx"; +import { EndpointPath } from "/snippets/api/endpoint.mdx"; + + + + + + + + + +Unique identifier for a given Organization. Annotates which vaults the organization has already enabled. + + + + +Enum options: `EARN_PROVIDER_MORPHO`, `EARN_PROVIDER_AAVE` + + + + +CAIP-19 asset ID (e.g. 'eip155:8453/erc20:0x833589...') to return vaults for. Only vaults whose underlying asset matches are returned; the chain is taken from the CAIP-19 identifier. + + + +

paginationOptions field

+ + + A limit of the number of object to be returned, between 1 and 100. Defaults to 10. + + + + A pagination cursor. This is an object ID that enables you to fetch all objects before this ID. + + + + A pagination cursor. This is an object ID that enables you to fetch all objects after this ID. + + +
+ + +A successful response returns the following fields: + + + The catalog of wrappable vaults, sorted by TVL (USD) descending. To page, pass page_info.end_cursor as the pagination after cursor. + + +Address of the underlying yield vault. + + +provider field + +Enum options: `EARN_PROVIDER_MORPHO`, `EARN_PROVIDER_AAVE` + + + +CAIP-19 asset ID of the vault's underlying asset (e.g. 'eip155:8453/erc20:0x833589...'); the chain is encoded in the identifier. + + +Total value locked in the vault, in raw on-chain units of the underlying asset. The catalog is sorted by the USD value of this. + + +Current annual percentage yield, expressed as a decimal fraction (e.g., '0.0812' for 8.12%). + + +Whether the organization has enabled this vault. + + + display field + + +USD value, for display only. + + +Normalized amount in the asset's own units, for display only. + + + + + +Human-readable vault name from the provider (e.g. 'Steakhouse Prime USDC' for Morpho; the reserve symbol for Aave). + + +Vault curator name(s), comma-separated when a vault has multiple. Empty for providers without curators (e.g. Aave). + + + + + + pageInfo field + + +hasNextPage field + + +hasPreviousPage field + + +startCursor field + + +endCursor field + + + + + + + +```bash title="cURL" +curl --request POST \ + --url https://api.turnkey.com/public/v1/query/list_earn_vaults \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header "X-Stamp: (see Authorizations)" \ + --data '{ + "organizationId": "", + "provider": "", + "caip19": "", + "paginationOptions": { + "limit": "", + "before": "", + "after": "" + } +}' +``` + +```javascript title="JavaScript" +import { Turnkey } from "@turnkey/sdk-server"; + +const turnkeyClient = new Turnkey({ + apiBaseUrl: "https://api.turnkey.com", + apiPublicKey: process.env.API_PUBLIC_KEY!, + apiPrivateKey: process.env.API_PRIVATE_KEY!, + defaultOrganizationId: process.env.ORGANIZATION_ID!, +}); + +const response = await turnkeyClient.apiClient().listEarnVaults({ + organizationId: " (Unique identifier for a given Organization. Annotates which vaults the organization has already enabled.)", + provider: "" // provider field, + caip19: " (CAIP-19 asset ID (e.g. 'eip155:8453/erc20:0x833589...') to return vaults for. Only vaults whose underlying asset matches are returned; the chain is taken from the CAIP-19 identifier.)", + paginationOptions: { // paginationOptions field, + limit: " (A limit of the number of object to be returned, between 1 and 100. Defaults to 10.)", + before: " (A pagination cursor. This is an object ID that enables you to fetch all objects before this ID.)", + after: " (A pagination cursor. This is an object ID that enables you to fetch all objects after this ID.)", + } +}); +``` + + + + + +```json 200 +{ + "vaults": [ + { + "vaultAddress": "", + "provider": "", + "caip19": "", + "tvl": "", + "apyPct": "", + "enabled": "", + "display": { + "usd": "", + "crypto": "" + }, + "name": "", + "curator": "" + } + ], + "pageInfo": { + "hasNextPage": "", + "hasPreviousPage": "", + "startCursor": "", + "endCursor": "" + } +} +``` + + diff --git a/api-reference/queries/get-earn-withdraw-status.mdx b/api-reference/queries/get-earn-withdraw-status.mdx new file mode 100644 index 00000000..f248bb1b --- /dev/null +++ b/api-reference/queries/get-earn-withdraw-status.mdx @@ -0,0 +1,81 @@ +--- +title: "Get Earn withdraw status" +description: "Poll the status of a withdrawal by its withdraw_request_id." +--- + +import { Authorizations } from "/snippets/api/authorizations.mdx"; +import { H3Bordered } from "/snippets/h3-bordered.mdx"; +import { NestedParam } from "/snippets/nested-param.mdx"; +import { EndpointPath } from "/snippets/api/endpoint.mdx"; + + + + + + + + + +Unique identifier for a given Organization. + + + + +The withdraw_request_id returned by EarnWithdraw. + + + + +A successful response returns the following fields: + + +Status of the withdrawal. + +Enum options: `PENDING`, `COMPLETED`, `FAILED` + +Transaction hash of the withdrawal, once available. +Reason the withdrawal transaction failed, when status is FAILED. + + + +```bash title="cURL" +curl --request POST \ + --url https://api.turnkey.com/public/v1/query/get_earn_withdraw_status \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header "X-Stamp: (see Authorizations)" \ + --data '{ + "organizationId": "", + "withdrawRequestId": "" +}' +``` + +```javascript title="JavaScript" +import { Turnkey } from "@turnkey/sdk-server"; + +const turnkeyClient = new Turnkey({ + apiBaseUrl: "https://api.turnkey.com", + apiPublicKey: process.env.API_PUBLIC_KEY!, + apiPrivateKey: process.env.API_PRIVATE_KEY!, + defaultOrganizationId: process.env.ORGANIZATION_ID!, +}); + +const response = await turnkeyClient.apiClient().getEarnWithdrawStatus({ + organizationId: " (Unique identifier for a given Organization.)", + withdrawRequestId: " (The withdraw_request_id returned by EarnWithdraw.)" +}); +``` + + + + + +```json 200 +{ + "status": "", + "withdrawTxHash": "", + "error": "" +} +``` + + diff --git a/api-reference/queries/list-activities.mdx b/api-reference/queries/list-activities.mdx index 30986984..da6bca0f 100644 --- a/api-reference/queries/list-activities.mdx +++ b/api-reference/queries/list-activities.mdx @@ -42,7 +42,7 @@ Enum options: `ACTIVITY_STATUS_CREATED`, `ACTIVITY_STATUS_PENDING`, `ACTIVITY_ST -Enum options: `ACTIVITY_TYPE_CREATE_API_KEYS`, `ACTIVITY_TYPE_CREATE_USERS`, `ACTIVITY_TYPE_CREATE_PRIVATE_KEYS`, `ACTIVITY_TYPE_SIGN_RAW_PAYLOAD`, `ACTIVITY_TYPE_CREATE_INVITATIONS`, `ACTIVITY_TYPE_ACCEPT_INVITATION`, `ACTIVITY_TYPE_CREATE_POLICY`, `ACTIVITY_TYPE_DISABLE_PRIVATE_KEY`, `ACTIVITY_TYPE_DELETE_USERS`, `ACTIVITY_TYPE_DELETE_API_KEYS`, `ACTIVITY_TYPE_DELETE_INVITATION`, `ACTIVITY_TYPE_DELETE_ORGANIZATION`, `ACTIVITY_TYPE_DELETE_POLICY`, `ACTIVITY_TYPE_CREATE_USER_TAG`, `ACTIVITY_TYPE_DELETE_USER_TAGS`, `ACTIVITY_TYPE_CREATE_ORGANIZATION`, `ACTIVITY_TYPE_SIGN_TRANSACTION`, `ACTIVITY_TYPE_APPROVE_ACTIVITY`, `ACTIVITY_TYPE_REJECT_ACTIVITY`, `ACTIVITY_TYPE_DELETE_AUTHENTICATORS`, `ACTIVITY_TYPE_CREATE_AUTHENTICATORS`, `ACTIVITY_TYPE_CREATE_PRIVATE_KEY_TAG`, `ACTIVITY_TYPE_DELETE_PRIVATE_KEY_TAGS`, `ACTIVITY_TYPE_SET_PAYMENT_METHOD`, `ACTIVITY_TYPE_ACTIVATE_BILLING_TIER`, `ACTIVITY_TYPE_DELETE_PAYMENT_METHOD`, `ACTIVITY_TYPE_CREATE_POLICY_V2`, `ACTIVITY_TYPE_CREATE_POLICY_V3`, `ACTIVITY_TYPE_CREATE_API_ONLY_USERS`, `ACTIVITY_TYPE_UPDATE_ROOT_QUORUM`, `ACTIVITY_TYPE_UPDATE_USER_TAG`, `ACTIVITY_TYPE_UPDATE_PRIVATE_KEY_TAG`, `ACTIVITY_TYPE_CREATE_AUTHENTICATORS_V2`, `ACTIVITY_TYPE_CREATE_ORGANIZATION_V2`, `ACTIVITY_TYPE_CREATE_USERS_V2`, `ACTIVITY_TYPE_ACCEPT_INVITATION_V2`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V2`, `ACTIVITY_TYPE_UPDATE_ALLOWED_ORIGINS`, `ACTIVITY_TYPE_CREATE_PRIVATE_KEYS_V2`, `ACTIVITY_TYPE_UPDATE_USER`, `ACTIVITY_TYPE_UPDATE_POLICY`, `ACTIVITY_TYPE_SET_PAYMENT_METHOD_V2`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V3`, `ACTIVITY_TYPE_CREATE_WALLET`, `ACTIVITY_TYPE_CREATE_WALLET_ACCOUNTS`, `ACTIVITY_TYPE_INIT_USER_EMAIL_RECOVERY`, `ACTIVITY_TYPE_RECOVER_USER`, `ACTIVITY_TYPE_SET_ORGANIZATION_FEATURE`, `ACTIVITY_TYPE_REMOVE_ORGANIZATION_FEATURE`, `ACTIVITY_TYPE_SIGN_RAW_PAYLOAD_V2`, `ACTIVITY_TYPE_SIGN_TRANSACTION_V2`, `ACTIVITY_TYPE_EXPORT_PRIVATE_KEY`, `ACTIVITY_TYPE_EXPORT_WALLET`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V4`, `ACTIVITY_TYPE_EMAIL_AUTH`, `ACTIVITY_TYPE_EXPORT_WALLET_ACCOUNT`, `ACTIVITY_TYPE_INIT_IMPORT_WALLET`, `ACTIVITY_TYPE_IMPORT_WALLET`, `ACTIVITY_TYPE_INIT_IMPORT_PRIVATE_KEY`, `ACTIVITY_TYPE_IMPORT_PRIVATE_KEY`, `ACTIVITY_TYPE_CREATE_POLICIES`, `ACTIVITY_TYPE_SIGN_RAW_PAYLOADS`, `ACTIVITY_TYPE_CREATE_READ_ONLY_SESSION`, `ACTIVITY_TYPE_CREATE_OAUTH_PROVIDERS`, `ACTIVITY_TYPE_DELETE_OAUTH_PROVIDERS`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V5`, `ACTIVITY_TYPE_OAUTH`, `ACTIVITY_TYPE_CREATE_API_KEYS_V2`, `ACTIVITY_TYPE_CREATE_READ_WRITE_SESSION`, `ACTIVITY_TYPE_EMAIL_AUTH_V2`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V6`, `ACTIVITY_TYPE_DELETE_PRIVATE_KEYS`, `ACTIVITY_TYPE_DELETE_WALLETS`, `ACTIVITY_TYPE_CREATE_READ_WRITE_SESSION_V2`, `ACTIVITY_TYPE_DELETE_SUB_ORGANIZATION`, `ACTIVITY_TYPE_INIT_OTP_AUTH`, `ACTIVITY_TYPE_OTP_AUTH`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V7`, `ACTIVITY_TYPE_UPDATE_WALLET`, `ACTIVITY_TYPE_UPDATE_POLICY_V2`, `ACTIVITY_TYPE_CREATE_USERS_V3`, `ACTIVITY_TYPE_INIT_OTP_AUTH_V2`, `ACTIVITY_TYPE_INIT_OTP`, `ACTIVITY_TYPE_VERIFY_OTP`, `ACTIVITY_TYPE_OTP_LOGIN`, `ACTIVITY_TYPE_STAMP_LOGIN`, `ACTIVITY_TYPE_OAUTH_LOGIN`, `ACTIVITY_TYPE_UPDATE_USER_NAME`, `ACTIVITY_TYPE_UPDATE_USER_EMAIL`, `ACTIVITY_TYPE_UPDATE_USER_PHONE_NUMBER`, `ACTIVITY_TYPE_INIT_FIAT_ON_RAMP`, `ACTIVITY_TYPE_CREATE_SMART_CONTRACT_INTERFACE`, `ACTIVITY_TYPE_DELETE_SMART_CONTRACT_INTERFACE`, `ACTIVITY_TYPE_ENABLE_AUTH_PROXY`, `ACTIVITY_TYPE_DISABLE_AUTH_PROXY`, `ACTIVITY_TYPE_UPDATE_AUTH_PROXY_CONFIG`, `ACTIVITY_TYPE_CREATE_OAUTH2_CREDENTIAL`, `ACTIVITY_TYPE_UPDATE_OAUTH2_CREDENTIAL`, `ACTIVITY_TYPE_DELETE_OAUTH2_CREDENTIAL`, `ACTIVITY_TYPE_OAUTH2_AUTHENTICATE`, `ACTIVITY_TYPE_DELETE_WALLET_ACCOUNTS`, `ACTIVITY_TYPE_DELETE_POLICIES`, `ACTIVITY_TYPE_ETH_SEND_RAW_TRANSACTION`, `ACTIVITY_TYPE_ETH_SEND_TRANSACTION`, `ACTIVITY_TYPE_CREATE_FIAT_ON_RAMP_CREDENTIAL`, `ACTIVITY_TYPE_UPDATE_FIAT_ON_RAMP_CREDENTIAL`, `ACTIVITY_TYPE_DELETE_FIAT_ON_RAMP_CREDENTIAL`, `ACTIVITY_TYPE_EMAIL_AUTH_V3`, `ACTIVITY_TYPE_INIT_USER_EMAIL_RECOVERY_V2`, `ACTIVITY_TYPE_INIT_OTP_AUTH_V3`, `ACTIVITY_TYPE_INIT_OTP_V2`, `ACTIVITY_TYPE_UPSERT_GAS_USAGE_CONFIG`, `ACTIVITY_TYPE_CREATE_TVC_APP`, `ACTIVITY_TYPE_CREATE_TVC_DEPLOYMENT`, `ACTIVITY_TYPE_CREATE_TVC_MANIFEST_APPROVALS`, `ACTIVITY_TYPE_SOL_SEND_TRANSACTION`, `ACTIVITY_TYPE_INIT_OTP_V3`, `ACTIVITY_TYPE_VERIFY_OTP_V2`, `ACTIVITY_TYPE_OTP_LOGIN_V2`, `ACTIVITY_TYPE_UPDATE_ORGANIZATION_NAME`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V8`, `ACTIVITY_TYPE_CREATE_OAUTH_PROVIDERS_V2`, `ACTIVITY_TYPE_CREATE_USERS_V4`, `ACTIVITY_TYPE_CREATE_WEBHOOK_ENDPOINT`, `ACTIVITY_TYPE_UPDATE_WEBHOOK_ENDPOINT`, `ACTIVITY_TYPE_DELETE_WEBHOOK_ENDPOINT`, `ACTIVITY_TYPE_SET_IP_ALLOWLIST`, `ACTIVITY_TYPE_REMOVE_IP_ALLOWLIST`, `ACTIVITY_TYPE_UPDATE_TVC_APP_LIVE_DEPLOYMENT`, `ACTIVITY_TYPE_DELETE_TVC_DEPLOYMENT`, `ACTIVITY_TYPE_DELETE_TVC_APP_AND_DEPLOYMENTS`, `ACTIVITY_TYPE_RESTORE_TVC_DEPLOYMENT`, `ACTIVITY_TYPE_SPARK_SIGN_FROST`, `ACTIVITY_TYPE_SPARK_PREPARE_TRANSFER`, `ACTIVITY_TYPE_SPARK_CLAIM_TRANSFER`, `ACTIVITY_TYPE_SPARK_PREPARE_LIGHTNING_RECEIVE`, `ACTIVITY_TYPE_POST_TVC_QUORUM_KEY_SHARE`, `ACTIVITY_TYPE_ETH_SEND_TRANSACTION_V2`, `ACTIVITY_TYPE_CREATE_MFA_POLICY`, `ACTIVITY_TYPE_UPDATE_MFA_POLICY`, `ACTIVITY_TYPE_DELETE_MFA_POLICY`, `ACTIVITY_TYPE_CREATE_SESSION_PROFILE` +Enum options: `ACTIVITY_TYPE_CREATE_API_KEYS`, `ACTIVITY_TYPE_CREATE_USERS`, `ACTIVITY_TYPE_CREATE_PRIVATE_KEYS`, `ACTIVITY_TYPE_SIGN_RAW_PAYLOAD`, `ACTIVITY_TYPE_CREATE_INVITATIONS`, `ACTIVITY_TYPE_ACCEPT_INVITATION`, `ACTIVITY_TYPE_CREATE_POLICY`, `ACTIVITY_TYPE_DISABLE_PRIVATE_KEY`, `ACTIVITY_TYPE_DELETE_USERS`, `ACTIVITY_TYPE_DELETE_API_KEYS`, `ACTIVITY_TYPE_DELETE_INVITATION`, `ACTIVITY_TYPE_DELETE_ORGANIZATION`, `ACTIVITY_TYPE_DELETE_POLICY`, `ACTIVITY_TYPE_CREATE_USER_TAG`, `ACTIVITY_TYPE_DELETE_USER_TAGS`, `ACTIVITY_TYPE_CREATE_ORGANIZATION`, `ACTIVITY_TYPE_SIGN_TRANSACTION`, `ACTIVITY_TYPE_APPROVE_ACTIVITY`, `ACTIVITY_TYPE_REJECT_ACTIVITY`, `ACTIVITY_TYPE_DELETE_AUTHENTICATORS`, `ACTIVITY_TYPE_CREATE_AUTHENTICATORS`, `ACTIVITY_TYPE_CREATE_PRIVATE_KEY_TAG`, `ACTIVITY_TYPE_DELETE_PRIVATE_KEY_TAGS`, `ACTIVITY_TYPE_SET_PAYMENT_METHOD`, `ACTIVITY_TYPE_ACTIVATE_BILLING_TIER`, `ACTIVITY_TYPE_DELETE_PAYMENT_METHOD`, `ACTIVITY_TYPE_CREATE_POLICY_V2`, `ACTIVITY_TYPE_CREATE_POLICY_V3`, `ACTIVITY_TYPE_CREATE_API_ONLY_USERS`, `ACTIVITY_TYPE_UPDATE_ROOT_QUORUM`, `ACTIVITY_TYPE_UPDATE_USER_TAG`, `ACTIVITY_TYPE_UPDATE_PRIVATE_KEY_TAG`, `ACTIVITY_TYPE_CREATE_AUTHENTICATORS_V2`, `ACTIVITY_TYPE_CREATE_ORGANIZATION_V2`, `ACTIVITY_TYPE_CREATE_USERS_V2`, `ACTIVITY_TYPE_ACCEPT_INVITATION_V2`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V2`, `ACTIVITY_TYPE_UPDATE_ALLOWED_ORIGINS`, `ACTIVITY_TYPE_CREATE_PRIVATE_KEYS_V2`, `ACTIVITY_TYPE_UPDATE_USER`, `ACTIVITY_TYPE_UPDATE_POLICY`, `ACTIVITY_TYPE_SET_PAYMENT_METHOD_V2`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V3`, `ACTIVITY_TYPE_CREATE_WALLET`, `ACTIVITY_TYPE_CREATE_WALLET_ACCOUNTS`, `ACTIVITY_TYPE_INIT_USER_EMAIL_RECOVERY`, `ACTIVITY_TYPE_RECOVER_USER`, `ACTIVITY_TYPE_SET_ORGANIZATION_FEATURE`, `ACTIVITY_TYPE_REMOVE_ORGANIZATION_FEATURE`, `ACTIVITY_TYPE_SIGN_RAW_PAYLOAD_V2`, `ACTIVITY_TYPE_SIGN_TRANSACTION_V2`, `ACTIVITY_TYPE_EXPORT_PRIVATE_KEY`, `ACTIVITY_TYPE_EXPORT_WALLET`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V4`, `ACTIVITY_TYPE_EMAIL_AUTH`, `ACTIVITY_TYPE_EXPORT_WALLET_ACCOUNT`, `ACTIVITY_TYPE_INIT_IMPORT_WALLET`, `ACTIVITY_TYPE_IMPORT_WALLET`, `ACTIVITY_TYPE_INIT_IMPORT_PRIVATE_KEY`, `ACTIVITY_TYPE_IMPORT_PRIVATE_KEY`, `ACTIVITY_TYPE_CREATE_POLICIES`, `ACTIVITY_TYPE_SIGN_RAW_PAYLOADS`, `ACTIVITY_TYPE_CREATE_READ_ONLY_SESSION`, `ACTIVITY_TYPE_CREATE_OAUTH_PROVIDERS`, `ACTIVITY_TYPE_DELETE_OAUTH_PROVIDERS`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V5`, `ACTIVITY_TYPE_OAUTH`, `ACTIVITY_TYPE_CREATE_API_KEYS_V2`, `ACTIVITY_TYPE_CREATE_READ_WRITE_SESSION`, `ACTIVITY_TYPE_EMAIL_AUTH_V2`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V6`, `ACTIVITY_TYPE_DELETE_PRIVATE_KEYS`, `ACTIVITY_TYPE_DELETE_WALLETS`, `ACTIVITY_TYPE_CREATE_READ_WRITE_SESSION_V2`, `ACTIVITY_TYPE_DELETE_SUB_ORGANIZATION`, `ACTIVITY_TYPE_INIT_OTP_AUTH`, `ACTIVITY_TYPE_OTP_AUTH`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V7`, `ACTIVITY_TYPE_UPDATE_WALLET`, `ACTIVITY_TYPE_UPDATE_POLICY_V2`, `ACTIVITY_TYPE_CREATE_USERS_V3`, `ACTIVITY_TYPE_INIT_OTP_AUTH_V2`, `ACTIVITY_TYPE_INIT_OTP`, `ACTIVITY_TYPE_VERIFY_OTP`, `ACTIVITY_TYPE_OTP_LOGIN`, `ACTIVITY_TYPE_STAMP_LOGIN`, `ACTIVITY_TYPE_OAUTH_LOGIN`, `ACTIVITY_TYPE_UPDATE_USER_NAME`, `ACTIVITY_TYPE_UPDATE_USER_EMAIL`, `ACTIVITY_TYPE_UPDATE_USER_PHONE_NUMBER`, `ACTIVITY_TYPE_INIT_FIAT_ON_RAMP`, `ACTIVITY_TYPE_CREATE_SMART_CONTRACT_INTERFACE`, `ACTIVITY_TYPE_DELETE_SMART_CONTRACT_INTERFACE`, `ACTIVITY_TYPE_ENABLE_AUTH_PROXY`, `ACTIVITY_TYPE_DISABLE_AUTH_PROXY`, `ACTIVITY_TYPE_UPDATE_AUTH_PROXY_CONFIG`, `ACTIVITY_TYPE_CREATE_OAUTH2_CREDENTIAL`, `ACTIVITY_TYPE_UPDATE_OAUTH2_CREDENTIAL`, `ACTIVITY_TYPE_DELETE_OAUTH2_CREDENTIAL`, `ACTIVITY_TYPE_OAUTH2_AUTHENTICATE`, `ACTIVITY_TYPE_DELETE_WALLET_ACCOUNTS`, `ACTIVITY_TYPE_DELETE_POLICIES`, `ACTIVITY_TYPE_ETH_SEND_RAW_TRANSACTION`, `ACTIVITY_TYPE_ETH_SEND_TRANSACTION`, `ACTIVITY_TYPE_CREATE_FIAT_ON_RAMP_CREDENTIAL`, `ACTIVITY_TYPE_UPDATE_FIAT_ON_RAMP_CREDENTIAL`, `ACTIVITY_TYPE_DELETE_FIAT_ON_RAMP_CREDENTIAL`, `ACTIVITY_TYPE_EMAIL_AUTH_V3`, `ACTIVITY_TYPE_INIT_USER_EMAIL_RECOVERY_V2`, `ACTIVITY_TYPE_INIT_OTP_AUTH_V3`, `ACTIVITY_TYPE_INIT_OTP_V2`, `ACTIVITY_TYPE_UPSERT_GAS_USAGE_CONFIG`, `ACTIVITY_TYPE_CREATE_TVC_APP`, `ACTIVITY_TYPE_CREATE_TVC_DEPLOYMENT`, `ACTIVITY_TYPE_CREATE_TVC_MANIFEST_APPROVALS`, `ACTIVITY_TYPE_SOL_SEND_TRANSACTION`, `ACTIVITY_TYPE_INIT_OTP_V3`, `ACTIVITY_TYPE_VERIFY_OTP_V2`, `ACTIVITY_TYPE_OTP_LOGIN_V2`, `ACTIVITY_TYPE_UPDATE_ORGANIZATION_NAME`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V8`, `ACTIVITY_TYPE_CREATE_OAUTH_PROVIDERS_V2`, `ACTIVITY_TYPE_CREATE_USERS_V4`, `ACTIVITY_TYPE_CREATE_WEBHOOK_ENDPOINT`, `ACTIVITY_TYPE_UPDATE_WEBHOOK_ENDPOINT`, `ACTIVITY_TYPE_DELETE_WEBHOOK_ENDPOINT`, `ACTIVITY_TYPE_SET_IP_ALLOWLIST`, `ACTIVITY_TYPE_REMOVE_IP_ALLOWLIST`, `ACTIVITY_TYPE_UPDATE_TVC_APP_LIVE_DEPLOYMENT`, `ACTIVITY_TYPE_DELETE_TVC_DEPLOYMENT`, `ACTIVITY_TYPE_DELETE_TVC_APP_AND_DEPLOYMENTS`, `ACTIVITY_TYPE_RESTORE_TVC_DEPLOYMENT`, `ACTIVITY_TYPE_SPARK_SIGN_FROST`, `ACTIVITY_TYPE_SPARK_PREPARE_TRANSFER`, `ACTIVITY_TYPE_SPARK_CLAIM_TRANSFER`, `ACTIVITY_TYPE_SPARK_PREPARE_LIGHTNING_RECEIVE`, `ACTIVITY_TYPE_POST_TVC_QUORUM_KEY_SHARE`, `ACTIVITY_TYPE_ETH_SEND_TRANSACTION_V2`, `ACTIVITY_TYPE_CREATE_MFA_POLICY`, `ACTIVITY_TYPE_UPDATE_MFA_POLICY`, `ACTIVITY_TYPE_DELETE_MFA_POLICY`, `ACTIVITY_TYPE_CREATE_SESSION_PROFILE`, `ACTIVITY_TYPE_EARN_DEPLOY_WRAPPER`, `ACTIVITY_TYPE_EARN_DEPOSIT`, `ACTIVITY_TYPE_EARN_WITHDRAW`, `ACTIVITY_TYPE_EXECUTE_SWAP`, `ACTIVITY_TYPE_UPSERT_SWAP_CONFIG`, `ACTIVITY_TYPE_CREATE_TVC_OPERATOR`, `ACTIVITY_TYPE_CREATE_TVC_QUORUM_KEY`, `ACTIVITY_TYPE_RE_ENCRYPT_TVC_QUORUM_KEY_SHARE`, `ACTIVITY_TYPE_INIT_IMPORT_SECRETS`, `ACTIVITY_TYPE_SOL_SEND_TRANSACTION_V2`, `ACTIVITY_TYPE_CLAIM_SWAP_FEES`, `ACTIVITY_TYPE_EARN_SET_WRAPPER_STATE`, `ACTIVITY_TYPE_CLAIM_EARN_FEES`, `ACTIVITY_TYPE_UPDATE_WALLET_ACCOUNT_NAME` @@ -67,7 +67,7 @@ Enum options: `ACTIVITY_STATUS_CREATED`, `ACTIVITY_STATUS_PENDING`, `ACTIVITY_ST type field -Enum options: `ACTIVITY_TYPE_CREATE_API_KEYS`, `ACTIVITY_TYPE_CREATE_USERS`, `ACTIVITY_TYPE_CREATE_PRIVATE_KEYS`, `ACTIVITY_TYPE_SIGN_RAW_PAYLOAD`, `ACTIVITY_TYPE_CREATE_INVITATIONS`, `ACTIVITY_TYPE_ACCEPT_INVITATION`, `ACTIVITY_TYPE_CREATE_POLICY`, `ACTIVITY_TYPE_DISABLE_PRIVATE_KEY`, `ACTIVITY_TYPE_DELETE_USERS`, `ACTIVITY_TYPE_DELETE_API_KEYS`, `ACTIVITY_TYPE_DELETE_INVITATION`, `ACTIVITY_TYPE_DELETE_ORGANIZATION`, `ACTIVITY_TYPE_DELETE_POLICY`, `ACTIVITY_TYPE_CREATE_USER_TAG`, `ACTIVITY_TYPE_DELETE_USER_TAGS`, `ACTIVITY_TYPE_CREATE_ORGANIZATION`, `ACTIVITY_TYPE_SIGN_TRANSACTION`, `ACTIVITY_TYPE_APPROVE_ACTIVITY`, `ACTIVITY_TYPE_REJECT_ACTIVITY`, `ACTIVITY_TYPE_DELETE_AUTHENTICATORS`, `ACTIVITY_TYPE_CREATE_AUTHENTICATORS`, `ACTIVITY_TYPE_CREATE_PRIVATE_KEY_TAG`, `ACTIVITY_TYPE_DELETE_PRIVATE_KEY_TAGS`, `ACTIVITY_TYPE_SET_PAYMENT_METHOD`, `ACTIVITY_TYPE_ACTIVATE_BILLING_TIER`, `ACTIVITY_TYPE_DELETE_PAYMENT_METHOD`, `ACTIVITY_TYPE_CREATE_POLICY_V2`, `ACTIVITY_TYPE_CREATE_POLICY_V3`, `ACTIVITY_TYPE_CREATE_API_ONLY_USERS`, `ACTIVITY_TYPE_UPDATE_ROOT_QUORUM`, `ACTIVITY_TYPE_UPDATE_USER_TAG`, `ACTIVITY_TYPE_UPDATE_PRIVATE_KEY_TAG`, `ACTIVITY_TYPE_CREATE_AUTHENTICATORS_V2`, `ACTIVITY_TYPE_CREATE_ORGANIZATION_V2`, `ACTIVITY_TYPE_CREATE_USERS_V2`, `ACTIVITY_TYPE_ACCEPT_INVITATION_V2`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V2`, `ACTIVITY_TYPE_UPDATE_ALLOWED_ORIGINS`, `ACTIVITY_TYPE_CREATE_PRIVATE_KEYS_V2`, `ACTIVITY_TYPE_UPDATE_USER`, `ACTIVITY_TYPE_UPDATE_POLICY`, `ACTIVITY_TYPE_SET_PAYMENT_METHOD_V2`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V3`, `ACTIVITY_TYPE_CREATE_WALLET`, `ACTIVITY_TYPE_CREATE_WALLET_ACCOUNTS`, `ACTIVITY_TYPE_INIT_USER_EMAIL_RECOVERY`, `ACTIVITY_TYPE_RECOVER_USER`, `ACTIVITY_TYPE_SET_ORGANIZATION_FEATURE`, `ACTIVITY_TYPE_REMOVE_ORGANIZATION_FEATURE`, `ACTIVITY_TYPE_SIGN_RAW_PAYLOAD_V2`, `ACTIVITY_TYPE_SIGN_TRANSACTION_V2`, `ACTIVITY_TYPE_EXPORT_PRIVATE_KEY`, `ACTIVITY_TYPE_EXPORT_WALLET`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V4`, `ACTIVITY_TYPE_EMAIL_AUTH`, `ACTIVITY_TYPE_EXPORT_WALLET_ACCOUNT`, `ACTIVITY_TYPE_INIT_IMPORT_WALLET`, `ACTIVITY_TYPE_IMPORT_WALLET`, `ACTIVITY_TYPE_INIT_IMPORT_PRIVATE_KEY`, `ACTIVITY_TYPE_IMPORT_PRIVATE_KEY`, `ACTIVITY_TYPE_CREATE_POLICIES`, `ACTIVITY_TYPE_SIGN_RAW_PAYLOADS`, `ACTIVITY_TYPE_CREATE_READ_ONLY_SESSION`, `ACTIVITY_TYPE_CREATE_OAUTH_PROVIDERS`, `ACTIVITY_TYPE_DELETE_OAUTH_PROVIDERS`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V5`, `ACTIVITY_TYPE_OAUTH`, `ACTIVITY_TYPE_CREATE_API_KEYS_V2`, `ACTIVITY_TYPE_CREATE_READ_WRITE_SESSION`, `ACTIVITY_TYPE_EMAIL_AUTH_V2`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V6`, `ACTIVITY_TYPE_DELETE_PRIVATE_KEYS`, `ACTIVITY_TYPE_DELETE_WALLETS`, `ACTIVITY_TYPE_CREATE_READ_WRITE_SESSION_V2`, `ACTIVITY_TYPE_DELETE_SUB_ORGANIZATION`, `ACTIVITY_TYPE_INIT_OTP_AUTH`, `ACTIVITY_TYPE_OTP_AUTH`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V7`, `ACTIVITY_TYPE_UPDATE_WALLET`, `ACTIVITY_TYPE_UPDATE_POLICY_V2`, `ACTIVITY_TYPE_CREATE_USERS_V3`, `ACTIVITY_TYPE_INIT_OTP_AUTH_V2`, `ACTIVITY_TYPE_INIT_OTP`, `ACTIVITY_TYPE_VERIFY_OTP`, `ACTIVITY_TYPE_OTP_LOGIN`, `ACTIVITY_TYPE_STAMP_LOGIN`, `ACTIVITY_TYPE_OAUTH_LOGIN`, `ACTIVITY_TYPE_UPDATE_USER_NAME`, `ACTIVITY_TYPE_UPDATE_USER_EMAIL`, `ACTIVITY_TYPE_UPDATE_USER_PHONE_NUMBER`, `ACTIVITY_TYPE_INIT_FIAT_ON_RAMP`, `ACTIVITY_TYPE_CREATE_SMART_CONTRACT_INTERFACE`, `ACTIVITY_TYPE_DELETE_SMART_CONTRACT_INTERFACE`, `ACTIVITY_TYPE_ENABLE_AUTH_PROXY`, `ACTIVITY_TYPE_DISABLE_AUTH_PROXY`, `ACTIVITY_TYPE_UPDATE_AUTH_PROXY_CONFIG`, `ACTIVITY_TYPE_CREATE_OAUTH2_CREDENTIAL`, `ACTIVITY_TYPE_UPDATE_OAUTH2_CREDENTIAL`, `ACTIVITY_TYPE_DELETE_OAUTH2_CREDENTIAL`, `ACTIVITY_TYPE_OAUTH2_AUTHENTICATE`, `ACTIVITY_TYPE_DELETE_WALLET_ACCOUNTS`, `ACTIVITY_TYPE_DELETE_POLICIES`, `ACTIVITY_TYPE_ETH_SEND_RAW_TRANSACTION`, `ACTIVITY_TYPE_ETH_SEND_TRANSACTION`, `ACTIVITY_TYPE_CREATE_FIAT_ON_RAMP_CREDENTIAL`, `ACTIVITY_TYPE_UPDATE_FIAT_ON_RAMP_CREDENTIAL`, `ACTIVITY_TYPE_DELETE_FIAT_ON_RAMP_CREDENTIAL`, `ACTIVITY_TYPE_EMAIL_AUTH_V3`, `ACTIVITY_TYPE_INIT_USER_EMAIL_RECOVERY_V2`, `ACTIVITY_TYPE_INIT_OTP_AUTH_V3`, `ACTIVITY_TYPE_INIT_OTP_V2`, `ACTIVITY_TYPE_UPSERT_GAS_USAGE_CONFIG`, `ACTIVITY_TYPE_CREATE_TVC_APP`, `ACTIVITY_TYPE_CREATE_TVC_DEPLOYMENT`, `ACTIVITY_TYPE_CREATE_TVC_MANIFEST_APPROVALS`, `ACTIVITY_TYPE_SOL_SEND_TRANSACTION`, `ACTIVITY_TYPE_INIT_OTP_V3`, `ACTIVITY_TYPE_VERIFY_OTP_V2`, `ACTIVITY_TYPE_OTP_LOGIN_V2`, `ACTIVITY_TYPE_UPDATE_ORGANIZATION_NAME`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V8`, `ACTIVITY_TYPE_CREATE_OAUTH_PROVIDERS_V2`, `ACTIVITY_TYPE_CREATE_USERS_V4`, `ACTIVITY_TYPE_CREATE_WEBHOOK_ENDPOINT`, `ACTIVITY_TYPE_UPDATE_WEBHOOK_ENDPOINT`, `ACTIVITY_TYPE_DELETE_WEBHOOK_ENDPOINT`, `ACTIVITY_TYPE_SET_IP_ALLOWLIST`, `ACTIVITY_TYPE_REMOVE_IP_ALLOWLIST`, `ACTIVITY_TYPE_UPDATE_TVC_APP_LIVE_DEPLOYMENT`, `ACTIVITY_TYPE_DELETE_TVC_DEPLOYMENT`, `ACTIVITY_TYPE_DELETE_TVC_APP_AND_DEPLOYMENTS`, `ACTIVITY_TYPE_RESTORE_TVC_DEPLOYMENT`, `ACTIVITY_TYPE_SPARK_SIGN_FROST`, `ACTIVITY_TYPE_SPARK_PREPARE_TRANSFER`, `ACTIVITY_TYPE_SPARK_CLAIM_TRANSFER`, `ACTIVITY_TYPE_SPARK_PREPARE_LIGHTNING_RECEIVE`, `ACTIVITY_TYPE_POST_TVC_QUORUM_KEY_SHARE`, `ACTIVITY_TYPE_ETH_SEND_TRANSACTION_V2`, `ACTIVITY_TYPE_CREATE_MFA_POLICY`, `ACTIVITY_TYPE_UPDATE_MFA_POLICY`, `ACTIVITY_TYPE_DELETE_MFA_POLICY`, `ACTIVITY_TYPE_CREATE_SESSION_PROFILE` +Enum options: `ACTIVITY_TYPE_CREATE_API_KEYS`, `ACTIVITY_TYPE_CREATE_USERS`, `ACTIVITY_TYPE_CREATE_PRIVATE_KEYS`, `ACTIVITY_TYPE_SIGN_RAW_PAYLOAD`, `ACTIVITY_TYPE_CREATE_INVITATIONS`, `ACTIVITY_TYPE_ACCEPT_INVITATION`, `ACTIVITY_TYPE_CREATE_POLICY`, `ACTIVITY_TYPE_DISABLE_PRIVATE_KEY`, `ACTIVITY_TYPE_DELETE_USERS`, `ACTIVITY_TYPE_DELETE_API_KEYS`, `ACTIVITY_TYPE_DELETE_INVITATION`, `ACTIVITY_TYPE_DELETE_ORGANIZATION`, `ACTIVITY_TYPE_DELETE_POLICY`, `ACTIVITY_TYPE_CREATE_USER_TAG`, `ACTIVITY_TYPE_DELETE_USER_TAGS`, `ACTIVITY_TYPE_CREATE_ORGANIZATION`, `ACTIVITY_TYPE_SIGN_TRANSACTION`, `ACTIVITY_TYPE_APPROVE_ACTIVITY`, `ACTIVITY_TYPE_REJECT_ACTIVITY`, `ACTIVITY_TYPE_DELETE_AUTHENTICATORS`, `ACTIVITY_TYPE_CREATE_AUTHENTICATORS`, `ACTIVITY_TYPE_CREATE_PRIVATE_KEY_TAG`, `ACTIVITY_TYPE_DELETE_PRIVATE_KEY_TAGS`, `ACTIVITY_TYPE_SET_PAYMENT_METHOD`, `ACTIVITY_TYPE_ACTIVATE_BILLING_TIER`, `ACTIVITY_TYPE_DELETE_PAYMENT_METHOD`, `ACTIVITY_TYPE_CREATE_POLICY_V2`, `ACTIVITY_TYPE_CREATE_POLICY_V3`, `ACTIVITY_TYPE_CREATE_API_ONLY_USERS`, `ACTIVITY_TYPE_UPDATE_ROOT_QUORUM`, `ACTIVITY_TYPE_UPDATE_USER_TAG`, `ACTIVITY_TYPE_UPDATE_PRIVATE_KEY_TAG`, `ACTIVITY_TYPE_CREATE_AUTHENTICATORS_V2`, `ACTIVITY_TYPE_CREATE_ORGANIZATION_V2`, `ACTIVITY_TYPE_CREATE_USERS_V2`, `ACTIVITY_TYPE_ACCEPT_INVITATION_V2`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V2`, `ACTIVITY_TYPE_UPDATE_ALLOWED_ORIGINS`, `ACTIVITY_TYPE_CREATE_PRIVATE_KEYS_V2`, `ACTIVITY_TYPE_UPDATE_USER`, `ACTIVITY_TYPE_UPDATE_POLICY`, `ACTIVITY_TYPE_SET_PAYMENT_METHOD_V2`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V3`, `ACTIVITY_TYPE_CREATE_WALLET`, `ACTIVITY_TYPE_CREATE_WALLET_ACCOUNTS`, `ACTIVITY_TYPE_INIT_USER_EMAIL_RECOVERY`, `ACTIVITY_TYPE_RECOVER_USER`, `ACTIVITY_TYPE_SET_ORGANIZATION_FEATURE`, `ACTIVITY_TYPE_REMOVE_ORGANIZATION_FEATURE`, `ACTIVITY_TYPE_SIGN_RAW_PAYLOAD_V2`, `ACTIVITY_TYPE_SIGN_TRANSACTION_V2`, `ACTIVITY_TYPE_EXPORT_PRIVATE_KEY`, `ACTIVITY_TYPE_EXPORT_WALLET`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V4`, `ACTIVITY_TYPE_EMAIL_AUTH`, `ACTIVITY_TYPE_EXPORT_WALLET_ACCOUNT`, `ACTIVITY_TYPE_INIT_IMPORT_WALLET`, `ACTIVITY_TYPE_IMPORT_WALLET`, `ACTIVITY_TYPE_INIT_IMPORT_PRIVATE_KEY`, `ACTIVITY_TYPE_IMPORT_PRIVATE_KEY`, `ACTIVITY_TYPE_CREATE_POLICIES`, `ACTIVITY_TYPE_SIGN_RAW_PAYLOADS`, `ACTIVITY_TYPE_CREATE_READ_ONLY_SESSION`, `ACTIVITY_TYPE_CREATE_OAUTH_PROVIDERS`, `ACTIVITY_TYPE_DELETE_OAUTH_PROVIDERS`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V5`, `ACTIVITY_TYPE_OAUTH`, `ACTIVITY_TYPE_CREATE_API_KEYS_V2`, `ACTIVITY_TYPE_CREATE_READ_WRITE_SESSION`, `ACTIVITY_TYPE_EMAIL_AUTH_V2`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V6`, `ACTIVITY_TYPE_DELETE_PRIVATE_KEYS`, `ACTIVITY_TYPE_DELETE_WALLETS`, `ACTIVITY_TYPE_CREATE_READ_WRITE_SESSION_V2`, `ACTIVITY_TYPE_DELETE_SUB_ORGANIZATION`, `ACTIVITY_TYPE_INIT_OTP_AUTH`, `ACTIVITY_TYPE_OTP_AUTH`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V7`, `ACTIVITY_TYPE_UPDATE_WALLET`, `ACTIVITY_TYPE_UPDATE_POLICY_V2`, `ACTIVITY_TYPE_CREATE_USERS_V3`, `ACTIVITY_TYPE_INIT_OTP_AUTH_V2`, `ACTIVITY_TYPE_INIT_OTP`, `ACTIVITY_TYPE_VERIFY_OTP`, `ACTIVITY_TYPE_OTP_LOGIN`, `ACTIVITY_TYPE_STAMP_LOGIN`, `ACTIVITY_TYPE_OAUTH_LOGIN`, `ACTIVITY_TYPE_UPDATE_USER_NAME`, `ACTIVITY_TYPE_UPDATE_USER_EMAIL`, `ACTIVITY_TYPE_UPDATE_USER_PHONE_NUMBER`, `ACTIVITY_TYPE_INIT_FIAT_ON_RAMP`, `ACTIVITY_TYPE_CREATE_SMART_CONTRACT_INTERFACE`, `ACTIVITY_TYPE_DELETE_SMART_CONTRACT_INTERFACE`, `ACTIVITY_TYPE_ENABLE_AUTH_PROXY`, `ACTIVITY_TYPE_DISABLE_AUTH_PROXY`, `ACTIVITY_TYPE_UPDATE_AUTH_PROXY_CONFIG`, `ACTIVITY_TYPE_CREATE_OAUTH2_CREDENTIAL`, `ACTIVITY_TYPE_UPDATE_OAUTH2_CREDENTIAL`, `ACTIVITY_TYPE_DELETE_OAUTH2_CREDENTIAL`, `ACTIVITY_TYPE_OAUTH2_AUTHENTICATE`, `ACTIVITY_TYPE_DELETE_WALLET_ACCOUNTS`, `ACTIVITY_TYPE_DELETE_POLICIES`, `ACTIVITY_TYPE_ETH_SEND_RAW_TRANSACTION`, `ACTIVITY_TYPE_ETH_SEND_TRANSACTION`, `ACTIVITY_TYPE_CREATE_FIAT_ON_RAMP_CREDENTIAL`, `ACTIVITY_TYPE_UPDATE_FIAT_ON_RAMP_CREDENTIAL`, `ACTIVITY_TYPE_DELETE_FIAT_ON_RAMP_CREDENTIAL`, `ACTIVITY_TYPE_EMAIL_AUTH_V3`, `ACTIVITY_TYPE_INIT_USER_EMAIL_RECOVERY_V2`, `ACTIVITY_TYPE_INIT_OTP_AUTH_V3`, `ACTIVITY_TYPE_INIT_OTP_V2`, `ACTIVITY_TYPE_UPSERT_GAS_USAGE_CONFIG`, `ACTIVITY_TYPE_CREATE_TVC_APP`, `ACTIVITY_TYPE_CREATE_TVC_DEPLOYMENT`, `ACTIVITY_TYPE_CREATE_TVC_MANIFEST_APPROVALS`, `ACTIVITY_TYPE_SOL_SEND_TRANSACTION`, `ACTIVITY_TYPE_INIT_OTP_V3`, `ACTIVITY_TYPE_VERIFY_OTP_V2`, `ACTIVITY_TYPE_OTP_LOGIN_V2`, `ACTIVITY_TYPE_UPDATE_ORGANIZATION_NAME`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V8`, `ACTIVITY_TYPE_CREATE_OAUTH_PROVIDERS_V2`, `ACTIVITY_TYPE_CREATE_USERS_V4`, `ACTIVITY_TYPE_CREATE_WEBHOOK_ENDPOINT`, `ACTIVITY_TYPE_UPDATE_WEBHOOK_ENDPOINT`, `ACTIVITY_TYPE_DELETE_WEBHOOK_ENDPOINT`, `ACTIVITY_TYPE_SET_IP_ALLOWLIST`, `ACTIVITY_TYPE_REMOVE_IP_ALLOWLIST`, `ACTIVITY_TYPE_UPDATE_TVC_APP_LIVE_DEPLOYMENT`, `ACTIVITY_TYPE_DELETE_TVC_DEPLOYMENT`, `ACTIVITY_TYPE_DELETE_TVC_APP_AND_DEPLOYMENTS`, `ACTIVITY_TYPE_RESTORE_TVC_DEPLOYMENT`, `ACTIVITY_TYPE_SPARK_SIGN_FROST`, `ACTIVITY_TYPE_SPARK_PREPARE_TRANSFER`, `ACTIVITY_TYPE_SPARK_CLAIM_TRANSFER`, `ACTIVITY_TYPE_SPARK_PREPARE_LIGHTNING_RECEIVE`, `ACTIVITY_TYPE_POST_TVC_QUORUM_KEY_SHARE`, `ACTIVITY_TYPE_ETH_SEND_TRANSACTION_V2`, `ACTIVITY_TYPE_CREATE_MFA_POLICY`, `ACTIVITY_TYPE_UPDATE_MFA_POLICY`, `ACTIVITY_TYPE_DELETE_MFA_POLICY`, `ACTIVITY_TYPE_CREATE_SESSION_PROFILE`, `ACTIVITY_TYPE_EARN_DEPLOY_WRAPPER`, `ACTIVITY_TYPE_EARN_DEPOSIT`, `ACTIVITY_TYPE_EARN_WITHDRAW`, `ACTIVITY_TYPE_EXECUTE_SWAP`, `ACTIVITY_TYPE_UPSERT_SWAP_CONFIG`, `ACTIVITY_TYPE_CREATE_TVC_OPERATOR`, `ACTIVITY_TYPE_CREATE_TVC_QUORUM_KEY`, `ACTIVITY_TYPE_RE_ENCRYPT_TVC_QUORUM_KEY_SHARE`, `ACTIVITY_TYPE_INIT_IMPORT_SECRETS`, `ACTIVITY_TYPE_SOL_SEND_TRANSACTION_V2`, `ACTIVITY_TYPE_CLAIM_SWAP_FEES`, `ACTIVITY_TYPE_EARN_SET_WRAPPER_STATE`, `ACTIVITY_TYPE_CLAIM_EARN_FEES`, `ACTIVITY_TYPE_UPDATE_WALLET_ACCOUNT_NAME` @@ -1882,7 +1882,7 @@ Unique identifier for the user performing recovery. name field -Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED` +Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_SWAP_CONFIG`, `FEATURE_NAME_EARN_CONFIG` @@ -1897,7 +1897,7 @@ Optional value for the feature. Will override existing values if feature is alre name field -Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED` +Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_SWAP_CONFIG`, `FEATURE_NAME_EARN_CONFIG` @@ -3697,6 +3697,9 @@ item field + +Whether captcha verification is required on sign up & otp init. + @@ -4314,6 +4317,9 @@ Port to use for health checks.
Port to use for public ingress. + + +Optional desired replica count for this deployment. @@ -5427,6 +5433,264 @@ The duration in seconds for which sessions created with this Session Profile are
Notes for a Session Profile. + + + +
+ + earnDeployWrapperIntent field + + +Address of the underlying yield vault to wrap (from the ListEarnVaults catalog). + + +CAIP-2 chain ID the vault lives on (e.g., 'eip155:8453' for Base). + +Enum options: `eip155:1`, `eip155:8453`, `eip155:42161`, `eip155:137`, `eip155:56`, `eip155:4217` + + + +Your performance fee on gross yield, in basis points (e.g., '2000' for 20%). Your fee plus Turnkey's fee cannot exceed 50% of yield. + + +The wallet address that receives the client's fee payouts on-chain. Must be a Turnkey-managed wallet address. + + + + + + earnDepositIntent field + + +Address of the deployed Earn wrapper to deposit into, from ListEarnVaults/ListEarnPositions. Must be one of the org's deployed wrappers. + + +A Wallet account address or Private Key address to deposit from and sign with. Must be an on-chain address; Private Key identifiers are not supported. + + +Amount of the underlying asset to deposit, in raw on-chain units (e.g., '1000000' for 1 USDC at 6 decimals). + + +CAIP-2 chain ID the vault lives on (e.g., 'eip155:8453' for Base). + +Enum options: `eip155:1`, `eip155:8453`, `eip155:42161`, `eip155:137`, `eip155:56`, `eip155:4217` + + + +Whether to sponsor this transaction via Gas Station. + + + + + + earnWithdrawIntent field + + +Address of the deployed Earn wrapper holding the position to withdraw from, from ListEarnPositions. Must be one of the org's deployed wrappers. + + +A Wallet account address or Private Key address to withdraw to and sign with. Must be an on-chain address; Private Key identifiers are not supported. + + +CAIP-2 chain ID the vault lives on (e.g., 'eip155:8453' for Base). + +Enum options: `eip155:1`, `eip155:8453`, `eip155:42161`, `eip155:137`, `eip155:56`, `eip155:4217` + + + +Whether to sponsor this transaction via Gas Station. + + +The amount of the underlying asset to withdraw, in raw on-chain units. Pass 'MAX' to withdraw the entire position. + + + + + + executeSwapIntent field + + +CAIP-19 asset ID for the input asset. The chain is derived from this value. + + +CAIP-19 asset ID for the output asset. May be on a different chain than `input_token` for cross-chain swaps. + + +Base-unit amount of the input asset. + + +Wallet account address to sign and submit the swap transaction from. Cross-wallet swaps are not supported. + + +Whether to sponsor the resulting swap transaction via Gas Station when supported by the chain. + + +Maximum allowed slippage in basis points. + + +Swap provider to execute with, as returned by get_swap_quote. When omitted, execution uses the default provider. + + +Minimum acceptable base-unit amount of the output asset. Execution fails if the swap provider's quoted minimum output falls below this floor at execution time. + + + + + + upsertSwapConfigIntent field + + +feeReceiverWalletAddress field + + +Client fee in basis points applied to swaps; used for all pairs unless stable_fee_bps is set. + + +provider field + + +Optional override applied when both swap assets are stablecoins; falls back to fee_bps when unset. + + + + + + createTvcOperatorIntent field + + +Human-readable name for a new wallet created for this TVC operator + + +Unique identifier for an existing wallet to reuse for this TVC operator + + +Base derivation path for creating TVC operator wallet accounts + + +Human-readable name for this new TVC operator + + + + + + createTvcQuorumKeyIntent field + + +The threshold of operators needed to reassemble this TVC quorum key + + + Operator public keys used to encrypt and later approve the generated TVC quorum key shares + + +item field + + + + + + + + + reEncryptTvcQuorumKeyShareIntent field + + +Base64-encoded attestation document for the TVC deployment provisioning enclave + + +Base64-encoded manifest for the TVC deployment + + +Operator encryption public key used to encrypt the hosted TVC quorum key share + + +Operator signing public key used to approve the TVC manifest + + +Unique identifier of the TVC deployment receiving the re-encrypted quorum key share + + +Quorum key for the TVC application + + + + + + initImportSecretsIntent field + + +encryptionSuite field + +Enum options: `TRANSPORT_ENCRYPTION_SUITE_ENCLAVE_ENCRYPT_V1` + + + +The number of secrets the user intends to import. + + + + + + solSendTransactionIntentV2 field + + +Hex-encoded serialized unsigned Solana transaction (full wire format with zeroed signature placeholders) + + + Ordered Solana signer addresses Turnkey signs with. Between 1 and 16 signers. For sponsored transactions this must list every required signer of the transaction in transaction order. + + +item field + + + + + +Whether to sponsor this transaction via Gas Station. + + +CAIP-2 chain ID (e.g., 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' for Solana mainnet). Human-readable Solana aliases ('solana:mainnet', 'solana:devnet') are also accepted and normalized to canonical CAIP-2 values. + +Enum options: `solana:mainnet`, `solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp`, `solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d`, `solana:devnet`, `solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1`, `solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1wcaWoxPkrZBG` + + + +User-provided blockhash for replay protection / deadline control. If provided, it is used as-is, including for sponsored transactions (the transaction is only broadcastable while the blockhash is current). If omitted and sponsor=true, a fresh blockhash is fetched during execution. + + + + + +claimSwapFeesIntent field + + + earnSetWrapperStateIntent field + + +Address of the deployed Earn wrapper to update, from ListEarnVaults/ListEarnPositions. Must be one of the org's deployed wrappers. + + +When true, deposits to this wrapper are rejected; withdrawals are unaffected. Set to false to re-enable deposits. + + + + + + claimEarnFeesIntent field + + +Address of the deployed Earn wrapper to claim fees for. Must be one of the org's deployed wrappers. + + + + + + updateWalletAccountNameIntent field + + +Unique identifier for a given Wallet Account. + + +Human-readable name for this Wallet Account. @@ -5977,7 +6241,7 @@ item field name field -Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED` +Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_SWAP_CONFIG`, `FEATURE_NAME_EARN_CONFIG` @@ -5998,7 +6262,7 @@ value field name field -Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED` +Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_SWAP_CONFIG`, `FEATURE_NAME_EARN_CONFIG` @@ -7176,6 +7440,180 @@ Unique identifier for a given MFA Policy. Unique identifier for a given Session Profile. + + + + + + earnDeployWrapperResult field + + +Address of the deployed fee wrapper (the deposit target). + + +Address of the deployed fee splitter (PaymentSplitter for Morpho, RevenueSplitterOwner for Aave). + + +Identifier to poll deploy status. + + + + + + earnDepositResult field + + +Identifier to poll deposit status and tx hash via GetEarnDepositStatus. + + + + + + earnWithdrawResult field + + +Identifier to poll withdrawal status and tx hash via GetEarnWithdrawStatus. + + + + + + executeSwapResult field + + +The send_transaction_status ID associated with the swap transaction submission + + +Swap provider used to build the transaction. + + +Quote identifier used for execution, if any. + + + + + + upsertSwapConfigResult field + + +feeReceiverWalletAddress field + + +feeBps field + + +stableFeeBps field + + + + + + createTvcOperatorResult field + + +The unique identifier for the wallet containing TVC operator accounts + + +The unique identifier for the TVC operator + + +Public encryption key for this TVC operator + + +Public signing key for this TVC operator + + + + + + createTvcQuorumKeyResult field + + +The unique identifier for the TVC quorum key + + +Public key for the generated TVC quorum key + + + The unique identifier(s) for the generated TVC quorum key shares + + +item field + + + + + + + + + reEncryptTvcQuorumKeyShareResult field + + +The unique identifier for the provisioning quorum key share + + + + + + initImportSecretsResult field + + + Enclave ingress target keys along with metadata specific to the encryption suite. For enclave encrypt v1 this will be ServerTargetMsgV1. + + +item field + + + + + + + + + solSendTransactionResultV2 field + + +The send_transaction_status ID associated with the transaction submission + + + + + + claimSwapFeesResult field + + +Relay claim request ID submitted through the permit endpoint. + + + + + + earnSetWrapperStateResult field + + +Address of the updated Earn wrapper. + + +The wrapper's deposit state after this activity. + + + + + + claimEarnFeesResult field + + +Identifier to poll claim status and tx hash via GetClaimEarnFeesStatus. + + + + + + updateWalletAccountNameResult field + + +Unique identifier for a given Wallet Account. @@ -8883,7 +9321,8 @@ const response = await turnkeyClient.apiClient().getActivities({ "verificationTokenRequiredForGetAccountPii": "", "socialLinkingClientIds": [ "" - ] + ], + "captchaEnabled": "" }, "createOauth2CredentialIntent": { "provider": "", @@ -9086,7 +9525,8 @@ const response = await turnkeyClient.apiClient().getActivities({ "debugMode": "", "healthCheckType": "", "healthCheckPort": "", - "publicIngressPort": "" + "publicIngressPort": "", + "replicas": "" }, "createTvcManifestApprovalsIntent": { "manifestId": "", @@ -9495,6 +9935,87 @@ const response = await turnkeyClient.apiClient().getActivities({ "scope": "", "expirationSeconds": "", "notes": "" + }, + "earnDeployWrapperIntent": { + "vaultAddress": "", + "chainCaip2": "", + "clientFeeBps": "", + "clientFeeWallet": "" + }, + "earnDepositIntent": { + "wrapperAddress": "", + "signWith": "", + "assets": "", + "chainCaip2": "", + "sponsor": "" + }, + "earnWithdrawIntent": { + "wrapperAddress": "", + "signWith": "", + "chainCaip2": "", + "sponsor": "", + "amountValue": "" + }, + "executeSwapIntent": { + "inputToken": "", + "outputToken": "", + "inputAmount": "", + "walletAccount": "", + "sponsor": "", + "slippage": "", + "provider": "", + "minOutputAmount": "" + }, + "upsertSwapConfigIntent": { + "feeReceiverWalletAddress": "", + "feeBps": "", + "provider": "", + "stableFeeBps": "" + }, + "createTvcOperatorIntent": { + "walletName": "", + "walletId": "", + "path": "", + "operatorName": "" + }, + "createTvcQuorumKeyIntent": { + "threshold": "", + "operatorEncryptKeys": [ + "" + ] + }, + "reEncryptTvcQuorumKeyShareIntent": { + "attestationDocB64": "", + "manifestB64": "", + "operatorEncryptKey": "", + "operatorSignKey": "", + "deploymentId": "", + "appQuorumKey": "" + }, + "initImportSecretsIntent": { + "encryptionSuite": "", + "numSecrets": "" + }, + "solSendTransactionIntentV2": { + "unsignedTransaction": "", + "signWiths": [ + "" + ], + "sponsor": "", + "caip2": "", + "recentBlockhash": "" + }, + "claimSwapFeesIntent": "", + "earnSetWrapperStateIntent": { + "wrapperAddress": "", + "depositsDisabled": "" + }, + "claimEarnFeesIntent": { + "wrapperAddress": "" + }, + "updateWalletAccountNameIntent": { + "walletAccountId": "", + "name": "" } }, "result": { @@ -10105,6 +10626,64 @@ const response = await turnkeyClient.apiClient().getActivities({ }, "createSessionProfileResult": { "sessionProfileId": "" + }, + "earnDeployWrapperResult": { + "wrapperAddress": "", + "splitterAddress": "", + "deployRequestId": "" + }, + "earnDepositResult": { + "depositRequestId": "" + }, + "earnWithdrawResult": { + "withdrawRequestId": "" + }, + "executeSwapResult": { + "sendTransactionStatusId": "", + "provider": "", + "quoteId": "" + }, + "upsertSwapConfigResult": { + "feeReceiverWalletAddress": "", + "feeBps": "", + "stableFeeBps": "" + }, + "createTvcOperatorResult": { + "walletId": "", + "operatorId": "", + "encryptPublicKey": "", + "signPublicKey": "" + }, + "createTvcQuorumKeyResult": { + "quorumKeyId": "", + "quorumPublicKey": "", + "shareIds": [ + "" + ] + }, + "reEncryptTvcQuorumKeyShareResult": { + "provisioningShareId": "" + }, + "initImportSecretsResult": { + "enclaveTargetMessages": [ + "" + ] + }, + "solSendTransactionResultV2": { + "sendTransactionStatusId": "" + }, + "claimSwapFeesResult": { + "requestId": "" + }, + "earnSetWrapperStateResult": { + "wrapperAddress": "", + "depositsDisabled": "" + }, + "claimEarnFeesResult": { + "claimRequestId": "" + }, + "updateWalletAccountNameResult": { + "walletAccountId": "" } }, "votes": [ diff --git a/docs.json b/docs.json index 08eed0e2..2856511f 100644 --- a/docs.json +++ b/docs.json @@ -510,6 +510,7 @@ "api-reference/activities/approve-activity", "api-reference/activities/broadcast-evm-transaction", "api-reference/activities/broadcast-svm-transaction", + "api-reference/activities/claim-earn-fees", "api-reference/activities/claim-spark-transfer", "api-reference/activities/create-a-fiat-on-ramp-credential", "api-reference/activities/create-a-tvc-app", @@ -555,6 +556,8 @@ "api-reference/activities/delete-wallet-accounts", "api-reference/activities/delete-wallets", "api-reference/activities/delete-webhook-endpoint", + "api-reference/activities/deploy-earn-wrapper", + "api-reference/activities/deposit-into-earn-vault", "api-reference/activities/export-private-key", "api-reference/activities/export-wallet", "api-reference/activities/export-wallet-account", @@ -579,6 +582,7 @@ "api-reference/activities/remove-ip-allowlist", "api-reference/activities/remove-organization-feature", "api-reference/activities/restore-a-tvc-deployment", + "api-reference/activities/set-earn-wrapper-state", "api-reference/activities/set-ip-allowlist", "api-reference/activities/set-organization-feature", "api-reference/activities/set-tvc-app-live-deployment", @@ -601,7 +605,8 @@ "api-reference/activities/update-users-phone-number", "api-reference/activities/update-wallet", "api-reference/activities/update-webhook-endpoint", - "api-reference/activities/verify-generic-otp" + "api-reference/activities/verify-generic-otp", + "api-reference/activities/withdraw-from-earn-vault" ] }, { @@ -616,6 +621,12 @@ "api-reference/queries/get-authenticators", "api-reference/queries/get-balances", "api-reference/queries/get-configs", + "api-reference/queries/get-earn-deploy-status", + "api-reference/queries/get-earn-deposit-status", + "api-reference/queries/get-earn-enabled-vaults", + "api-reference/queries/get-earn-positions", + "api-reference/queries/get-earn-vault-catalog", + "api-reference/queries/get-earn-withdraw-status", "api-reference/queries/get-gas-usage", "api-reference/queries/get-ip-allowlist", "api-reference/queries/get-mfa-policies", diff --git a/features/transaction-management/earn.mdx b/features/transaction-management/earn.mdx index 7d4425ec..9fa9c1e0 100644 --- a/features/transaction-management/earn.mdx +++ b/features/transaction-management/earn.mdx @@ -17,11 +17,11 @@ Deploying a wrapper is a one-time setup step per vault. After that, deposits, wi ## How it works -1. Query [`earn_vaults`](/features/transaction-management/earn/vault-catalog) for the vaults available for an asset, with live TVL and APY. +1. Query [`list_earn_vaults`](/features/transaction-management/earn/vault-catalog) for the vaults available for an asset, with live TVL and APY. 2. Run [`earn_deploy_wrapper`](/features/transaction-management/earn/deploy-wrapper) once per vault to enable it for your organization and set your fee. Turnkey pays the deployment gas. 3. Call [`earn_deposit`](/features/transaction-management/earn/deposit) to move assets from a user's wallet into the vault. 4. Poll the matching status endpoint until the transaction confirms. Deposits, withdrawals, and deployments all confirm asynchronously. -5. Query [`earn_positions`](/features/transaction-management/earn/positions) for a wallet's current value and lifetime totals. +5. Query [`list_earn_positions`](/features/transaction-management/earn/positions) for a wallet's current value and lifetime totals. 6. Call [`earn_withdraw`](/features/transaction-management/earn/withdraw) for a partial amount, the yield only, or the full position. ## Supported protocols and chains @@ -40,12 +40,12 @@ Earn is EVM-only in V1. The vault catalog only includes vaults with at least $10 Earn fees are performance fees: a percentage of the yield a position earns. Principal is never charged. Two fees apply, both in basis points of gross yield: -- **Your fee**: you set it per wrapper at deploy time (`clientFeeBps`), along with the payout wallet (`clientFeeWallet`, a wallet account owned by your organization). Payouts accrue on-chain to that wallet. +- **Your fee**: you set it per wrapper at deploy time (`clientFeeBps`), along with the payout wallet (`clientFeeWallet`, a wallet account owned by your organization). Fees accrue on-chain and are released to that wallet when you claim them. - **Turnkey's fee**: resolved automatically when you deploy. The default is 10% of yield (1,000 bps); enterprise customers can have custom rates. The combined fee is capped at 50% of yield (5,000 bps), and deployments above the cap are rejected. Both fees come out of the wrapper's share price and are split on-chain by a payment splitter contract deployed alongside the wrapper. -The net APY your users earn is `grossApy × (1 - totalFeeBps / 10000)`. The [`earn_enabled_vaults`](/features/transaction-management/earn/vault-catalog#list-your-enabled-vaults) endpoint returns gross APY, net APY, and both fee rates for every wrapper you've deployed. +The net APY your users earn is `grossApy × (1 - totalFeeBps / 10000)`. The [`list_earn_enabled_vaults`](/features/transaction-management/earn/vault-catalog#list-your-enabled-vaults) endpoint returns gross APY, net APY, and your fee rate for every wrapper you've deployed, along with `claimableClientFee`: the fee amount accrued to your organization that is releasable right now. Claim it on-chain with the [`claim_earn_fees`](/api-reference/activities/claim-earn-fees) activity; the claimed amount is paid out to your fee wallet. The fee configuration is fixed per wrapper. To change your fee, deploy a new wrapper for the same vault. Existing positions in the old wrapper remain fully withdrawable, and new deposits go to the new wrapper. See [Deploy a vault wrapper](/features/transaction-management/earn/deploy-wrapper#choose-your-fee-configuration). @@ -53,31 +53,34 @@ The net APY your users earn is `grossApy × (1 - totalFeeBps / 10000)`. The [`ea ## API surface -Earn adds three activities: +Earn adds five activities: | Activity | Endpoint | Purpose | | :--- | :--- | :--- | -| `ACTIVITY_TYPE_EARN_DEPLOY_WRAPPER` | `POST /public/v1/submit/earn_deploy_wrapper` | Enable a vault for your org by deploying its fee wrapper | -| `ACTIVITY_TYPE_EARN_DEPOSIT` | `POST /public/v1/submit/earn_deposit` | Deposit assets from a wallet into an enabled vault | -| `ACTIVITY_TYPE_EARN_WITHDRAW` | `POST /public/v1/submit/earn_withdraw` | Withdraw assets or exit a position | +| [`ACTIVITY_TYPE_EARN_DEPLOY_WRAPPER`](/api-reference/activities/deploy-earn-wrapper) | `POST /public/v1/submit/earn_deploy_wrapper` | Enable a vault for your org by deploying its fee wrapper | +| [`ACTIVITY_TYPE_EARN_DEPOSIT`](/api-reference/activities/deposit-into-earn-vault) | `POST /public/v1/submit/earn_deposit` | Deposit assets from a wallet into an enabled vault | +| [`ACTIVITY_TYPE_EARN_WITHDRAW`](/api-reference/activities/withdraw-from-earn-vault) | `POST /public/v1/submit/earn_withdraw` | Withdraw assets or exit a position | +| [`ACTIVITY_TYPE_EARN_SET_WRAPPER_STATE`](/api-reference/activities/set-earn-wrapper-state) | `POST /public/v1/submit/earn_set_wrapper_state` | Pause or resume deposits to a wrapper (withdrawals are never blocked) | +| [`ACTIVITY_TYPE_CLAIM_EARN_FEES`](/api-reference/activities/claim-earn-fees) | `POST /public/v1/submit/claim_earn_fees` | Claim your accrued performance fees for a wrapper | and six queries: | Query | Endpoint | Purpose | | :--- | :--- | :--- | -| Vault catalog | `POST /public/v1/query/earn_vaults` | All wrappable vaults for an asset, with live TVL/APY | -| Enabled vaults | `POST /public/v1/query/earn_enabled_vaults` | Your org's deployed wrappers (management view) | -| Positions | `POST /public/v1/query/earn_positions` | A wallet's active positions | -| Deploy status | `POST /public/v1/query/earn_deploy_status` | Poll a wrapper deployment | -| Deposit status | `POST /public/v1/query/earn_deposit_status` | Poll a deposit until it lands on-chain | -| Withdraw status | `POST /public/v1/query/earn_withdraw_status` | Poll a withdrawal until it lands on-chain | +| [Vault catalog](/api-reference/queries/get-earn-vault-catalog) | `POST /public/v1/query/list_earn_vaults` | All wrappable vaults for an asset, with live TVL/APY | +| [Enabled vaults](/api-reference/queries/get-earn-enabled-vaults) | `POST /public/v1/query/list_earn_enabled_vaults` | Your org's deployed wrappers (management view) | +| [Positions](/api-reference/queries/get-earn-positions) | `POST /public/v1/query/list_earn_positions` | A wallet's active positions | +| [Deploy status](/api-reference/queries/get-earn-deploy-status) | `POST /public/v1/query/get_earn_deploy_status` | Poll a wrapper deployment | +| [Deposit status](/api-reference/queries/get-earn-deposit-status) | `POST /public/v1/query/get_earn_deposit_status` | Poll a deposit until it lands on-chain | +| [Withdraw status](/api-reference/queries/get-earn-withdraw-status) | `POST /public/v1/query/get_earn_withdraw_status` | Poll a withdrawal until it lands on-chain | Earn requests are stamped and submitted like any other Turnkey request. See [Stamps](/api-reference/overview/stamps) and - [Submissions](/api-reference/activities/overview). There are no - Earn-specific SDK methods during the beta, so the examples on these pages - use cURL and the generic `request` method of + [Submissions](/api-reference/activities/overview). Full request/response + schemas and cURL examples live in the API reference pages linked above. + There are no Earn-specific SDK methods during the beta; use cURL or the + generic `request` method of [`@turnkey/http`](https://www.npmjs.com/package/@turnkey/http)'s `TurnkeyClient`. diff --git a/features/transaction-management/earn/deploy-wrapper.mdx b/features/transaction-management/earn/deploy-wrapper.mdx index a21c7ebe..76ed6bd3 100644 --- a/features/transaction-management/earn/deploy-wrapper.mdx +++ b/features/transaction-management/earn/deploy-wrapper.mdx @@ -32,143 +32,17 @@ The deploy intent carries your fee: ## Submit the activity - - `ACTIVITY_TYPE_EARN_DEPLOY_WRAPPER` - - - - Timestamp (in milliseconds) of the request, used to verify liveness. - - - - Unique identifier for your organization. - - - - Address of the underlying yield vault to wrap, from the [vault catalog](/features/transaction-management/earn/vault-catalog). - - - - CAIP-2 chain identifier the vault lives on, e.g. `eip155:8453` for Base. - - - - Your performance fee on gross yield, in basis points (e.g. `"2000"` for 20%). - - - - The org-owned wallet address that receives your fee payouts. - - - - -```bash title="cURL" -curl --request POST \ - --url https://api.turnkey.com/public/v1/submit/earn_deploy_wrapper \ - --header 'Accept: application/json' \ - --header 'Content-Type: application/json' \ - --header "X-Stamp: (see Stamps)" \ - --data '{ - "type": "ACTIVITY_TYPE_EARN_DEPLOY_WRAPPER", - "timestampMs": " (e.g. 1745474677453)", - "organizationId": "", - "parameters": { - "vaultAddress": "", - "chainCaip2": "eip155:8453", - "clientFeeBps": "2000", - "clientFeeWallet": "" - } - }' -``` - -```javascript title="JavaScript" -import { TurnkeyClient } from "@turnkey/http"; -import { ApiKeyStamper } from "@turnkey/api-key-stamper"; - -const client = new TurnkeyClient( - { baseUrl: "https://api.turnkey.com" }, - new ApiKeyStamper({ - apiPublicKey: process.env.TURNKEY_API_PUBLIC_KEY, - apiPrivateKey: process.env.TURNKEY_API_PRIVATE_KEY, - }), -); - -const { activity } = await client.request( - "/public/v1/submit/earn_deploy_wrapper", - { - type: "ACTIVITY_TYPE_EARN_DEPLOY_WRAPPER", - timestampMs: String(Date.now()), - organizationId: "", - parameters: { - vaultAddress: "", - chainCaip2: "eip155:8453", - clientFeeBps: "2000", - clientFeeWallet: "", - }, - }, -); -``` - - +Submit an [`ACTIVITY_TYPE_EARN_DEPLOY_WRAPPER`](/api-reference/activities/deploy-earn-wrapper) activity with the vault's address (from the catalog), its CAIP-2 chain, and your fee configuration. See [Deploy Earn wrapper](/api-reference/activities/deploy-earn-wrapper) in the API reference for the full request/response schema and cURL example. The activity result returns the deployed addresses immediately; they are derived deterministically before the transaction confirms: -```json -{ - "activity": { - "id": "", - "status": "ACTIVITY_STATUS_COMPLETED", - "type": "ACTIVITY_TYPE_EARN_DEPLOY_WRAPPER", - "result": { - "earnDeployWrapperResult": { - "deployRequestId": "", - "wrapperAddress": "", - "splitterAddress": "" - } - } - } -} -``` - - `wrapperAddress`: the deposit target for this vault. - `splitterAddress`: the payment splitter that distributes fees between you and Turnkey. - `deployRequestId`: poll handle for the deployment transaction. ## Poll deployment status -The activity completes when the deployment transaction is broadcast, not when it confirms. Poll `earn_deploy_status` until it reports `COMPLETED` before accepting deposits: - - - -```bash title="cURL" -curl --request POST \ - --url https://api.turnkey.com/public/v1/query/earn_deploy_status \ - --header 'Accept: application/json' \ - --header 'Content-Type: application/json' \ - --header "X-Stamp: (see Stamps)" \ - --data '{ - "organizationId": "", - "deployRequestId": "" - }' -``` - -```javascript title="JavaScript" -const status = await client.request("/public/v1/query/earn_deploy_status", { - organizationId: "", - deployRequestId: "", -}); -``` - - - -```json -{ - "status": "COMPLETED", - "deployTxHash": "" -} -``` - -`status` is `PENDING`, `COMPLETED`, or `FAILED`. On `FAILED`, the response includes an `error` field with the reason. +The activity completes when the deployment transaction is broadcast, not when it confirms. Poll [`get_earn_deploy_status`](/api-reference/queries/get-earn-deploy-status) with the `deployRequestId` until it reports `COMPLETED` before accepting deposits. `status` is `PENDING`, `COMPLETED`, or `FAILED`; on `COMPLETED` the response carries the `deployTxHash`, and on `FAILED` it includes an `error` field with the reason. ## Gas and idempotency @@ -180,6 +54,13 @@ const status = await client.request("/public/v1/query/earn_deploy_status", { retries are safe. +## Manage a deployed wrapper + +Two more activities cover the wrapper's lifecycle after deployment: + +- **Pause deposits**: [`earn_set_wrapper_state`](/api-reference/activities/set-earn-wrapper-state) toggles `depositsDisabled` on a wrapper. While disabled, new deposits are rejected but withdrawals always remain available, so you can wind a wrapper down (for example, after replacing it with a new fee configuration) without trapping funds. The current state is returned by [`list_earn_enabled_vaults`](/api-reference/queries/get-earn-enabled-vaults). +- **Claim your fees**: [`claim_earn_fees`](/api-reference/activities/claim-earn-fees) releases your accrued performance fees for a wrapper to your `clientFeeWallet`. Check the claimable amount in `claimableClientFee` on [`list_earn_enabled_vaults`](/api-reference/queries/get-earn-enabled-vaults); both are only available to the parent organization. + ## Next steps - [Browse the vault catalog](/features/transaction-management/earn/vault-catalog) to pick vaults to enable diff --git a/features/transaction-management/earn/deposit.mdx b/features/transaction-management/earn/deposit.mdx index 7984de86..21b4e2f7 100644 --- a/features/transaction-management/earn/deposit.mdx +++ b/features/transaction-management/earn/deposit.mdx @@ -13,6 +13,7 @@ A deposit moves assets from a user's wallet into your organization's fee wrapper ## Prerequisites - Your organization has [deployed a wrapper](/features/transaction-management/earn/deploy-wrapper) for the vault, and its deployment status is `COMPLETED`. Deposits targeting an address with no deployed wrapper fail with `EARN_SETUP_REQUIRED`. +- Deposits to the wrapper are not [paused](/features/transaction-management/earn/deploy-wrapper#manage-a-deployed-wrapper): check `depositsDisabled` on [`list_earn_enabled_vaults`](/api-reference/queries/get-earn-enabled-vaults). - The `signWith` wallet holds enough of the vault's underlying asset. For non-sponsored deposits it also needs the chain's native token for gas. @@ -24,104 +25,14 @@ A deposit moves assets from a user's wallet into your organization's fee wrapper ## Submit the deposit - - `ACTIVITY_TYPE_EARN_DEPOSIT` - - - - Timestamp (in milliseconds) of the request, used to verify liveness. - - - - Unique identifier for your organization (or the sub-organization whose wallet is depositing). - - - - Address of the deployed fee wrapper to deposit into, from [`earn_enabled_vaults`](/features/transaction-management/earn/vault-catalog#list-your-enabled-vaults). - - - - The wallet account address to deposit from and sign with. - - - - Amount of the underlying asset to deposit, in raw on-chain units (e.g. `"1000000"` for 1 USDC at 6 decimals). - - - - CAIP-2 chain identifier, e.g. `eip155:8453`. - - - - Whether to sponsor the transaction's gas via Gas Station. Defaults to `false`. - - - - -```bash title="cURL" -curl --request POST \ - --url https://api.turnkey.com/public/v1/submit/earn_deposit \ - --header 'Accept: application/json' \ - --header 'Content-Type: application/json' \ - --header "X-Stamp: (see Stamps)" \ - --data '{ - "type": "ACTIVITY_TYPE_EARN_DEPOSIT", - "timestampMs": " (e.g. 1745474677453)", - "organizationId": "", - "parameters": { - "wrapperAddress": "", - "signWith": "", - "assets": "1000000", - "chainCaip2": "eip155:8453", - "sponsor": false - } - }' -``` - -```javascript title="JavaScript" -import { TurnkeyClient } from "@turnkey/http"; -import { ApiKeyStamper } from "@turnkey/api-key-stamper"; - -const client = new TurnkeyClient( - { baseUrl: "https://api.turnkey.com" }, - new ApiKeyStamper({ - apiPublicKey: process.env.TURNKEY_API_PUBLIC_KEY, - apiPrivateKey: process.env.TURNKEY_API_PRIVATE_KEY, - }), -); - -const { activity } = await client.request("/public/v1/submit/earn_deposit", { - type: "ACTIVITY_TYPE_EARN_DEPOSIT", - timestampMs: String(Date.now()), - organizationId: "", - parameters: { - wrapperAddress: "", - signWith: "", - assets: "1000000", - chainCaip2: "eip155:8453", - sponsor: false, - }, -}); -``` - - - -The result contains only a poll handle: - -```json -{ - "activity": { - "id": "", - "status": "ACTIVITY_STATUS_COMPLETED", - "type": "ACTIVITY_TYPE_EARN_DEPOSIT", - "result": { - "earnDepositResult": { - "depositRequestId": "" - } - } - } -} -``` +Submit an [`ACTIVITY_TYPE_EARN_DEPOSIT`](/api-reference/activities/deposit-into-earn-vault) activity with: + +- the `wrapperAddress` to deposit into, from [`list_earn_enabled_vaults`](/api-reference/queries/get-earn-enabled-vaults) +- the `signWith` wallet account to deposit from and sign with +- the amount in `assets`, in raw on-chain units of the underlying asset (e.g. `"1000000"` for 1 USDC at 6 decimals) +- the CAIP-2 chain in `chainCaip2`, and optionally `sponsor` for gas sponsorship + +See [Deposit into Earn vault](/api-reference/activities/deposit-into-earn-vault) in the API reference for the full request/response schema and cURL example. The activity result contains only a poll handle, `depositRequestId`. ## Gas: sponsored vs self-funded @@ -135,41 +46,11 @@ With `sponsor: false`, the `signWith` wallet pays gas itself, so fund it with th A `COMPLETED` activity means the transaction was enqueued for broadcast, not that it landed on-chain. A transaction that later fails (for example, from an insufficient token balance) is invisible in the activity result. - Poll `earn_deposit_status` until it reports `COMPLETED` (included on-chain) - or `FAILED`. + Poll [`get_earn_deposit_status`](/api-reference/queries/get-earn-deposit-status) + until it reports `COMPLETED` (included on-chain) or `FAILED`. - - -```bash title="cURL" -curl --request POST \ - --url https://api.turnkey.com/public/v1/query/earn_deposit_status \ - --header 'Accept: application/json' \ - --header 'Content-Type: application/json' \ - --header "X-Stamp: (see Stamps)" \ - --data '{ - "organizationId": "", - "depositRequestId": "" - }' -``` - -```javascript title="JavaScript" -const status = await client.request("/public/v1/query/earn_deposit_status", { - organizationId: "", - depositRequestId: "", -}); -``` - - - -```json -{ - "status": "COMPLETED", - "depositTxHash": "" -} -``` - -`status` is `PENDING`, `COMPLETED`, or `FAILED`. On `FAILED`, the response includes an `error` field with the reason. See [Submissions](/api-reference/activities/overview) for general activity semantics. +Poll with the `depositRequestId` from the activity result. `status` is `PENDING`, `COMPLETED`, or `FAILED`; on `COMPLETED` the response carries the `depositTxHash`, and on `FAILED` it includes an `error` field with the reason. See [Submissions](/api-reference/activities/overview) for general activity semantics. ## Next steps diff --git a/features/transaction-management/earn/end-to-end-example.mdx b/features/transaction-management/earn/end-to-end-example.mdx index ccadbd12..b07d071b 100644 --- a/features/transaction-management/earn/end-to-end-example.mdx +++ b/features/transaction-management/earn/end-to-end-example.mdx @@ -59,7 +59,7 @@ This walkthrough runs the complete Earn lifecycle against Base mainnet: find a M ```javascript title="JavaScript" - const { vaults } = await client.request("/public/v1/query/earn_vaults", { + const { vaults } = await client.request("/public/v1/query/list_earn_vaults", { organizationId, caip19: "eip155:8453/erc20:0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", provider: "EARN_PROVIDER_MORPHO", @@ -72,7 +72,7 @@ This walkthrough runs the complete Earn lifecycle against Base mainnet: find a M ```bash title="cURL" curl --request POST \ - --url https://api.turnkey.com/public/v1/query/earn_vaults \ + --url https://api.turnkey.com/public/v1/query/list_earn_vaults \ --header 'Accept: application/json' \ --header 'Content-Type: application/json' \ --header "X-Stamp: (see Stamps)" \ @@ -138,7 +138,7 @@ This walkthrough runs the complete Earn lifecycle against Base mainnet: find a M ```javascript await pollEarnStatus( - "/public/v1/query/earn_deploy_status", + "/public/v1/query/get_earn_deploy_status", "deployRequestId", deployRequestId, ); @@ -198,7 +198,7 @@ This walkthrough runs the complete Earn lifecycle against Base mainnet: find a M ```javascript const { depositTxHash } = await pollEarnStatus( - "/public/v1/query/earn_deposit_status", + "/public/v1/query/get_earn_deposit_status", "depositRequestId", depositRequestId, ); @@ -211,7 +211,7 @@ This walkthrough runs the complete Earn lifecycle against Base mainnet: find a M ```javascript const { positions } = await client.request( - "/public/v1/query/earn_positions", + "/public/v1/query/list_earn_positions", { organizationId, walletAddress: "", @@ -253,7 +253,7 @@ This walkthrough runs the complete Earn lifecycle against Base mainnet: find a M const { withdrawRequestId } = withdraw.result.earnWithdrawResult; const { withdrawTxHash } = await pollEarnStatus( - "/public/v1/query/earn_withdraw_status", + "/public/v1/query/get_earn_withdraw_status", "withdrawRequestId", withdrawRequestId, ); diff --git a/features/transaction-management/earn/positions.mdx b/features/transaction-management/earn/positions.mdx index 825f77d8..aa144b13 100644 --- a/features/transaction-management/earn/positions.mdx +++ b/features/transaction-management/earn/positions.mdx @@ -6,78 +6,10 @@ mode: wide import EarnBetaNote from "/snippets/shared/earn-beta-note.mdx"; -`earn_positions` returns the active positions for a single wallet address, one entry per wrapper the wallet holds shares in, with live on-chain values. +[`list_earn_positions`](/api-reference/queries/get-earn-positions) returns the active positions for a single wallet address, one entry per wrapper the wallet holds shares in, with live on-chain values. It takes your `organizationId` (or the sub-organization that owns the wallet) and the `walletAddress` to return positions for; positions are scoped per wallet, not org-wide. See [Get Earn positions](/api-reference/queries/get-earn-positions) in the API reference for the full request/response schema and cURL example. -## Query positions - - - Unique identifier for your organization (or the sub-organization that owns the wallet). - - - - The wallet address to return positions for. Positions are scoped per wallet, not org-wide. - - - - -```bash title="cURL" -curl --request POST \ - --url https://api.turnkey.com/public/v1/query/earn_positions \ - --header 'Accept: application/json' \ - --header 'Content-Type: application/json' \ - --header "X-Stamp: (see Stamps)" \ - --data '{ - "organizationId": "", - "walletAddress": "" - }' -``` - -```javascript title="JavaScript" -import { TurnkeyClient } from "@turnkey/http"; -import { ApiKeyStamper } from "@turnkey/api-key-stamper"; - -const client = new TurnkeyClient( - { baseUrl: "https://api.turnkey.com" }, - new ApiKeyStamper({ - apiPublicKey: process.env.TURNKEY_API_PUBLIC_KEY, - apiPrivateKey: process.env.TURNKEY_API_PRIVATE_KEY, - }), -); - -const { positions } = await client.request("/public/v1/query/earn_positions", { - organizationId: "", - walletAddress: "", -}); -``` - - - -```json -{ - "positions": [ - { - "vaultAddress": "", - "wrapperAddress": "", - "provider": "EARN_PROVIDER_MORPHO", - "caip19": "eip155:8453/erc20:0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", - "currentValue": "100512340", - "totalDeposited": "100000000", - "totalWithdrawn": "0", - "display": { - "currentValueUsd": "100.51", - "totalDepositedUsd": "100.00", - "totalWithdrawnUsd": "0.00", - "currentValueCrypto": "100.512340", - "totalDepositedCrypto": "100.000000", - "totalWithdrawnCrypto": "0.000000" - } - } - ] -} -``` - ## Understanding the fields | Field | Units | Meaning | @@ -86,6 +18,7 @@ const { positions } = await client.request("/public/v1/query/earn_positions", { | `totalDeposited` | raw on-chain units | Lifetime amount deposited into this position since it was opened (or since the last full `MAX` exit) | | `totalWithdrawn` | raw on-chain units | Lifetime amount withdrawn over the same window | | `display.*` | formatted strings | USD and asset-denominated renderings for UI display only | +| `depositsDisabled` | boolean | When `true`, new deposits to this wrapper are currently [paused](/features/transaction-management/earn/deploy-wrapper#manage-a-deployed-wrapper); withdrawals are unaffected | Raw fields are exact base-10 integers in the asset's smallest unit (e.g. `"100512340"` = 100.51234 USDC at 6 decimals). The totals accumulate from your deposit and withdrawal amounts; a [`MAX` withdrawal](/features/transaction-management/earn/withdraw#full-exit-with-max) closes the position and resets both totals to zero. diff --git a/features/transaction-management/earn/vault-catalog.mdx b/features/transaction-management/earn/vault-catalog.mdx index 234dd3fb..9ec659d7 100644 --- a/features/transaction-management/earn/vault-catalog.mdx +++ b/features/transaction-management/earn/vault-catalog.mdx @@ -7,153 +7,41 @@ mode: wide import EarnBetaNote from "/snippets/shared/earn-beta-note.mdx"; -Two queries cover vault discovery: `earn_vaults` returns the market of wrappable vaults for an asset, and `earn_enabled_vaults` returns the wrappers your organization has already deployed. +Two queries cover vault discovery: [`list_earn_vaults`](/api-reference/queries/get-earn-vault-catalog) returns the market of wrappable vaults for an asset, and [`list_earn_enabled_vaults`](/api-reference/queries/get-earn-enabled-vaults) returns the wrappers your organization has already deployed. Full request/response schemas and cURL examples are in the API reference. -## Discover vaults with earn_vaults - - - Unique identifier for your organization. Used to annotate which vaults you have already enabled. - - - - CAIP-19 asset identifier to return vaults for, e.g. `eip155:8453/erc20:0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913` for USDC on Base. The chain is derived from this identifier. - - - - Optional filter: `EARN_PROVIDER_MORPHO` or `EARN_PROVIDER_AAVE`. Omit to return all providers. - - - - Cursor pagination over the TVL-sorted catalog. `limit` defaults to 10 (max 100); pass the last `vaultAddress` of a page as the `after` cursor for the next page. - - - - -```bash title="cURL" -curl --request POST \ - --url https://api.turnkey.com/public/v1/query/earn_vaults \ - --header 'Accept: application/json' \ - --header 'Content-Type: application/json' \ - --header "X-Stamp: (see Stamps)" \ - --data '{ - "organizationId": "", - "caip19": "eip155:8453/erc20:0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913" - }' -``` - -```javascript title="JavaScript" -import { TurnkeyClient } from "@turnkey/http"; -import { ApiKeyStamper } from "@turnkey/api-key-stamper"; - -const client = new TurnkeyClient( - { baseUrl: "https://api.turnkey.com" }, - new ApiKeyStamper({ - apiPublicKey: process.env.TURNKEY_API_PUBLIC_KEY, - apiPrivateKey: process.env.TURNKEY_API_PRIVATE_KEY, - }), -); - -const { vaults } = await client.request("/public/v1/query/earn_vaults", { - organizationId: "", - caip19: "eip155:8453/erc20:0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", -}); -``` - - - -```json -{ - "vaults": [ - { - "vaultAddress": "", - "provider": "EARN_PROVIDER_MORPHO", - "caip19": "eip155:8453/erc20:0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", - "tvl": "182734550123456", - "apyPct": "0.0812", - "enabled": false, - "display": { - "usd": "182,734,550.12", - "crypto": "182,734,550.123456" - } - } - ] -} -``` - - - - The catalog is sorted by TVL in USD, descending, and only includes vaults - with at least **$100k TVL**. - - `tvl` is in raw on-chain units of the underlying asset; `apyPct` is a - decimal fraction (`"0.0812"` = 8.12% gross APY, before fees). - - `display` values are for presentation only. Don't do arithmetic with - them. - - `enabled: true` means your organization already has a wrapper deployed for - the vault. - +## Discover vaults with list_earn_vaults + +[`list_earn_vaults`](/api-reference/queries/get-earn-vault-catalog) takes a required CAIP-19 asset identifier (e.g. `eip155:8453/erc20:0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913` for USDC on Base) and returns every wrappable vault for that asset. The chain is derived from the identifier, and you can optionally filter by provider. + +Reading the results: + +- The catalog is sorted by TVL in USD, descending, and only includes vaults with at least **$100k TVL**. +- `tvl` is in raw on-chain units of the underlying asset; `apyPct` is a decimal fraction (`"0.0812"` = 8.12% gross APY, before fees). +- `display` values are formatted strings for presentation only. Don't do arithmetic with them. +- `enabled: true` means your organization already has a wrapper deployed for the vault. +- `name` and `curator` carry the provider's human-readable vault name and curator(s), for building vault pickers. + +### Paging through the catalog + +Results are cursor-paginated via `paginationOptions` (`limit` defaults to 10, max 100). Each response includes a `pageInfo` block: + +- `hasNextPage` / `hasPreviousPage` tell you whether more results exist in either direction. +- Pass `pageInfo.endCursor` as the next request's `after` cursor (or `startCursor` as `before`) to keep paging. +- Cursors are opaque and versioned; don't construct or parse them by hand. They encode the vault's position in the TVL ranking, so scans resume deterministically even as live TVL shifts between requests. ## List your enabled vaults -The management view of every wrapper your organization has deployed, with on-chain totals and the full fee breakdown: - - - Unique identifier for your organization. - - - - Optional provider filter. - - - - Optional filter: only return enabled vaults whose underlying asset matches this CAIP-19 identifier. - - - - -```bash title="cURL" -curl --request POST \ - --url https://api.turnkey.com/public/v1/query/earn_enabled_vaults \ - --header 'Accept: application/json' \ - --header 'Content-Type: application/json' \ - --header "X-Stamp: (see Stamps)" \ - --data '{ - "organizationId": "" - }' -``` - -```javascript title="JavaScript" -const { enabledVaults } = await client.request( - "/public/v1/query/earn_enabled_vaults", - { organizationId: "" }, -); -``` - - - -```json -{ - "enabledVaults": [ - { - "vaultAddress": "", - "wrapperAddress": "", - "provider": "EARN_PROVIDER_MORPHO", - "caip19": "eip155:8453/erc20:0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", - "apyPct": "0.0812", - "netApyPct": "0.0568", - "turnkeyFeeBps": "1000", - "clientFeeBps": "2000", - "totalDeposited": "2500000000", - "display": { - "usd": "2,500.00", - "crypto": "2,500.00" - } - } - ] -} -``` - -`apyPct` is the gross APY; `netApyPct` is what depositors earn after both performance fees: `netApy = grossApy × (1 - (turnkeyFeeBps + clientFeeBps) / 10000)`. `totalDeposited` is the wrapper's TVL in raw units of the underlying asset. `wrapperAddress` is the deposit target to pass to [`earn_deposit`](/features/transaction-management/earn/deposit). +[`list_earn_enabled_vaults`](/api-reference/queries/get-earn-enabled-vaults) is the management view of every wrapper your organization has deployed, with on-chain totals and the fee breakdown. Optional filters narrow by provider or CAIP-19 asset. + +Key fields: + +- `wrapperAddress` is the deposit target to pass to [`earn_deposit`](/features/transaction-management/earn/deposit); `vaultAddress` is the underlying vault it wraps. +- `apyPct` is the gross APY; `netApyPct` is what depositors earn after both performance fees: `netApy = grossApy × (1 - totalFeeBps / 10000)`. +- `clientFeeBps` is your performance fee for the wrapper, and `totalDeposited` is the wrapper's TVL in raw units of the underlying asset. +- `depositsDisabled: true` means deposits to the wrapper are currently paused via [`earn_set_wrapper_state`](/api-reference/activities/set-earn-wrapper-state); withdrawals are unaffected. +- `claimableClientFee` is your accrued performance fee that is releasable right now, claimable with [`claim_earn_fees`](/api-reference/activities/claim-earn-fees). It is only returned when the parent organization queries; sub-organizations don't see it. ## Providers @@ -162,3 +50,4 @@ Morpho vaults are available today. Aave support is upcoming; the API shape is id ## Next steps - [Deploy a vault wrapper](/features/transaction-management/earn/deploy-wrapper) for a vault from the catalog +- [Get Earn vault catalog](/api-reference/queries/get-earn-vault-catalog) and [Get Earn enabled vaults](/api-reference/queries/get-earn-enabled-vaults) in the API reference diff --git a/features/transaction-management/earn/withdraw.mdx b/features/transaction-management/earn/withdraw.mdx index 96de30f5..2d768a97 100644 --- a/features/transaction-management/earn/withdraw.mdx +++ b/features/transaction-management/earn/withdraw.mdx @@ -12,104 +12,16 @@ A withdrawal moves assets from your organization's fee wrapper back to the user' ## Submit the withdrawal - - `ACTIVITY_TYPE_EARN_WITHDRAW` - - - - Timestamp (in milliseconds) of the request, used to verify liveness. - - - - Unique identifier for your organization (or the sub-organization whose wallet is withdrawing). - - - - Address of the deployed fee wrapper holding the position, from [`earn_positions`](/features/transaction-management/earn/positions). - - - - The wallet account address to withdraw to and sign with. - - - - Amount of the underlying asset to withdraw, in raw on-chain units (e.g. `"500000"` for 0.50 USDC), or the literal `"MAX"` to withdraw the entire position. - - - - CAIP-2 chain identifier, e.g. `eip155:8453`. - - - - Whether to sponsor the transaction's gas via Gas Station. Defaults to `false`. - - - - -```bash title="cURL" -curl --request POST \ - --url https://api.turnkey.com/public/v1/submit/earn_withdraw \ - --header 'Accept: application/json' \ - --header 'Content-Type: application/json' \ - --header "X-Stamp: (see Stamps)" \ - --data '{ - "type": "ACTIVITY_TYPE_EARN_WITHDRAW", - "timestampMs": " (e.g. 1745474677453)", - "organizationId": "", - "parameters": { - "wrapperAddress": "", - "signWith": "", - "amountValue": "MAX", - "chainCaip2": "eip155:8453", - "sponsor": false - } - }' -``` +Submit an [`ACTIVITY_TYPE_EARN_WITHDRAW`](/api-reference/activities/withdraw-from-earn-vault) activity with: -```javascript title="JavaScript" -import { TurnkeyClient } from "@turnkey/http"; -import { ApiKeyStamper } from "@turnkey/api-key-stamper"; - -const client = new TurnkeyClient( - { baseUrl: "https://api.turnkey.com" }, - new ApiKeyStamper({ - apiPublicKey: process.env.TURNKEY_API_PUBLIC_KEY, - apiPrivateKey: process.env.TURNKEY_API_PRIVATE_KEY, - }), -); +- the `wrapperAddress` holding the position, from [`list_earn_positions`](/api-reference/queries/get-earn-positions) +- the `signWith` wallet account to withdraw to and sign with +- the `amountValue` in raw on-chain units of the underlying asset (e.g. `"500000"` for 0.50 USDC), or the literal `"MAX"` to withdraw the entire position +- the CAIP-2 chain in `chainCaip2`, and optionally `sponsor` for gas sponsorship -const { activity } = await client.request("/public/v1/submit/earn_withdraw", { - type: "ACTIVITY_TYPE_EARN_WITHDRAW", - timestampMs: String(Date.now()), - organizationId: "", - parameters: { - wrapperAddress: "", - signWith: "", - amountValue: "MAX", - chainCaip2: "eip155:8453", - sponsor: false, - }, -}); -``` +See [Withdraw from Earn vault](/api-reference/activities/withdraw-from-earn-vault) in the API reference for the full request/response schema and cURL example. The activity result contains only a poll handle, `withdrawRequestId`. - - -The result contains only a poll handle: - -```json -{ - "activity": { - "id": "", - "status": "ACTIVITY_STATUS_COMPLETED", - "type": "ACTIVITY_TYPE_EARN_WITHDRAW", - "result": { - "earnWithdrawResult": { - "withdrawRequestId": "" - } - } - } -} -``` +Withdrawals always work, even when deposits to the wrapper are [paused](/features/transaction-management/earn/deploy-wrapper#manage-a-deployed-wrapper). ## Full exit with MAX @@ -118,7 +30,7 @@ The result contains only a poll handle: A `MAX` withdrawal resets the position's lifetime accounting: after it confirms, `totalDeposited` and `totalWithdrawn` in - [`earn_positions`](/features/transaction-management/earn/positions) start again from zero + [`list_earn_positions`](/features/transaction-management/earn/positions) start again from zero for that wrapper. @@ -129,10 +41,13 @@ Positions in wrappers you have since replaced (after a [fee change](/features/tr To pay out yield without touching principal, withdraw exactly the yield amount. Compute it from the position's raw fields: ```javascript title="JavaScript" -const { positions } = await client.request("/public/v1/query/earn_positions", { - organizationId: "", - walletAddress: "", -}); +const { positions } = await client.request( + "/public/v1/query/list_earn_positions", + { + organizationId: "", + walletAddress: "", + }, +); const p = positions.find( (p) => p.wrapperAddress === "", @@ -161,41 +76,12 @@ await client.request("/public/v1/submit/earn_withdraw", { As with deposits, a `COMPLETED` activity means the transaction was enqueued - for broadcast, not that it confirmed. Poll `earn_withdraw_status` until it - reports `COMPLETED` (included on-chain) or `FAILED`. + for broadcast, not that it confirmed. Poll + [`get_earn_withdraw_status`](/api-reference/queries/get-earn-withdraw-status) + until it reports `COMPLETED` (included on-chain) or `FAILED`. - - -```bash title="cURL" -curl --request POST \ - --url https://api.turnkey.com/public/v1/query/earn_withdraw_status \ - --header 'Accept: application/json' \ - --header 'Content-Type: application/json' \ - --header "X-Stamp: (see Stamps)" \ - --data '{ - "organizationId": "", - "withdrawRequestId": "" - }' -``` - -```javascript title="JavaScript" -const status = await client.request("/public/v1/query/earn_withdraw_status", { - organizationId: "", - withdrawRequestId: "", -}); -``` - - - -```json -{ - "status": "COMPLETED", - "withdrawTxHash": "" -} -``` - -`status` is `PENDING`, `COMPLETED`, or `FAILED`. On `FAILED`, the response includes an `error` field with the reason. +Poll with the `withdrawRequestId` from the activity result. `status` is `PENDING`, `COMPLETED`, or `FAILED`; on `COMPLETED` the response carries the `withdrawTxHash`, and on `FAILED` it includes an `error` field with the reason. ## Gas diff --git a/public_api.swagger.json b/public_api.swagger.json index 75f7b019..6b90b391 100644 --- a/public_api.swagger.json +++ b/public_api.swagger.json @@ -65,9 +65,15 @@ } ], "host": "api.turnkey.com", - "schemes": ["https"], - "consumes": ["application/json"], - "produces": ["application/json"], + "schemes": [ + "https" + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], "paths": { "/public/v1/query/get_activity": { "post": { @@ -92,7 +98,9 @@ } } ], - "tags": ["Activities"] + "tags": [ + "Activities" + ] } }, "/public/v1/query/get_api_key": { @@ -118,7 +126,9 @@ } } ], - "tags": ["API keys"] + "tags": [ + "API keys" + ] } }, "/public/v1/query/get_api_keys": { @@ -144,7 +154,9 @@ } } ], - "tags": ["API keys"] + "tags": [ + "API keys" + ] } }, "/public/v1/query/get_app_status": { @@ -170,7 +182,9 @@ } } ], - "tags": ["TVC"] + "tags": [ + "TVC" + ] } }, "/public/v1/query/get_authenticator": { @@ -196,7 +210,9 @@ } } ], - "tags": ["Authenticators"] + "tags": [ + "Authenticators" + ] } }, "/public/v1/query/get_authenticators": { @@ -222,7 +238,9 @@ } } ], - "tags": ["Authenticators"] + "tags": [ + "Authenticators" + ] } }, "/public/v1/query/get_boot_proof": { @@ -248,7 +266,93 @@ } } ], - "tags": ["Boot Proof"] + "tags": [ + "Boot Proof" + ] + } + }, + "/public/v1/query/get_earn_deploy_status": { + "post": { + "summary": "Get Earn deploy status", + "description": "Poll the status of a wrapper deployment by its deploy_request_id.", + "operationId": "GetEarnDeployStatus", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetEarnDeployStatusResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetEarnDeployStatusRequest" + } + } + ], + "tags": [ + "Earn" + ] + } + }, + "/public/v1/query/get_earn_deposit_status": { + "post": { + "summary": "Get Earn deposit status", + "description": "Poll the status of a deposit by its deposit_request_id (for the async/sponsored deposit path).", + "operationId": "GetEarnDepositStatus", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetEarnDepositStatusResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetEarnDepositStatusRequest" + } + } + ], + "tags": [ + "Earn" + ] + } + }, + "/public/v1/query/get_earn_withdraw_status": { + "post": { + "summary": "Get Earn withdraw status", + "description": "Poll the status of a withdrawal by its withdraw_request_id.", + "operationId": "GetEarnWithdrawStatus", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetEarnWithdrawStatusResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetEarnWithdrawStatusRequest" + } + } + ], + "tags": [ + "Earn" + ] } }, "/public/v1/query/get_gas_usage": { @@ -274,7 +378,9 @@ } } ], - "tags": ["Broadcasting"] + "tags": [ + "Broadcasting" + ] } }, "/public/v1/query/get_ip_allowlist": { @@ -300,7 +406,9 @@ } } ], - "tags": ["IP Allowlist"] + "tags": [ + "IP Allowlist" + ] } }, "/public/v1/query/get_latest_boot_proof": { @@ -326,7 +434,9 @@ } } ], - "tags": ["Boot Proof"] + "tags": [ + "Boot Proof" + ] } }, "/public/v1/query/get_mfa_policies": { @@ -352,7 +462,9 @@ } } ], - "tags": ["MFA Policies"] + "tags": [ + "MFA Policies" + ] } }, "/public/v1/query/get_mfa_policy": { @@ -378,7 +490,9 @@ } } ], - "tags": ["MFA Policies"] + "tags": [ + "MFA Policies" + ] } }, "/public/v1/query/get_mfa_status": { @@ -404,7 +518,9 @@ } } ], - "tags": ["MFA Policies"] + "tags": [ + "MFA Policies" + ] } }, "/public/v1/query/get_nonces": { @@ -430,7 +546,9 @@ } } ], - "tags": ["Broadcasting"] + "tags": [ + "Broadcasting" + ] } }, "/public/v1/query/get_oauth2_credential": { @@ -481,7 +599,9 @@ } } ], - "tags": ["User Auth"] + "tags": [ + "User Auth" + ] } }, "/public/v1/query/get_onramp_transaction_status": { @@ -507,7 +627,9 @@ } } ], - "tags": ["On Ramp"] + "tags": [ + "On Ramp" + ] } }, "/public/v1/query/get_organization_configs": { @@ -533,7 +655,9 @@ } } ], - "tags": ["Organizations"] + "tags": [ + "Organizations" + ] } }, "/public/v1/query/get_policy": { @@ -559,7 +683,9 @@ } } ], - "tags": ["Policies"] + "tags": [ + "Policies" + ] } }, "/public/v1/query/get_policy_evaluations": { @@ -585,7 +711,9 @@ } } ], - "tags": ["Activities"] + "tags": [ + "Activities" + ] } }, "/public/v1/query/get_private_key": { @@ -611,7 +739,9 @@ } } ], - "tags": ["Private Keys"] + "tags": [ + "Private Keys" + ] } }, "/public/v1/query/get_send_transaction_status": { @@ -637,7 +767,9 @@ } } ], - "tags": ["Send Transactions"] + "tags": [ + "Send Transactions" + ] } }, "/public/v1/query/get_session_profile": { @@ -663,7 +795,9 @@ } } ], - "tags": ["Session Profiles"] + "tags": [ + "Session Profiles" + ] } }, "/public/v1/query/get_session_profiles": { @@ -689,7 +823,9 @@ } } ], - "tags": ["Session Profiles"] + "tags": [ + "Session Profiles" + ] } }, "/public/v1/query/get_smart_contract_interface": { @@ -715,7 +851,9 @@ } } ], - "tags": ["Policies"] + "tags": [ + "Policies" + ] } }, "/public/v1/query/get_tvc_app": { @@ -741,7 +879,9 @@ } } ], - "tags": ["TVC"] + "tags": [ + "TVC" + ] } }, "/public/v1/query/get_tvc_deployment": { @@ -767,7 +907,9 @@ } } ], - "tags": ["TVC"] + "tags": [ + "TVC" + ] } }, "/public/v1/query/get_tvc_deployment_debug_logs": { @@ -793,7 +935,9 @@ } } ], - "tags": ["TVC"] + "tags": [ + "TVC" + ] } }, "/public/v1/query/get_user": { @@ -819,7 +963,9 @@ } } ], - "tags": ["Users"] + "tags": [ + "Users" + ] } }, "/public/v1/query/get_wallet": { @@ -845,7 +991,9 @@ } } ], - "tags": ["Wallets"] + "tags": [ + "Wallets" + ] } }, "/public/v1/query/get_wallet_account": { @@ -871,7 +1019,9 @@ } } ], - "tags": ["Wallets"] + "tags": [ + "Wallets" + ] } }, "/public/v1/query/get_wallet_address_balances": { @@ -897,7 +1047,9 @@ } } ], - "tags": ["Wallets"] + "tags": [ + "Wallets" + ] } }, "/public/v1/query/list_activities": { @@ -923,7 +1075,9 @@ } } ], - "tags": ["Activities"] + "tags": [ + "Activities" + ] } }, "/public/v1/query/list_app_proofs": { @@ -949,7 +1103,93 @@ } } ], - "tags": ["App Proof"] + "tags": [ + "App Proof" + ] + } + }, + "/public/v1/query/list_earn_enabled_vaults": { + "post": { + "summary": "Get Earn enabled vaults", + "description": "Get the organization's deployed wrappers with on-chain total deposited and live APY. The management view, distinct from per-wallet positions.", + "operationId": "ListEarnEnabledVaults", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ListEarnEnabledVaultsResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/ListEarnEnabledVaultsRequest" + } + } + ], + "tags": [ + "Earn" + ] + } + }, + "/public/v1/query/list_earn_positions": { + "post": { + "summary": "Get Earn positions", + "description": "Get the active Earn positions for a specific wallet, including current value, cost basis, yield, and projected fees.", + "operationId": "ListEarnPositions", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ListEarnPositionsResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/ListEarnPositionsRequest" + } + } + ], + "tags": [ + "Earn" + ] + } + }, + "/public/v1/query/list_earn_vaults": { + "post": { + "summary": "Get Earn vault catalog", + "description": "Get the catalog of all wrappable yield vaults across supported chains, enriched with live TVL and APY. Annotates which vaults the organization has already enabled.", + "operationId": "ListEarnVaults", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ListEarnVaultsResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/ListEarnVaultsRequest" + } + } + ], + "tags": [ + "Earn" + ] } }, "/public/v1/query/list_fiat_on_ramp_credentials": { @@ -975,7 +1215,9 @@ } } ], - "tags": ["On Ramp"] + "tags": [ + "On Ramp" + ] } }, "/public/v1/query/list_oauth2_credentials": { @@ -1001,7 +1243,9 @@ } } ], - "tags": ["User Auth"] + "tags": [ + "User Auth" + ] } }, "/public/v1/query/list_policies": { @@ -1027,7 +1271,9 @@ } } ], - "tags": ["Policies"] + "tags": [ + "Policies" + ] } }, "/public/v1/query/list_private_key_tags": { @@ -1053,7 +1299,9 @@ } } ], - "tags": ["Private Key Tags"] + "tags": [ + "Private Key Tags" + ] } }, "/public/v1/query/list_private_keys": { @@ -1079,7 +1327,9 @@ } } ], - "tags": ["Private Keys"] + "tags": [ + "Private Keys" + ] } }, "/public/v1/query/list_smart_contract_interfaces": { @@ -1105,7 +1355,9 @@ } } ], - "tags": ["Policies"] + "tags": [ + "Policies" + ] } }, "/public/v1/query/list_suborgs": { @@ -1131,7 +1383,9 @@ } } ], - "tags": ["Organizations"] + "tags": [ + "Organizations" + ] } }, "/public/v1/query/list_supported_assets": { @@ -1157,7 +1411,9 @@ } } ], - "tags": ["Wallets"] + "tags": [ + "Wallets" + ] } }, "/public/v1/query/list_tvc_app_deployments": { @@ -1183,7 +1439,9 @@ } } ], - "tags": ["TVC"] + "tags": [ + "TVC" + ] } }, "/public/v1/query/list_tvc_apps": { @@ -1209,7 +1467,9 @@ } } ], - "tags": ["TVC"] + "tags": [ + "TVC" + ] } }, "/public/v1/query/list_user_tags": { @@ -1235,7 +1495,9 @@ } } ], - "tags": ["User Tags"] + "tags": [ + "User Tags" + ] } }, "/public/v1/query/list_users": { @@ -1261,7 +1523,9 @@ } } ], - "tags": ["Users"] + "tags": [ + "Users" + ] } }, "/public/v1/query/list_verified_suborgs": { @@ -1287,7 +1551,9 @@ } } ], - "tags": ["Organizations"] + "tags": [ + "Organizations" + ] } }, "/public/v1/query/list_wallet_accounts": { @@ -1313,7 +1579,9 @@ } } ], - "tags": ["Wallets"] + "tags": [ + "Wallets" + ] } }, "/public/v1/query/list_wallets": { @@ -1339,7 +1607,9 @@ } } ], - "tags": ["Wallets"] + "tags": [ + "Wallets" + ] } }, "/public/v1/query/list_webhook_endpoints": { @@ -1365,7 +1635,9 @@ } } ], - "tags": ["Organizations"] + "tags": [ + "Organizations" + ] } }, "/public/v1/query/validate_tvc_image": { @@ -1391,7 +1663,9 @@ } } ], - "tags": ["TVC"] + "tags": [ + "TVC" + ] } }, "/public/v1/query/whoami": { @@ -1417,7 +1691,9 @@ } } ], - "tags": ["Sessions"] + "tags": [ + "Sessions" + ] } }, "/public/v1/submit/approve_activity": { @@ -1443,7 +1719,37 @@ } } ], - "tags": ["Consensus"] + "tags": [ + "Consensus" + ] + } + }, + "/public/v1/submit/claim_earn_fees": { + "post": { + "summary": "Claim earn fees", + "description": "Claim earn fees through the activity pipeline.", + "operationId": "ClaimEarnFees", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/ClaimEarnFeesRequest" + } + } + ], + "tags": [ + "Earn" + ] } }, "/public/v1/submit/create_api_keys": { @@ -1469,7 +1775,9 @@ } } ], - "tags": ["API Keys"] + "tags": [ + "API Keys" + ] } }, "/public/v1/submit/create_authenticators": { @@ -1495,7 +1803,9 @@ } } ], - "tags": ["Authenticators"] + "tags": [ + "Authenticators" + ] } }, "/public/v1/submit/create_fiat_on_ramp_credential": { @@ -1521,7 +1831,9 @@ } } ], - "tags": ["On Ramp"] + "tags": [ + "On Ramp" + ] } }, "/public/v1/submit/create_invitations": { @@ -1547,7 +1859,9 @@ } } ], - "tags": ["Invitations"] + "tags": [ + "Invitations" + ] } }, "/public/v1/submit/create_mfa_policy": { @@ -1573,7 +1887,9 @@ } } ], - "tags": ["MFA Policies"] + "tags": [ + "MFA Policies" + ] } }, "/public/v1/submit/create_oauth2_credential": { @@ -1599,7 +1915,9 @@ } } ], - "tags": ["User Auth"] + "tags": [ + "User Auth" + ] } }, "/public/v1/submit/create_oauth_providers": { @@ -1625,7 +1943,9 @@ } } ], - "tags": ["User Auth"] + "tags": [ + "User Auth" + ] } }, "/public/v1/submit/create_policies": { @@ -1651,7 +1971,9 @@ } } ], - "tags": ["Policies"] + "tags": [ + "Policies" + ] } }, "/public/v1/submit/create_policy": { @@ -1677,7 +1999,9 @@ } } ], - "tags": ["Policies"] + "tags": [ + "Policies" + ] } }, "/public/v1/submit/create_private_key_tag": { @@ -1703,7 +2027,9 @@ } } ], - "tags": ["Private Key Tags"] + "tags": [ + "Private Key Tags" + ] } }, "/public/v1/submit/create_private_keys": { @@ -1729,7 +2055,9 @@ } } ], - "tags": ["Private Keys"] + "tags": [ + "Private Keys" + ] } }, "/public/v1/submit/create_read_only_session": { @@ -1755,7 +2083,9 @@ } } ], - "tags": ["Sessions"] + "tags": [ + "Sessions" + ] } }, "/public/v1/submit/create_read_write_session": { @@ -1781,7 +2111,9 @@ } } ], - "tags": ["Sessions"] + "tags": [ + "Sessions" + ] } }, "/public/v1/submit/create_session_profile": { @@ -1807,7 +2139,9 @@ } } ], - "tags": ["Session Profiles"] + "tags": [ + "Session Profiles" + ] } }, "/public/v1/submit/create_smart_contract_interface": { @@ -1833,7 +2167,9 @@ } } ], - "tags": ["Policies"] + "tags": [ + "Policies" + ] } }, "/public/v1/submit/create_sub_organization": { @@ -1859,7 +2195,9 @@ } } ], - "tags": ["Organizations"] + "tags": [ + "Organizations" + ] } }, "/public/v1/submit/create_tvc_app": { @@ -1885,7 +2223,9 @@ } } ], - "tags": ["TVC"] + "tags": [ + "TVC" + ] } }, "/public/v1/submit/create_tvc_deployment": { @@ -1911,7 +2251,9 @@ } } ], - "tags": ["TVC"] + "tags": [ + "TVC" + ] } }, "/public/v1/submit/create_tvc_manifest_approvals": { @@ -1937,7 +2279,9 @@ } } ], - "tags": ["TVC"] + "tags": [ + "TVC" + ] } }, "/public/v1/submit/create_user_tag": { @@ -1963,7 +2307,9 @@ } } ], - "tags": ["User Tags"] + "tags": [ + "User Tags" + ] } }, "/public/v1/submit/create_users": { @@ -1989,7 +2335,9 @@ } } ], - "tags": ["Users"] + "tags": [ + "Users" + ] } }, "/public/v1/submit/create_wallet": { @@ -2015,7 +2363,9 @@ } } ], - "tags": ["Wallets"] + "tags": [ + "Wallets" + ] } }, "/public/v1/submit/create_wallet_accounts": { @@ -2041,7 +2391,9 @@ } } ], - "tags": ["Wallets"] + "tags": [ + "Wallets" + ] } }, "/public/v1/submit/create_webhook_endpoint": { @@ -2067,7 +2419,9 @@ } } ], - "tags": ["Organizations"] + "tags": [ + "Organizations" + ] } }, "/public/v1/submit/delete_api_keys": { @@ -2093,7 +2447,9 @@ } } ], - "tags": ["API Keys"] + "tags": [ + "API Keys" + ] } }, "/public/v1/submit/delete_authenticators": { @@ -2119,7 +2475,9 @@ } } ], - "tags": ["Authenticators"] + "tags": [ + "Authenticators" + ] } }, "/public/v1/submit/delete_fiat_on_ramp_credential": { @@ -2145,7 +2503,9 @@ } } ], - "tags": ["On Ramp"] + "tags": [ + "On Ramp" + ] } }, "/public/v1/submit/delete_invitation": { @@ -2171,7 +2531,9 @@ } } ], - "tags": ["Invitations"] + "tags": [ + "Invitations" + ] } }, "/public/v1/submit/delete_mfa_policy": { @@ -2197,7 +2559,9 @@ } } ], - "tags": ["MFA Policies"] + "tags": [ + "MFA Policies" + ] } }, "/public/v1/submit/delete_oauth2_credential": { @@ -2223,7 +2587,9 @@ } } ], - "tags": ["User Auth"] + "tags": [ + "User Auth" + ] } }, "/public/v1/submit/delete_oauth_providers": { @@ -2249,7 +2615,9 @@ } } ], - "tags": ["User Auth"] + "tags": [ + "User Auth" + ] } }, "/public/v1/submit/delete_policies": { @@ -2275,7 +2643,9 @@ } } ], - "tags": ["Policies"] + "tags": [ + "Policies" + ] } }, "/public/v1/submit/delete_policy": { @@ -2301,7 +2671,9 @@ } } ], - "tags": ["Policies"] + "tags": [ + "Policies" + ] } }, "/public/v1/submit/delete_private_key_tags": { @@ -2327,7 +2699,9 @@ } } ], - "tags": ["Private Key Tags"] + "tags": [ + "Private Key Tags" + ] } }, "/public/v1/submit/delete_private_keys": { @@ -2353,7 +2727,9 @@ } } ], - "tags": ["Private Keys"] + "tags": [ + "Private Keys" + ] } }, "/public/v1/submit/delete_smart_contract_interface": { @@ -2379,7 +2755,9 @@ } } ], - "tags": ["Policies"] + "tags": [ + "Policies" + ] } }, "/public/v1/submit/delete_sub_organization": { @@ -2405,7 +2783,9 @@ } } ], - "tags": ["Organizations"] + "tags": [ + "Organizations" + ] } }, "/public/v1/submit/delete_tvc_app_and_deployments": { @@ -2431,7 +2811,9 @@ } } ], - "tags": ["TVC"] + "tags": [ + "TVC" + ] } }, "/public/v1/submit/delete_tvc_deployment": { @@ -2457,7 +2839,9 @@ } } ], - "tags": ["TVC"] + "tags": [ + "TVC" + ] } }, "/public/v1/submit/delete_user_tags": { @@ -2483,7 +2867,9 @@ } } ], - "tags": ["User Tags"] + "tags": [ + "User Tags" + ] } }, "/public/v1/submit/delete_users": { @@ -2509,7 +2895,9 @@ } } ], - "tags": ["Users"] + "tags": [ + "Users" + ] } }, "/public/v1/submit/delete_wallet_accounts": { @@ -2535,7 +2923,9 @@ } } ], - "tags": ["Wallets"] + "tags": [ + "Wallets" + ] } }, "/public/v1/submit/delete_wallets": { @@ -2561,7 +2951,9 @@ } } ], - "tags": ["Wallets"] + "tags": [ + "Wallets" + ] } }, "/public/v1/submit/delete_webhook_endpoint": { @@ -2587,14 +2979,16 @@ } } ], - "tags": ["Organizations"] + "tags": [ + "Organizations" + ] } }, - "/public/v1/submit/email_auth": { + "/public/v1/submit/earn_deploy_wrapper": { "post": { - "summary": "Perform email auth", - "description": "Authenticate a user via email.", - "operationId": "EmailAuth", + "summary": "Deploy Earn wrapper", + "description": "Enable a yield vault for an organization by deploying its fee wrapper. Must be called before any deposits into the vault.", + "operationId": "EarnDeployWrapper", "responses": { "200": { "description": "A successful response.", @@ -2609,18 +3003,20 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/EmailAuthRequest" + "$ref": "#/definitions/EarnDeployWrapperRequest" } } ], - "tags": ["User Auth"] + "tags": [ + "Earn" + ] } }, - "/public/v1/submit/eth_send_transaction": { + "/public/v1/submit/earn_deposit": { "post": { - "summary": "Broadcast EVM transaction", - "description": "Submit a transaction intent describing an EVM transaction you would like to broadcast.", - "operationId": "EthSendTransaction", + "summary": "Deposit into Earn vault", + "description": "Deposit assets from a wallet into an enabled yield vault.", + "operationId": "EarnDeposit", "responses": { "200": { "description": "A successful response.", @@ -2635,18 +3031,132 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/EthSendTransactionRequest" + "$ref": "#/definitions/EarnDepositRequest" } } ], - "tags": ["Broadcasting"] + "tags": [ + "Earn" + ] } }, - "/public/v1/submit/export_private_key": { + "/public/v1/submit/earn_set_wrapper_state": { "post": { - "summary": "Export private key", - "description": "Export a private key.", - "operationId": "ExportPrivateKey", + "summary": "Set Earn wrapper state", + "description": "Enable or disable deposits to a deployed Earn wrapper. Withdrawals are always allowed.", + "operationId": "EarnSetWrapperState", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/EarnSetWrapperStateRequest" + } + } + ], + "tags": [ + "Earn" + ] + } + }, + "/public/v1/submit/earn_withdraw": { + "post": { + "summary": "Withdraw from Earn vault", + "description": "Withdraw assets or redeem shares from an enabled yield vault.", + "operationId": "EarnWithdraw", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/EarnWithdrawRequest" + } + } + ], + "tags": [ + "Earn" + ] + } + }, + "/public/v1/submit/email_auth": { + "post": { + "summary": "Perform email auth", + "description": "Authenticate a user via email.", + "operationId": "EmailAuth", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/EmailAuthRequest" + } + } + ], + "tags": [ + "User Auth" + ] + } + }, + "/public/v1/submit/eth_send_transaction": { + "post": { + "summary": "Broadcast EVM transaction", + "description": "Submit a transaction intent describing an EVM transaction you would like to broadcast.", + "operationId": "EthSendTransaction", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/EthSendTransactionRequest" + } + } + ], + "tags": [ + "Broadcasting" + ] + } + }, + "/public/v1/submit/export_private_key": { + "post": { + "summary": "Export private key", + "description": "Export a private key.", + "operationId": "ExportPrivateKey", "responses": { "200": { "description": "A successful response.", @@ -2665,7 +3175,9 @@ } } ], - "tags": ["Private Keys"] + "tags": [ + "Private Keys" + ] } }, "/public/v1/submit/export_wallet": { @@ -2691,7 +3203,9 @@ } } ], - "tags": ["Wallets"] + "tags": [ + "Wallets" + ] } }, "/public/v1/submit/export_wallet_account": { @@ -2717,7 +3231,9 @@ } } ], - "tags": ["Wallets"] + "tags": [ + "Wallets" + ] } }, "/public/v1/submit/import_private_key": { @@ -2743,7 +3259,9 @@ } } ], - "tags": ["Private Keys"] + "tags": [ + "Private Keys" + ] } }, "/public/v1/submit/import_wallet": { @@ -2769,7 +3287,9 @@ } } ], - "tags": ["Wallets"] + "tags": [ + "Wallets" + ] } }, "/public/v1/submit/init_fiat_on_ramp": { @@ -2795,7 +3315,9 @@ } } ], - "tags": ["On Ramp"] + "tags": [ + "On Ramp" + ] } }, "/public/v1/submit/init_import_private_key": { @@ -2821,7 +3343,9 @@ } } ], - "tags": ["Private Keys"] + "tags": [ + "Private Keys" + ] } }, "/public/v1/submit/init_import_wallet": { @@ -2847,7 +3371,9 @@ } } ], - "tags": ["Wallets"] + "tags": [ + "Wallets" + ] } }, "/public/v1/submit/init_otp": { @@ -2873,7 +3399,9 @@ } } ], - "tags": ["User Verification"] + "tags": [ + "User Verification" + ] } }, "/public/v1/submit/init_otp_auth": { @@ -2899,7 +3427,9 @@ } } ], - "tags": ["User Auth"] + "tags": [ + "User Auth" + ] } }, "/public/v1/submit/init_user_email_recovery": { @@ -2925,7 +3455,9 @@ } } ], - "tags": ["User Recovery"] + "tags": [ + "User Recovery" + ] } }, "/public/v1/submit/oauth": { @@ -2951,7 +3483,9 @@ } } ], - "tags": ["User Auth"] + "tags": [ + "User Auth" + ] } }, "/public/v1/submit/oauth2_authenticate": { @@ -2977,7 +3511,9 @@ } } ], - "tags": ["User Auth"] + "tags": [ + "User Auth" + ] } }, "/public/v1/submit/oauth_login": { @@ -3003,7 +3539,9 @@ } } ], - "tags": ["Sessions"] + "tags": [ + "Sessions" + ] } }, "/public/v1/submit/otp_auth": { @@ -3029,7 +3567,9 @@ } } ], - "tags": ["User Auth"] + "tags": [ + "User Auth" + ] } }, "/public/v1/submit/otp_login": { @@ -3055,7 +3595,9 @@ } } ], - "tags": ["Sessions"] + "tags": [ + "Sessions" + ] } }, "/public/v1/submit/recover_user": { @@ -3081,7 +3623,9 @@ } } ], - "tags": ["User Recovery"] + "tags": [ + "User Recovery" + ] } }, "/public/v1/submit/reject_activity": { @@ -3107,7 +3651,9 @@ } } ], - "tags": ["Consensus"] + "tags": [ + "Consensus" + ] } }, "/public/v1/submit/remove_ip_allowlist": { @@ -3133,7 +3679,9 @@ } } ], - "tags": ["IP Allowlist"] + "tags": [ + "IP Allowlist" + ] } }, "/public/v1/submit/remove_organization_feature": { @@ -3159,7 +3707,9 @@ } } ], - "tags": ["Features"] + "tags": [ + "Features" + ] } }, "/public/v1/submit/restore_tvc_deployment": { @@ -3185,7 +3735,9 @@ } } ], - "tags": ["TVC"] + "tags": [ + "TVC" + ] } }, "/public/v1/submit/set_ip_allowlist": { @@ -3211,7 +3763,9 @@ } } ], - "tags": ["IP Allowlist"] + "tags": [ + "IP Allowlist" + ] } }, "/public/v1/submit/set_organization_feature": { @@ -3237,7 +3791,9 @@ } } ], - "tags": ["Features"] + "tags": [ + "Features" + ] } }, "/public/v1/submit/set_tvc_app_live_deployment": { @@ -3263,7 +3819,9 @@ } } ], - "tags": ["TVC"] + "tags": [ + "TVC" + ] } }, "/public/v1/submit/sign_raw_payload": { @@ -3289,7 +3847,9 @@ } } ], - "tags": ["Signing"] + "tags": [ + "Signing" + ] } }, "/public/v1/submit/sign_raw_payloads": { @@ -3315,7 +3875,9 @@ } } ], - "tags": ["Signing"] + "tags": [ + "Signing" + ] } }, "/public/v1/submit/sign_transaction": { @@ -3341,7 +3903,9 @@ } } ], - "tags": ["Signing"] + "tags": [ + "Signing" + ] } }, "/public/v1/submit/sol_send_transaction": { @@ -3367,7 +3931,9 @@ } } ], - "tags": ["Broadcasting"] + "tags": [ + "Broadcasting" + ] } }, "/public/v1/submit/spark_claim_transfer": { @@ -3393,7 +3959,9 @@ } } ], - "tags": ["Signing"] + "tags": [ + "Signing" + ] } }, "/public/v1/submit/spark_prepare_lightning_receive": { @@ -3419,7 +3987,9 @@ } } ], - "tags": ["Signing"] + "tags": [ + "Signing" + ] } }, "/public/v1/submit/spark_prepare_transfer": { @@ -3445,7 +4015,9 @@ } } ], - "tags": ["Signing"] + "tags": [ + "Signing" + ] } }, "/public/v1/submit/spark_sign_frost": { @@ -3471,7 +4043,9 @@ } } ], - "tags": ["Signing"] + "tags": [ + "Signing" + ] } }, "/public/v1/submit/stamp_login": { @@ -3497,7 +4071,9 @@ } } ], - "tags": ["Sessions"] + "tags": [ + "Sessions" + ] } }, "/public/v1/submit/update_fiat_on_ramp_credential": { @@ -3523,7 +4099,9 @@ } } ], - "tags": ["On Ramp"] + "tags": [ + "On Ramp" + ] } }, "/public/v1/submit/update_mfa_policy": { @@ -3549,7 +4127,9 @@ } } ], - "tags": ["MFA Policies"] + "tags": [ + "MFA Policies" + ] } }, "/public/v1/submit/update_oauth2_credential": { @@ -3575,7 +4155,9 @@ } } ], - "tags": ["User Auth"] + "tags": [ + "User Auth" + ] } }, "/public/v1/submit/update_organization_name": { @@ -3601,7 +4183,9 @@ } } ], - "tags": ["Organizations"] + "tags": [ + "Organizations" + ] } }, "/public/v1/submit/update_policy": { @@ -3627,7 +4211,9 @@ } } ], - "tags": ["Policies"] + "tags": [ + "Policies" + ] } }, "/public/v1/submit/update_private_key_tag": { @@ -3653,7 +4239,9 @@ } } ], - "tags": ["Private Key Tags"] + "tags": [ + "Private Key Tags" + ] } }, "/public/v1/submit/update_root_quorum": { @@ -3679,7 +4267,9 @@ } } ], - "tags": ["Organizations"] + "tags": [ + "Organizations" + ] } }, "/public/v1/submit/update_user": { @@ -3705,7 +4295,9 @@ } } ], - "tags": ["Users"] + "tags": [ + "Users" + ] } }, "/public/v1/submit/update_user_email": { @@ -3731,7 +4323,9 @@ } } ], - "tags": ["Users"] + "tags": [ + "Users" + ] } }, "/public/v1/submit/update_user_name": { @@ -3757,7 +4351,9 @@ } } ], - "tags": ["Users"] + "tags": [ + "Users" + ] } }, "/public/v1/submit/update_user_phone_number": { @@ -3783,7 +4379,9 @@ } } ], - "tags": ["Users"] + "tags": [ + "Users" + ] } }, "/public/v1/submit/update_user_tag": { @@ -3809,7 +4407,9 @@ } } ], - "tags": ["User Tags"] + "tags": [ + "User Tags" + ] } }, "/public/v1/submit/update_wallet": { @@ -3835,7 +4435,9 @@ } } ], - "tags": ["Wallets"] + "tags": [ + "Wallets" + ] } }, "/public/v1/submit/update_webhook_endpoint": { @@ -3861,7 +4463,9 @@ } } ], - "tags": ["Organizations"] + "tags": [ + "Organizations" + ] } }, "/public/v1/submit/verify_otp": { @@ -3887,7 +4491,9 @@ } } ], - "tags": ["User Verification"] + "tags": [ + "User Verification" + ] } }, "/tkhq/api/v1/noop-codegen-anchor": { @@ -3921,7 +4527,11 @@ "description": "WebAuthN hardware devices that can be used to log in to the Turnkey web app." } }, - "required": ["invitationId", "userId", "authenticator"] + "required": [ + "invitationId", + "userId", + "authenticator" + ] }, "AcceptInvitationIntentV2": { "type": "object", @@ -3939,7 +4549,11 @@ "description": "WebAuthN hardware devices that can be used to log in to the Turnkey web app." } }, - "required": ["invitationId", "userId", "authenticator"] + "required": [ + "invitationId", + "userId", + "authenticator" + ] }, "AcceptInvitationResult": { "type": "object", @@ -3953,11 +4567,18 @@ "description": "Unique identifier for a given User." } }, - "required": ["invitationId", "userId"] + "required": [ + "invitationId", + "userId" + ] }, "AccessType": { "type": "string", - "enum": ["ACCESS_TYPE_WEB", "ACCESS_TYPE_API", "ACCESS_TYPE_ALL"] + "enum": [ + "ACCESS_TYPE_WEB", + "ACCESS_TYPE_API", + "ACCESS_TYPE_ALL" + ] }, "ActivateBillingTierIntent": { "type": "object", @@ -3971,7 +4592,9 @@ "x-nullable": true } }, - "required": ["productId"] + "required": [ + "productId" + ] }, "ActivateBillingTierResult": { "type": "object", @@ -3981,7 +4604,9 @@ "description": "The id of the product being subscribed to." } }, - "required": ["productId"] + "required": [ + "productId" + ] }, "Activity": { "type": "object", @@ -4070,7 +4695,9 @@ "description": "An action that can be taken within the Turnkey infrastructure." } }, - "required": ["activity"] + "required": [ + "activity" + ] }, "ActivityStatus": { "type": "string", @@ -4229,7 +4856,21 @@ "ACTIVITY_TYPE_CREATE_MFA_POLICY", "ACTIVITY_TYPE_UPDATE_MFA_POLICY", "ACTIVITY_TYPE_DELETE_MFA_POLICY", - "ACTIVITY_TYPE_CREATE_SESSION_PROFILE" + "ACTIVITY_TYPE_CREATE_SESSION_PROFILE", + "ACTIVITY_TYPE_EARN_DEPLOY_WRAPPER", + "ACTIVITY_TYPE_EARN_DEPOSIT", + "ACTIVITY_TYPE_EARN_WITHDRAW", + "ACTIVITY_TYPE_EXECUTE_SWAP", + "ACTIVITY_TYPE_UPSERT_SWAP_CONFIG", + "ACTIVITY_TYPE_CREATE_TVC_OPERATOR", + "ACTIVITY_TYPE_CREATE_TVC_QUORUM_KEY", + "ACTIVITY_TYPE_RE_ENCRYPT_TVC_QUORUM_KEY_SHARE", + "ACTIVITY_TYPE_INIT_IMPORT_SECRETS", + "ACTIVITY_TYPE_SOL_SEND_TRANSACTION_V2", + "ACTIVITY_TYPE_CLAIM_SWAP_FEES", + "ACTIVITY_TYPE_EARN_SET_WRAPPER_STATE", + "ACTIVITY_TYPE_CLAIM_EARN_FEES", + "ACTIVITY_TYPE_UPDATE_WALLET_ACCOUNT_NAME" ] }, "AddressFormat": { @@ -4345,7 +4986,10 @@ "description": "Optional window (in seconds) indicating how long the API Key should last." } }, - "required": ["apiKeyName", "publicKey"] + "required": [ + "apiKeyName", + "publicKey" + ] }, "ApiKeyParamsV2": { "type": "object", @@ -4368,7 +5012,11 @@ "description": "Optional window (in seconds) indicating how long the API Key should last." } }, - "required": ["apiKeyName", "publicKey", "curveType"] + "required": [ + "apiKeyName", + "publicKey", + "curveType" + ] }, "ApiOnlyUserParams": { "type": "object", @@ -4398,7 +5046,11 @@ "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." } }, - "required": ["userName", "userTags", "apiKeys"] + "required": [ + "userName", + "userTags", + "apiKeys" + ] }, "AppProof": { "type": "object", @@ -4420,7 +5072,12 @@ "description": "Signature over hashed proof_payload." } }, - "required": ["scheme", "publicKey", "proofPayload", "signature"] + "required": [ + "scheme", + "publicKey", + "proofPayload", + "signature" + ] }, "AppStatus": { "type": "object", @@ -4442,7 +5099,11 @@ "description": "The deployment ID currently serving traffic for this app" } }, - "required": ["appId", "deployments", "targetedDeploymentId"] + "required": [ + "appId", + "deployments", + "targetedDeploymentId" + ] }, "ApproveActivityIntent": { "type": "object", @@ -4452,14 +5113,18 @@ "description": "An artifact verifying a User's action." } }, - "required": ["fingerprint"] + "required": [ + "fingerprint" + ] }, "ApproveActivityRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_APPROVE_ACTIVITY"] + "enum": [ + "ACTIVITY_TYPE_APPROVE_ACTIVITY" + ] }, "timestampMs": { "type": "string", @@ -4477,7 +5142,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "AssetBalance": { "type": "object", @@ -4591,7 +5261,9 @@ "description": "Optional specific authenticator ID required (e.g., for requiring a specific session profile id)" } }, - "required": ["type"] + "required": [ + "type" + ] }, "AuthenticationMethodParams": { "type": "object", @@ -4606,7 +5278,9 @@ "description": "Optional specific authenticator ID required (e.g., UUID of a passkey authenticator). If not provided, any authenticator of the specified type can be used." } }, - "required": ["type"] + "required": [ + "type" + ] }, "AuthenticationType": { "type": "string", @@ -4693,11 +5367,17 @@ }, "authenticatorAttachment": { "type": "string", - "enum": ["cross-platform", "platform"], + "enum": [ + "cross-platform", + "platform" + ], "x-nullable": true } }, - "required": ["clientDataJson", "attestationObject"] + "required": [ + "clientDataJson", + "attestationObject" + ] }, "AuthenticatorParams": { "type": "object", @@ -4718,7 +5398,12 @@ "description": "Challenge presented for authentication purposes." } }, - "required": ["authenticatorName", "userId", "attestation", "challenge"] + "required": [ + "authenticatorName", + "userId", + "attestation", + "challenge" + ] }, "AuthenticatorParamsV2": { "type": "object", @@ -4736,7 +5421,11 @@ "description": "The attestation that proves custody of the authenticator and provides metadata about it." } }, - "required": ["authenticatorName", "challenge", "attestation"] + "required": [ + "authenticatorName", + "challenge", + "attestation" + ] }, "AuthenticatorTransport": { "type": "string", @@ -4806,42 +5495,122 @@ "$ref": "#/definitions/BootProof" } }, - "required": ["bootProof"] + "required": [ + "bootProof" + ] }, - "ClientSignature": { + "ClaimEarnFeesIntent": { "type": "object", "properties": { - "publicKey": { + "wrapperAddress": { "type": "string", - "description": "The public component of a cryptographic key pair used to create the signature." + "description": "Address of the deployed Earn wrapper to claim fees for. Must be one of the org's deployed wrappers." + } + }, + "required": [ + "wrapperAddress" + ] + }, + "ClaimEarnFeesRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_CLAIM_EARN_FEES" + ] }, - "scheme": { - "$ref": "#/definitions/ClientSignatureScheme", - "description": "The signature scheme used to generate the client signature." + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, - "message": { + "organizationId": { "type": "string", - "description": "The message that was signed." + "description": "Unique identifier for a given Organization." }, - "signature": { + "parameters": { + "$ref": "#/definitions/ClaimEarnFeesIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "ClaimEarnFeesResult": { + "type": "object", + "properties": { + "claimRequestId": { "type": "string", - "description": "The cryptographic signature over the message." + "description": "Identifier to poll claim status and tx hash via GetClaimEarnFeesStatus." } }, - "required": ["publicKey", "scheme", "message", "signature"] + "required": [ + "claimRequestId" + ] }, - "ClientSignatureScheme": { - "type": "string", - "enum": ["CLIENT_SIGNATURE_SCHEME_API_P256"] + "ClaimSwapFeesIntent": { + "type": "object" }, - "Config": { + "ClaimSwapFeesResult": { "type": "object", "properties": { - "features": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/Feature" + "requestId": { + "type": "string", + "description": "Relay claim request ID submitted through the permit endpoint." + } + }, + "required": [ + "requestId" + ] + }, + "ClientSignature": { + "type": "object", + "properties": { + "publicKey": { + "type": "string", + "description": "The public component of a cryptographic key pair used to create the signature." + }, + "scheme": { + "$ref": "#/definitions/ClientSignatureScheme", + "description": "The signature scheme used to generate the client signature." + }, + "message": { + "type": "string", + "description": "The message that was signed." + }, + "signature": { + "type": "string", + "description": "The cryptographic signature over the message." + } + }, + "required": [ + "publicKey", + "scheme", + "message", + "signature" + ] + }, + "ClientSignatureScheme": { + "type": "string", + "enum": [ + "CLIENT_SIGNATURE_SCHEME_API_P256" + ] + }, + "Config": { + "type": "object", + "properties": { + "features": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/Feature" } }, "quorum": { @@ -4865,7 +5634,10 @@ "description": "Unique identifier for a given User." } }, - "required": ["apiKeys", "userId"] + "required": [ + "apiKeys", + "userId" + ] }, "CreateApiKeysIntentV2": { "type": "object", @@ -4883,14 +5655,19 @@ "description": "Unique identifier for a given User." } }, - "required": ["apiKeys", "userId"] + "required": [ + "apiKeys", + "userId" + ] }, "CreateApiKeysRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_CREATE_API_KEYS_V2"] + "enum": [ + "ACTIVITY_TYPE_CREATE_API_KEYS_V2" + ] }, "timestampMs": { "type": "string", @@ -4908,7 +5685,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "CreateApiKeysResult": { "type": "object", @@ -4921,7 +5703,9 @@ "description": "A list of API Key IDs." } }, - "required": ["apiKeyIds"] + "required": [ + "apiKeyIds" + ] }, "CreateApiOnlyUsersIntent": { "type": "object", @@ -4935,7 +5719,9 @@ "description": "A list of API-only Users to create." } }, - "required": ["apiOnlyUsers"] + "required": [ + "apiOnlyUsers" + ] }, "CreateApiOnlyUsersResult": { "type": "object", @@ -4948,7 +5734,9 @@ "description": "A list of API-only User IDs." } }, - "required": ["userIds"] + "required": [ + "userIds" + ] }, "CreateAuthenticatorsIntent": { "type": "object", @@ -4966,7 +5754,10 @@ "description": "Unique identifier for a given User." } }, - "required": ["authenticators", "userId"] + "required": [ + "authenticators", + "userId" + ] }, "CreateAuthenticatorsIntentV2": { "type": "object", @@ -4984,14 +5775,19 @@ "description": "Unique identifier for a given User." } }, - "required": ["authenticators", "userId"] + "required": [ + "authenticators", + "userId" + ] }, "CreateAuthenticatorsRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_CREATE_AUTHENTICATORS_V2"] + "enum": [ + "ACTIVITY_TYPE_CREATE_AUTHENTICATORS_V2" + ] }, "timestampMs": { "type": "string", @@ -5009,7 +5805,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "CreateAuthenticatorsResult": { "type": "object", @@ -5022,7 +5823,9 @@ "description": "A list of Authenticator IDs." } }, - "required": ["authenticatorIds"] + "required": [ + "authenticatorIds" + ] }, "CreateFiatOnRampCredentialIntent": { "type": "object", @@ -5065,7 +5868,9 @@ "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_CREATE_FIAT_ON_RAMP_CREDENTIAL"] + "enum": [ + "ACTIVITY_TYPE_CREATE_FIAT_ON_RAMP_CREDENTIAL" + ] }, "timestampMs": { "type": "string", @@ -5083,7 +5888,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "CreateFiatOnRampCredentialResult": { "type": "object", @@ -5093,7 +5903,9 @@ "description": "Unique identifier of the Fiat On-Ramp credential that was created" } }, - "required": ["fiatOnRampCredentialId"] + "required": [ + "fiatOnRampCredentialId" + ] }, "CreateInvitationsIntent": { "type": "object", @@ -5107,14 +5919,18 @@ "description": "A list of Invitations." } }, - "required": ["invitations"] + "required": [ + "invitations" + ] }, "CreateInvitationsRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_CREATE_INVITATIONS"] + "enum": [ + "ACTIVITY_TYPE_CREATE_INVITATIONS" + ] }, "timestampMs": { "type": "string", @@ -5132,7 +5948,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "CreateInvitationsResult": { "type": "object", @@ -5145,7 +5966,9 @@ "description": "A list of Invitation IDs" } }, - "required": ["invitationIds"] + "required": [ + "invitationIds" + ] }, "CreateMfaPolicyIntent": { "type": "object", @@ -5194,7 +6017,9 @@ "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_CREATE_MFA_POLICY"] + "enum": [ + "ACTIVITY_TYPE_CREATE_MFA_POLICY" + ] }, "timestampMs": { "type": "string", @@ -5208,7 +6033,12 @@ "$ref": "#/definitions/CreateMfaPolicyIntent" } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "CreateMfaPolicyResult": { "type": "object", @@ -5218,7 +6048,9 @@ "description": "Unique identifier for a given MFA Policy." } }, - "required": ["mfaPolicyId"] + "required": [ + "mfaPolicyId" + ] }, "CreateOauth2CredentialIntent": { "type": "object", @@ -5236,14 +6068,20 @@ "description": "The client secret issued by the OAuth 2.0 provider encrypted to the TLS Fetcher quorum key" } }, - "required": ["provider", "clientId", "encryptedClientSecret"] + "required": [ + "provider", + "clientId", + "encryptedClientSecret" + ] }, "CreateOauth2CredentialRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_CREATE_OAUTH2_CREDENTIAL"] + "enum": [ + "ACTIVITY_TYPE_CREATE_OAUTH2_CREDENTIAL" + ] }, "timestampMs": { "type": "string", @@ -5261,7 +6099,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "CreateOauth2CredentialResult": { "type": "object", @@ -5271,7 +6114,9 @@ "description": "Unique identifier of the OAuth 2.0 credential that was created" } }, - "required": ["oauth2CredentialId"] + "required": [ + "oauth2CredentialId" + ] }, "CreateOauthProvidersIntent": { "type": "object", @@ -5289,7 +6134,10 @@ "description": "A list of Oauth providers." } }, - "required": ["userId", "oauthProviders"] + "required": [ + "userId", + "oauthProviders" + ] }, "CreateOauthProvidersIntentV2": { "type": "object", @@ -5307,14 +6155,19 @@ "description": "A list of Oauth providers." } }, - "required": ["userId", "oauthProviders"] + "required": [ + "userId", + "oauthProviders" + ] }, "CreateOauthProvidersRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_CREATE_OAUTH_PROVIDERS_V2"] + "enum": [ + "ACTIVITY_TYPE_CREATE_OAUTH_PROVIDERS_V2" + ] }, "timestampMs": { "type": "string", @@ -5332,7 +6185,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "CreateOauthProvidersResult": { "type": "object", @@ -5345,7 +6203,9 @@ "description": "A list of unique identifiers for Oauth Providers" } }, - "required": ["providerIds"] + "required": [ + "providerIds" + ] }, "CreateOauthProvidersResultV2": { "type": "object", @@ -5358,7 +6218,9 @@ "description": "A list of unique identifiers for Oauth Providers" } }, - "required": ["providerIds"] + "required": [ + "providerIds" + ] }, "CreateOrganizationIntent": { "type": "object", @@ -5381,7 +6243,11 @@ "description": "Unique identifier for the root user object." } }, - "required": ["organizationName", "rootEmail", "rootAuthenticator"] + "required": [ + "organizationName", + "rootEmail", + "rootAuthenticator" + ] }, "CreateOrganizationIntentV2": { "type": "object", @@ -5404,7 +6270,11 @@ "description": "Unique identifier for the root user object." } }, - "required": ["organizationName", "rootEmail", "rootAuthenticator"] + "required": [ + "organizationName", + "rootEmail", + "rootAuthenticator" + ] }, "CreateOrganizationResult": { "type": "object", @@ -5414,7 +6284,9 @@ "description": "Unique identifier for a given Organization." } }, - "required": ["organizationId"] + "required": [ + "organizationId" + ] }, "CreatePoliciesIntent": { "type": "object", @@ -5428,14 +6300,18 @@ "description": "An array of policy intents to be created." } }, - "required": ["policies"] + "required": [ + "policies" + ] }, "CreatePoliciesRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_CREATE_POLICIES"] + "enum": [ + "ACTIVITY_TYPE_CREATE_POLICIES" + ] }, "timestampMs": { "type": "string", @@ -5453,7 +6329,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "CreatePoliciesResult": { "type": "object", @@ -5466,7 +6347,9 @@ "description": "A list of unique identifiers for the created policies." } }, - "required": ["policyIds"] + "required": [ + "policyIds" + ] }, "CreatePolicyIntent": { "type": "object", @@ -5491,7 +6374,11 @@ "type": "string" } }, - "required": ["policyName", "selectors", "effect"] + "required": [ + "policyName", + "selectors", + "effect" + ] }, "CreatePolicyIntentV2": { "type": "object", @@ -5516,7 +6403,11 @@ "type": "string" } }, - "required": ["policyName", "selectors", "effect"] + "required": [ + "policyName", + "selectors", + "effect" + ] }, "CreatePolicyIntentV3": { "type": "object", @@ -5544,14 +6435,20 @@ "description": "Notes for a Policy." } }, - "required": ["policyName", "effect", "notes"] + "required": [ + "policyName", + "effect", + "notes" + ] }, "CreatePolicyRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_CREATE_POLICY_V3"] + "enum": [ + "ACTIVITY_TYPE_CREATE_POLICY_V3" + ] }, "timestampMs": { "type": "string", @@ -5569,7 +6466,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "CreatePolicyResult": { "type": "object", @@ -5579,7 +6481,9 @@ "description": "Unique identifier for a given Policy." } }, - "required": ["policyId"] + "required": [ + "policyId" + ] }, "CreatePrivateKeyTagIntent": { "type": "object", @@ -5596,14 +6500,19 @@ "description": "A list of Private Key IDs." } }, - "required": ["privateKeyTagName", "privateKeyIds"] + "required": [ + "privateKeyTagName", + "privateKeyIds" + ] }, "CreatePrivateKeyTagRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_CREATE_PRIVATE_KEY_TAG"] + "enum": [ + "ACTIVITY_TYPE_CREATE_PRIVATE_KEY_TAG" + ] }, "timestampMs": { "type": "string", @@ -5621,7 +6530,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "CreatePrivateKeyTagResult": { "type": "object", @@ -5638,7 +6552,10 @@ "description": "A list of Private Key IDs." } }, - "required": ["privateKeyTagId", "privateKeyIds"] + "required": [ + "privateKeyTagId", + "privateKeyIds" + ] }, "CreatePrivateKeysIntent": { "type": "object", @@ -5652,7 +6569,9 @@ "description": "A list of Private Keys." } }, - "required": ["privateKeys"] + "required": [ + "privateKeys" + ] }, "CreatePrivateKeysIntentV2": { "type": "object", @@ -5666,14 +6585,18 @@ "description": "A list of Private Keys." } }, - "required": ["privateKeys"] + "required": [ + "privateKeys" + ] }, "CreatePrivateKeysRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_CREATE_PRIVATE_KEYS_V2"] + "enum": [ + "ACTIVITY_TYPE_CREATE_PRIVATE_KEYS_V2" + ] }, "timestampMs": { "type": "string", @@ -5691,7 +6614,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "CreatePrivateKeysResult": { "type": "object", @@ -5704,7 +6632,9 @@ "description": "A list of Private Key IDs." } }, - "required": ["privateKeyIds"] + "required": [ + "privateKeyIds" + ] }, "CreatePrivateKeysResultV2": { "type": "object", @@ -5718,7 +6648,9 @@ "description": "A list of Private Key IDs and addresses." } }, - "required": ["privateKeys"] + "required": [ + "privateKeys" + ] }, "CreateReadOnlySessionIntent": { "type": "object" @@ -5728,7 +6660,9 @@ "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_CREATE_READ_ONLY_SESSION"] + "enum": [ + "ACTIVITY_TYPE_CREATE_READ_ONLY_SESSION" + ] }, "timestampMs": { "type": "string", @@ -5746,7 +6680,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "CreateReadOnlySessionResult": { "type": "object", @@ -5800,7 +6739,7 @@ "apiKeyName": { "type": "string", "x-nullable": true, - "description": "Optional human-readable name for an API Key. If none provided, default to Read Write Session - \u003cTimestamp\u003e" + "description": "Optional human-readable name for an API Key. If none provided, default to Read Write Session - " }, "expirationSeconds": { "type": "string", @@ -5808,7 +6747,10 @@ "description": "Expiration window (in seconds) indicating how long the API key is valid for. If not provided, a default of 15 minutes will be used." } }, - "required": ["targetPublicKey", "email"] + "required": [ + "targetPublicKey", + "email" + ] }, "CreateReadWriteSessionIntentV2": { "type": "object", @@ -5825,7 +6767,7 @@ "apiKeyName": { "type": "string", "x-nullable": true, - "description": "Optional human-readable name for an API Key. If none provided, default to Read Write Session - \u003cTimestamp\u003e" + "description": "Optional human-readable name for an API Key. If none provided, default to Read Write Session - " }, "expirationSeconds": { "type": "string", @@ -5838,14 +6780,18 @@ "description": "Invalidate all other previously generated ReadWriteSession API keys" } }, - "required": ["targetPublicKey"] + "required": [ + "targetPublicKey" + ] }, "CreateReadWriteSessionRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_CREATE_READ_WRITE_SESSION_V2"] + "enum": [ + "ACTIVITY_TYPE_CREATE_READ_WRITE_SESSION_V2" + ] }, "timestampMs": { "type": "string", @@ -5863,7 +6809,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "CreateReadWriteSessionResult": { "type": "object", @@ -5961,14 +6912,19 @@ "description": "Notes for a Session Profile." } }, - "required": ["sessionProfileName", "scope"] + "required": [ + "sessionProfileName", + "scope" + ] }, "CreateSessionProfileRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_CREATE_SESSION_PROFILE"] + "enum": [ + "ACTIVITY_TYPE_CREATE_SESSION_PROFILE" + ] }, "timestampMs": { "type": "string", @@ -5982,7 +6938,12 @@ "$ref": "#/definitions/CreateSessionProfileIntent" } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "CreateSessionProfileResult": { "type": "object", @@ -5992,7 +6953,9 @@ "description": "Unique identifier for a given Session Profile." } }, - "required": ["sessionProfileId"] + "required": [ + "sessionProfileId" + ] }, "CreateSmartContractInterfaceIntent": { "type": "object", @@ -6029,7 +6992,9 @@ "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_CREATE_SMART_CONTRACT_INTERFACE"] + "enum": [ + "ACTIVITY_TYPE_CREATE_SMART_CONTRACT_INTERFACE" + ] }, "timestampMs": { "type": "string", @@ -6047,7 +7012,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "CreateSmartContractInterfaceResult": { "type": "object", @@ -6057,7 +7027,9 @@ "description": "The ID of the created Smart Contract Interface." } }, - "required": ["smartContractInterfaceId"] + "required": [ + "smartContractInterfaceId" + ] }, "CreateSubOrganizationIntent": { "type": "object", @@ -6071,7 +7043,10 @@ "description": "Root User authenticator for this new sub-organization" } }, - "required": ["name", "rootAuthenticator"] + "required": [ + "name", + "rootAuthenticator" + ] }, "CreateSubOrganizationIntentV2": { "type": "object", @@ -6094,7 +7069,11 @@ "description": "The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users" } }, - "required": ["subOrganizationName", "rootUsers", "rootQuorumThreshold"] + "required": [ + "subOrganizationName", + "rootUsers", + "rootQuorumThreshold" + ] }, "CreateSubOrganizationIntentV3": { "type": "object", @@ -6168,7 +7147,11 @@ "description": "Disable email auth for the sub-organization" } }, - "required": ["subOrganizationName", "rootUsers", "rootQuorumThreshold"] + "required": [ + "subOrganizationName", + "rootUsers", + "rootQuorumThreshold" + ] }, "CreateSubOrganizationIntentV5": { "type": "object", @@ -6206,7 +7189,11 @@ "description": "Disable email auth for the sub-organization" } }, - "required": ["subOrganizationName", "rootUsers", "rootQuorumThreshold"] + "required": [ + "subOrganizationName", + "rootUsers", + "rootQuorumThreshold" + ] }, "CreateSubOrganizationIntentV6": { "type": "object", @@ -6244,7 +7231,11 @@ "description": "Disable email auth for the sub-organization" } }, - "required": ["subOrganizationName", "rootUsers", "rootQuorumThreshold"] + "required": [ + "subOrganizationName", + "rootUsers", + "rootQuorumThreshold" + ] }, "CreateSubOrganizationIntentV7": { "type": "object", @@ -6302,7 +7293,11 @@ "description": "Optional signature proving authorization for this sub-organization creation. The signature is over the verification token ID and the root user parameters for the root user associated with the verification token. Only required if a public key was provided during the verification step." } }, - "required": ["subOrganizationName", "rootUsers", "rootQuorumThreshold"] + "required": [ + "subOrganizationName", + "rootUsers", + "rootQuorumThreshold" + ] }, "CreateSubOrganizationIntentV8": { "type": "object", @@ -6360,14 +7355,20 @@ "description": "Optional signature proving authorization for this sub-organization creation. The signature is over the verification token ID and the root user parameters for the root user associated with the verification token. Only required if a public key was provided during the verification step." } }, - "required": ["subOrganizationName", "rootUsers", "rootQuorumThreshold"] + "required": [ + "subOrganizationName", + "rootUsers", + "rootQuorumThreshold" + ] }, "CreateSubOrganizationRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V8"] + "enum": [ + "ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V8" + ] }, "timestampMs": { "type": "string", @@ -6385,7 +7386,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "CreateSubOrganizationResult": { "type": "object", @@ -6400,7 +7406,9 @@ } } }, - "required": ["subOrganizationId"] + "required": [ + "subOrganizationId" + ] }, "CreateSubOrganizationResultV3": { "type": "object", @@ -6423,7 +7431,10 @@ } } }, - "required": ["subOrganizationId", "privateKeys"] + "required": [ + "subOrganizationId", + "privateKeys" + ] }, "CreateSubOrganizationResultV4": { "type": "object", @@ -6442,7 +7453,9 @@ } } }, - "required": ["subOrganizationId"] + "required": [ + "subOrganizationId" + ] }, "CreateSubOrganizationResultV5": { "type": "object", @@ -6461,8 +7474,10 @@ } } }, - "required": ["subOrganizationId"] - }, + "required": [ + "subOrganizationId" + ] + }, "CreateSubOrganizationResultV6": { "type": "object", "properties": { @@ -6480,7 +7495,9 @@ } } }, - "required": ["subOrganizationId"] + "required": [ + "subOrganizationId" + ] }, "CreateSubOrganizationResultV7": { "type": "object", @@ -6499,7 +7516,9 @@ } } }, - "required": ["subOrganizationId"] + "required": [ + "subOrganizationId" + ] }, "CreateSubOrganizationResultV8": { "type": "object", @@ -6518,7 +7537,9 @@ } } }, - "required": ["subOrganizationId"] + "required": [ + "subOrganizationId" + ] }, "CreateTvcAppIntent": { "type": "object", @@ -6562,14 +7583,19 @@ "description": "When true, this app may create deployments in debug-mode. Debug-mode deployments expose logs and emit zero'd attestation PCRs, so remote attestation cannot succeed. Cannot be changed after app creation. Setting this true means the app's quorum key is considered permanently insecure, and a new app with a fresh quorum key must be created. Default if not provided: false." } }, - "required": ["name", "quorumPublicKey"] + "required": [ + "name", + "quorumPublicKey" + ] }, "CreateTvcAppRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_CREATE_TVC_APP"] + "enum": [ + "ACTIVITY_TYPE_CREATE_TVC_APP" + ] }, "timestampMs": { "type": "string", @@ -6583,7 +7609,12 @@ "$ref": "#/definitions/CreateTvcAppIntent" } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "CreateTvcAppResult": { "type": "object", @@ -6675,6 +7706,12 @@ "type": "integer", "format": "int64", "description": "Port to use for public ingress." + }, + "replicas": { + "type": "integer", + "format": "int64", + "x-nullable": true, + "description": "Optional desired replica count for this deployment." } }, "required": [ @@ -6694,7 +7731,9 @@ "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_CREATE_TVC_DEPLOYMENT"] + "enum": [ + "ACTIVITY_TYPE_CREATE_TVC_DEPLOYMENT" + ] }, "timestampMs": { "type": "string", @@ -6708,7 +7747,12 @@ "$ref": "#/definitions/CreateTvcDeploymentIntent" } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "CreateTvcDeploymentResult": { "type": "object", @@ -6722,7 +7766,10 @@ "description": "The unique identifier for the TVC manifest" } }, - "required": ["deploymentId", "manifestId"] + "required": [ + "deploymentId", + "manifestId" + ] }, "CreateTvcManifestApprovalsIntent": { "type": "object", @@ -6740,14 +7787,19 @@ "description": "List of manifest approvals" } }, - "required": ["manifestId", "approvals"] + "required": [ + "manifestId", + "approvals" + ] }, "CreateTvcManifestApprovalsRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_CREATE_TVC_MANIFEST_APPROVALS"] + "enum": [ + "ACTIVITY_TYPE_CREATE_TVC_MANIFEST_APPROVALS" + ] }, "timestampMs": { "type": "string", @@ -6761,7 +7813,12 @@ "$ref": "#/definitions/CreateTvcManifestApprovalsIntent" } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "CreateTvcManifestApprovalsResult": { "type": "object", @@ -6774,7 +7831,109 @@ "description": "The unique identifier(s) for the manifest approvals" } }, - "required": ["approvalIds"] + "required": [ + "approvalIds" + ] + }, + "CreateTvcOperatorIntent": { + "type": "object", + "properties": { + "walletName": { + "type": "string", + "x-nullable": true, + "description": "Human-readable name for a new wallet created for this TVC operator" + }, + "walletId": { + "type": "string", + "x-nullable": true, + "description": "Unique identifier for an existing wallet to reuse for this TVC operator" + }, + "path": { + "type": "string", + "description": "Base derivation path for creating TVC operator wallet accounts" + }, + "operatorName": { + "type": "string", + "description": "Human-readable name for this new TVC operator" + } + }, + "required": [ + "path", + "operatorName" + ] + }, + "CreateTvcOperatorResult": { + "type": "object", + "properties": { + "walletId": { + "type": "string", + "description": "The unique identifier for the wallet containing TVC operator accounts" + }, + "operatorId": { + "type": "string", + "description": "The unique identifier for the TVC operator" + }, + "encryptPublicKey": { + "type": "string", + "description": "Public encryption key for this TVC operator" + }, + "signPublicKey": { + "type": "string", + "description": "Public signing key for this TVC operator" + } + }, + "required": [ + "walletId", + "operatorId", + "encryptPublicKey", + "signPublicKey" + ] + }, + "CreateTvcQuorumKeyIntent": { + "type": "object", + "properties": { + "threshold": { + "type": "integer", + "format": "int64", + "description": "The threshold of operators needed to reassemble this TVC quorum key" + }, + "operatorEncryptKeys": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Operator public keys used to encrypt and later approve the generated TVC quorum key shares" + } + }, + "required": [ + "threshold", + "operatorEncryptKeys" + ] + }, + "CreateTvcQuorumKeyResult": { + "type": "object", + "properties": { + "quorumKeyId": { + "type": "string", + "description": "The unique identifier for the TVC quorum key" + }, + "quorumPublicKey": { + "type": "string", + "description": "Public key for the generated TVC quorum key" + }, + "shareIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The unique identifier(s) for the generated TVC quorum key shares" + } + }, + "required": [ + "quorumKeyId", + "quorumPublicKey", + "shareIds" + ] }, "CreateUserTagIntent": { "type": "object", @@ -6791,14 +7950,19 @@ "description": "A list of User IDs." } }, - "required": ["userTagName", "userIds"] + "required": [ + "userTagName", + "userIds" + ] }, "CreateUserTagRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_CREATE_USER_TAG"] + "enum": [ + "ACTIVITY_TYPE_CREATE_USER_TAG" + ] }, "timestampMs": { "type": "string", @@ -6816,7 +7980,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "CreateUserTagResult": { "type": "object", @@ -6833,7 +8002,10 @@ "description": "A list of User IDs." } }, - "required": ["userTagId", "userIds"] + "required": [ + "userTagId", + "userIds" + ] }, "CreateUsersIntent": { "type": "object", @@ -6847,7 +8019,9 @@ "description": "A list of Users." } }, - "required": ["users"] + "required": [ + "users" + ] }, "CreateUsersIntentV2": { "type": "object", @@ -6861,7 +8035,9 @@ "description": "A list of Users." } }, - "required": ["users"] + "required": [ + "users" + ] }, "CreateUsersIntentV3": { "type": "object", @@ -6875,7 +8051,9 @@ "description": "A list of Users." } }, - "required": ["users"] + "required": [ + "users" + ] }, "CreateUsersIntentV4": { "type": "object", @@ -6889,14 +8067,18 @@ "description": "A list of Users." } }, - "required": ["users"] + "required": [ + "users" + ] }, "CreateUsersRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_CREATE_USERS_V4"] + "enum": [ + "ACTIVITY_TYPE_CREATE_USERS_V4" + ] }, "timestampMs": { "type": "string", @@ -6914,7 +8096,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "CreateUsersResult": { "type": "object", @@ -6927,7 +8114,9 @@ "description": "A list of User IDs." } }, - "required": ["userIds"] + "required": [ + "userIds" + ] }, "CreateWalletAccountsIntent": { "type": "object", @@ -6950,14 +8139,19 @@ "description": "Indicates if the wallet accounts should be persisted. This is helpful if you'd like to see the addresses of different derivation paths without actually creating the accounts. Defaults to true." } }, - "required": ["walletId", "accounts"] + "required": [ + "walletId", + "accounts" + ] }, "CreateWalletAccountsRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_CREATE_WALLET_ACCOUNTS"] + "enum": [ + "ACTIVITY_TYPE_CREATE_WALLET_ACCOUNTS" + ] }, "timestampMs": { "type": "string", @@ -6975,7 +8169,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "CreateWalletAccountsResult": { "type": "object", @@ -6988,7 +8187,9 @@ "description": "A list of derived addresses." } }, - "required": ["addresses"] + "required": [ + "addresses" + ] }, "CreateWalletIntent": { "type": "object", @@ -7012,14 +8213,19 @@ "description": "Length of mnemonic to generate the Wallet seed. Defaults to 12. Accepted values: 12, 15, 18, 21, 24." } }, - "required": ["walletName", "accounts"] + "required": [ + "walletName", + "accounts" + ] }, "CreateWalletRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_CREATE_WALLET"] + "enum": [ + "ACTIVITY_TYPE_CREATE_WALLET" + ] }, "timestampMs": { "type": "string", @@ -7037,7 +8243,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "CreateWalletResult": { "type": "object", @@ -7054,7 +8265,10 @@ "description": "A list of account addresses." } }, - "required": ["walletId", "addresses"] + "required": [ + "walletId", + "addresses" + ] }, "CreateWebhookEndpointIntent": { "type": "object", @@ -7076,14 +8290,19 @@ "description": "Event subscriptions to create for this endpoint." } }, - "required": ["url", "name"] + "required": [ + "url", + "name" + ] }, "CreateWebhookEndpointRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_CREATE_WEBHOOK_ENDPOINT"] + "enum": [ + "ACTIVITY_TYPE_CREATE_WEBHOOK_ENDPOINT" + ] }, "timestampMs": { "type": "string", @@ -7101,7 +8320,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "CreateWebhookEndpointResult": { "type": "object", @@ -7115,7 +8339,10 @@ "description": "The created webhook endpoint data." } }, - "required": ["endpointId", "webhookEndpoint"] + "required": [ + "endpointId", + "webhookEndpoint" + ] }, "CredPropsAuthenticationExtensionsClientOutputs": { "type": "object", @@ -7124,7 +8351,9 @@ "type": "boolean" } }, - "required": ["rk"] + "required": [ + "rk" + ] }, "CredentialType": { "type": "string", @@ -7143,7 +8372,11 @@ }, "Curve": { "type": "string", - "enum": ["CURVE_SECP256K1", "CURVE_ED25519", "CURVE_P256"] + "enum": [ + "CURVE_SECP256K1", + "CURVE_ED25519", + "CURVE_P256" + ] }, "CustomRevertError": { "type": "object", @@ -7175,14 +8408,19 @@ "description": "A list of API Key IDs." } }, - "required": ["userId", "apiKeyIds"] + "required": [ + "userId", + "apiKeyIds" + ] }, "DeleteApiKeysRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_DELETE_API_KEYS"] + "enum": [ + "ACTIVITY_TYPE_DELETE_API_KEYS" + ] }, "timestampMs": { "type": "string", @@ -7200,7 +8438,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "DeleteApiKeysResult": { "type": "object", @@ -7213,7 +8456,9 @@ "description": "A list of API Key IDs." } }, - "required": ["apiKeyIds"] + "required": [ + "apiKeyIds" + ] }, "DeleteAuthenticatorsIntent": { "type": "object", @@ -7230,14 +8475,19 @@ "description": "A list of Authenticator IDs." } }, - "required": ["userId", "authenticatorIds"] + "required": [ + "userId", + "authenticatorIds" + ] }, "DeleteAuthenticatorsRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_DELETE_AUTHENTICATORS"] + "enum": [ + "ACTIVITY_TYPE_DELETE_AUTHENTICATORS" + ] }, "timestampMs": { "type": "string", @@ -7255,7 +8505,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "DeleteAuthenticatorsResult": { "type": "object", @@ -7268,7 +8523,9 @@ "description": "Unique identifier for a given Authenticator." } }, - "required": ["authenticatorIds"] + "required": [ + "authenticatorIds" + ] }, "DeleteFiatOnRampCredentialIntent": { "type": "object", @@ -7278,14 +8535,18 @@ "description": "The ID of the fiat on-ramp credential to delete" } }, - "required": ["fiatOnrampCredentialId"] + "required": [ + "fiatOnrampCredentialId" + ] }, "DeleteFiatOnRampCredentialRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_DELETE_FIAT_ON_RAMP_CREDENTIAL"] + "enum": [ + "ACTIVITY_TYPE_DELETE_FIAT_ON_RAMP_CREDENTIAL" + ] }, "timestampMs": { "type": "string", @@ -7303,7 +8564,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "DeleteFiatOnRampCredentialResult": { "type": "object", @@ -7313,7 +8579,9 @@ "description": "Unique identifier of the Fiat On-Ramp credential that was deleted" } }, - "required": ["fiatOnRampCredentialId"] + "required": [ + "fiatOnRampCredentialId" + ] }, "DeleteInvitationIntent": { "type": "object", @@ -7323,14 +8591,18 @@ "description": "Unique identifier for a given Invitation object." } }, - "required": ["invitationId"] + "required": [ + "invitationId" + ] }, "DeleteInvitationRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_DELETE_INVITATION"] + "enum": [ + "ACTIVITY_TYPE_DELETE_INVITATION" + ] }, "timestampMs": { "type": "string", @@ -7348,7 +8620,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "DeleteInvitationResult": { "type": "object", @@ -7358,7 +8635,9 @@ "description": "Unique identifier for a given Invitation." } }, - "required": ["invitationId"] + "required": [ + "invitationId" + ] }, "DeleteMfaPolicyIntent": { "type": "object", @@ -7372,14 +8651,19 @@ "description": "Unique identifier for a given MFA Policy." } }, - "required": ["userId", "mfaPolicyId"] + "required": [ + "userId", + "mfaPolicyId" + ] }, "DeleteMfaPolicyRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_DELETE_MFA_POLICY"] + "enum": [ + "ACTIVITY_TYPE_DELETE_MFA_POLICY" + ] }, "timestampMs": { "type": "string", @@ -7393,7 +8677,12 @@ "$ref": "#/definitions/DeleteMfaPolicyIntent" } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "DeleteMfaPolicyResult": { "type": "object", @@ -7403,7 +8692,9 @@ "description": "Unique identifier for a given MFA Policy." } }, - "required": ["mfaPolicyId"] + "required": [ + "mfaPolicyId" + ] }, "DeleteOauth2CredentialIntent": { "type": "object", @@ -7413,14 +8704,18 @@ "description": "The ID of the OAuth 2.0 credential to delete" } }, - "required": ["oauth2CredentialId"] + "required": [ + "oauth2CredentialId" + ] }, "DeleteOauth2CredentialRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_DELETE_OAUTH2_CREDENTIAL"] + "enum": [ + "ACTIVITY_TYPE_DELETE_OAUTH2_CREDENTIAL" + ] }, "timestampMs": { "type": "string", @@ -7438,7 +8733,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "DeleteOauth2CredentialResult": { "type": "object", @@ -7448,7 +8748,9 @@ "description": "Unique identifier of the OAuth 2.0 credential that was deleted" } }, - "required": ["oauth2CredentialId"] + "required": [ + "oauth2CredentialId" + ] }, "DeleteOauthProvidersIntent": { "type": "object", @@ -7465,14 +8767,19 @@ "description": "Unique identifier for a given Provider." } }, - "required": ["userId", "providerIds"] + "required": [ + "userId", + "providerIds" + ] }, "DeleteOauthProvidersRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_DELETE_OAUTH_PROVIDERS"] + "enum": [ + "ACTIVITY_TYPE_DELETE_OAUTH_PROVIDERS" + ] }, "timestampMs": { "type": "string", @@ -7490,7 +8797,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "DeleteOauthProvidersResult": { "type": "object", @@ -7503,7 +8815,9 @@ "description": "A list of unique identifiers for Oauth Providers" } }, - "required": ["providerIds"] + "required": [ + "providerIds" + ] }, "DeleteOrganizationIntent": { "type": "object", @@ -7513,7 +8827,9 @@ "description": "Unique identifier for a given Organization." } }, - "required": ["organizationId"] + "required": [ + "organizationId" + ] }, "DeleteOrganizationResult": { "type": "object", @@ -7523,7 +8839,9 @@ "description": "Unique identifier for a given Organization." } }, - "required": ["organizationId"] + "required": [ + "organizationId" + ] }, "DeletePaymentMethodIntent": { "type": "object", @@ -7534,7 +8852,9 @@ "description": "The payment method that the customer wants to remove." } }, - "required": ["paymentMethodId"] + "required": [ + "paymentMethodId" + ] }, "DeletePaymentMethodResult": { "type": "object", @@ -7544,7 +8864,9 @@ "description": "The payment method that was removed." } }, - "required": ["paymentMethodId"] + "required": [ + "paymentMethodId" + ] }, "DeletePoliciesIntent": { "type": "object", @@ -7557,14 +8879,18 @@ "description": "List of unique identifiers for policies within an organization" } }, - "required": ["policyIds"] + "required": [ + "policyIds" + ] }, "DeletePoliciesRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_DELETE_POLICIES"] + "enum": [ + "ACTIVITY_TYPE_DELETE_POLICIES" + ] }, "timestampMs": { "type": "string", @@ -7582,7 +8908,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "DeletePoliciesResult": { "type": "object", @@ -7595,7 +8926,9 @@ "description": "A list of unique identifiers for the deleted policies." } }, - "required": ["policyIds"] + "required": [ + "policyIds" + ] }, "DeletePolicyIntent": { "type": "object", @@ -7605,14 +8938,18 @@ "description": "Unique identifier for a given Policy." } }, - "required": ["policyId"] + "required": [ + "policyId" + ] }, "DeletePolicyRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_DELETE_POLICY"] + "enum": [ + "ACTIVITY_TYPE_DELETE_POLICY" + ] }, "timestampMs": { "type": "string", @@ -7630,9 +8967,14 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] - }, - "DeletePolicyResult": { + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "DeletePolicyResult": { "type": "object", "properties": { "policyId": { @@ -7640,7 +8982,9 @@ "description": "Unique identifier for a given Policy." } }, - "required": ["policyId"] + "required": [ + "policyId" + ] }, "DeletePrivateKeyTagsIntent": { "type": "object", @@ -7653,14 +8997,18 @@ "description": "A list of Private Key Tag IDs." } }, - "required": ["privateKeyTagIds"] + "required": [ + "privateKeyTagIds" + ] }, "DeletePrivateKeyTagsRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_DELETE_PRIVATE_KEY_TAGS"] + "enum": [ + "ACTIVITY_TYPE_DELETE_PRIVATE_KEY_TAGS" + ] }, "timestampMs": { "type": "string", @@ -7678,7 +9026,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "DeletePrivateKeyTagsResult": { "type": "object", @@ -7698,7 +9051,10 @@ "description": "A list of Private Key IDs." } }, - "required": ["privateKeyTagIds", "privateKeyIds"] + "required": [ + "privateKeyTagIds", + "privateKeyIds" + ] }, "DeletePrivateKeysIntent": { "type": "object", @@ -7716,14 +9072,18 @@ "description": "Optional parameter for deleting the private keys, even if any have not been previously exported. If they have been exported, this field is ignored." } }, - "required": ["privateKeyIds"] + "required": [ + "privateKeyIds" + ] }, "DeletePrivateKeysRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_DELETE_PRIVATE_KEYS"] + "enum": [ + "ACTIVITY_TYPE_DELETE_PRIVATE_KEYS" + ] }, "timestampMs": { "type": "string", @@ -7741,7 +9101,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "DeletePrivateKeysResult": { "type": "object", @@ -7754,7 +9119,9 @@ "description": "A list of private key unique identifiers that were removed" } }, - "required": ["privateKeyIds"] + "required": [ + "privateKeyIds" + ] }, "DeleteSmartContractInterfaceIntent": { "type": "object", @@ -7764,14 +9131,18 @@ "description": "The ID of a Smart Contract Interface intended for deletion." } }, - "required": ["smartContractInterfaceId"] + "required": [ + "smartContractInterfaceId" + ] }, "DeleteSmartContractInterfaceRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_DELETE_SMART_CONTRACT_INTERFACE"] + "enum": [ + "ACTIVITY_TYPE_DELETE_SMART_CONTRACT_INTERFACE" + ] }, "timestampMs": { "type": "string", @@ -7789,7 +9160,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "DeleteSmartContractInterfaceResult": { "type": "object", @@ -7799,7 +9175,9 @@ "description": "The ID of the deleted Smart Contract Interface." } }, - "required": ["smartContractInterfaceId"] + "required": [ + "smartContractInterfaceId" + ] }, "DeleteSubOrganizationIntent": { "type": "object", @@ -7816,7 +9194,9 @@ "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_DELETE_SUB_ORGANIZATION"] + "enum": [ + "ACTIVITY_TYPE_DELETE_SUB_ORGANIZATION" + ] }, "timestampMs": { "type": "string", @@ -7834,7 +9214,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "DeleteSubOrganizationResult": { "type": "object", @@ -7844,7 +9229,9 @@ "description": "Unique identifier of the sub organization that was removed" } }, - "required": ["subOrganizationUuid"] + "required": [ + "subOrganizationUuid" + ] }, "DeleteTvcAppAndDeploymentsIntent": { "type": "object", @@ -7854,14 +9241,18 @@ "description": "The unique identifier of the TVC app to delete. The app and all associated deployments will be removed." } }, - "required": ["appId"] + "required": [ + "appId" + ] }, "DeleteTvcAppAndDeploymentsRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_DELETE_TVC_APP_AND_DEPLOYMENTS"] + "enum": [ + "ACTIVITY_TYPE_DELETE_TVC_APP_AND_DEPLOYMENTS" + ] }, "timestampMs": { "type": "string", @@ -7879,7 +9270,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "DeleteTvcAppAndDeploymentsResult": { "type": "object", @@ -7889,7 +9285,9 @@ "description": "The unique identifier of the deleted TVC app." } }, - "required": ["appId"] + "required": [ + "appId" + ] }, "DeleteTvcDeploymentIntent": { "type": "object", @@ -7899,14 +9297,18 @@ "description": "The unique identifier of the TVC deployment to delete." } }, - "required": ["deploymentId"] + "required": [ + "deploymentId" + ] }, "DeleteTvcDeploymentRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_DELETE_TVC_DEPLOYMENT"] + "enum": [ + "ACTIVITY_TYPE_DELETE_TVC_DEPLOYMENT" + ] }, "timestampMs": { "type": "string", @@ -7924,7 +9326,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "DeleteTvcDeploymentResult": { "type": "object", @@ -7934,7 +9341,9 @@ "description": "The unique identifier of the deleted TVC deployment." } }, - "required": ["deploymentId"] + "required": [ + "deploymentId" + ] }, "DeleteUserTagsIntent": { "type": "object", @@ -7947,14 +9356,18 @@ "description": "A list of User Tag IDs." } }, - "required": ["userTagIds"] + "required": [ + "userTagIds" + ] }, "DeleteUserTagsRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_DELETE_USER_TAGS"] + "enum": [ + "ACTIVITY_TYPE_DELETE_USER_TAGS" + ] }, "timestampMs": { "type": "string", @@ -7972,7 +9385,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "DeleteUserTagsResult": { "type": "object", @@ -7992,7 +9410,10 @@ "description": "A list of User IDs." } }, - "required": ["userTagIds", "userIds"] + "required": [ + "userTagIds", + "userIds" + ] }, "DeleteUsersIntent": { "type": "object", @@ -8005,14 +9426,18 @@ "description": "A list of User IDs." } }, - "required": ["userIds"] + "required": [ + "userIds" + ] }, "DeleteUsersRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_DELETE_USERS"] + "enum": [ + "ACTIVITY_TYPE_DELETE_USERS" + ] }, "timestampMs": { "type": "string", @@ -8030,7 +9455,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "DeleteUsersResult": { "type": "object", @@ -8043,7 +9473,9 @@ "description": "A list of User IDs." } }, - "required": ["userIds"] + "required": [ + "userIds" + ] }, "DeleteWalletAccountsIntent": { "type": "object", @@ -8061,14 +9493,18 @@ "description": "Optional parameter for deleting the wallet accounts, even if any have not been previously exported. If they have been exported, this field is ignored." } }, - "required": ["walletAccountIds"] + "required": [ + "walletAccountIds" + ] }, "DeleteWalletAccountsRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_DELETE_WALLET_ACCOUNTS"] + "enum": [ + "ACTIVITY_TYPE_DELETE_WALLET_ACCOUNTS" + ] }, "timestampMs": { "type": "string", @@ -8086,7 +9522,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "DeleteWalletAccountsResult": { "type": "object", @@ -8099,7 +9540,9 @@ "description": "A list of wallet account unique identifiers that were removed" } }, - "required": ["walletAccountIds"] + "required": [ + "walletAccountIds" + ] }, "DeleteWalletsIntent": { "type": "object", @@ -8117,14 +9560,18 @@ "description": "Optional parameter for deleting the wallets, even if any have not been previously exported. If they have been exported, this field is ignored." } }, - "required": ["walletIds"] + "required": [ + "walletIds" + ] }, "DeleteWalletsRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_DELETE_WALLETS"] + "enum": [ + "ACTIVITY_TYPE_DELETE_WALLETS" + ] }, "timestampMs": { "type": "string", @@ -8142,7 +9589,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "DeleteWalletsResult": { "type": "object", @@ -8155,7 +9607,9 @@ "description": "A list of wallet unique identifiers that were removed" } }, - "required": ["walletIds"] + "required": [ + "walletIds" + ] }, "DeleteWebhookEndpointIntent": { "type": "object", @@ -8165,14 +9619,451 @@ "description": "Unique identifier of the webhook endpoint to delete." } }, - "required": ["endpointId"] + "required": [ + "endpointId" + ] + }, + "DeleteWebhookEndpointRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_DELETE_WEBHOOK_ENDPOINT" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/DeleteWebhookEndpointIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "DeleteWebhookEndpointResult": { + "type": "object", + "properties": { + "endpointId": { + "type": "string", + "description": "Unique identifier of the deleted webhook endpoint." + } + }, + "required": [ + "endpointId" + ] + }, + "DeploymentStatus": { + "type": "object", + "properties": { + "deploymentId": { + "type": "string", + "description": "Unique identifier for this deployment (corresponds to k8s deployment label)" + }, + "readyReplicas": { + "type": "integer", + "format": "int32", + "description": "Number of ready replicas" + }, + "desiredReplicas": { + "type": "integer", + "format": "int32", + "description": "Desired number of replicas" + }, + "lastUpdatedTime": { + "$ref": "#/definitions/external.data.v1.Timestamp", + "description": "Last time this deployment was updated" + } + }, + "required": [ + "deploymentId", + "readyReplicas", + "desiredReplicas", + "lastUpdatedTime" + ] + }, + "DisableAuthProxyIntent": { + "type": "object" + }, + "DisableAuthProxyResult": { + "type": "object" + }, + "DisablePrivateKeyIntent": { + "type": "object", + "properties": { + "privateKeyId": { + "type": "string", + "description": "Unique identifier for a given Private Key." + } + }, + "required": [ + "privateKeyId" + ] + }, + "DisablePrivateKeyResult": { + "type": "object", + "properties": { + "privateKeyId": { + "type": "string", + "description": "Unique identifier for a given Private Key." + } + }, + "required": [ + "privateKeyId" + ] + }, + "EarnDeployWrapperIntent": { + "type": "object", + "properties": { + "vaultAddress": { + "type": "string", + "description": "Address of the underlying yield vault to wrap (from the ListEarnVaults catalog)." + }, + "chainCaip2": { + "type": "string", + "enum": [ + "eip155:1", + "eip155:8453", + "eip155:42161", + "eip155:137", + "eip155:56", + "eip155:4217" + ], + "description": "CAIP-2 chain ID the vault lives on (e.g., 'eip155:8453' for Base)." + }, + "clientFeeBps": { + "type": "string", + "description": "Your performance fee on gross yield, in basis points (e.g., '2000' for 20%). Your fee plus Turnkey's fee cannot exceed 50% of yield." + }, + "clientFeeWallet": { + "type": "string", + "description": "The wallet address that receives the client's fee payouts on-chain. Must be a Turnkey-managed wallet address." + } + }, + "required": [ + "vaultAddress", + "chainCaip2", + "clientFeeBps", + "clientFeeWallet" + ] + }, + "EarnDeployWrapperRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_EARN_DEPLOY_WRAPPER" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/EarnDeployWrapperIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "EarnDeployWrapperResult": { + "type": "object", + "properties": { + "wrapperAddress": { + "type": "string", + "description": "Address of the deployed fee wrapper (the deposit target)." + }, + "splitterAddress": { + "type": "string", + "description": "Address of the deployed fee splitter (PaymentSplitter for Morpho, RevenueSplitterOwner for Aave)." + }, + "deployRequestId": { + "type": "string", + "description": "Identifier to poll deploy status." + } + }, + "required": [ + "wrapperAddress", + "splitterAddress", + "deployRequestId" + ] + }, + "EarnDepositIntent": { + "type": "object", + "properties": { + "wrapperAddress": { + "type": "string", + "description": "Address of the deployed Earn wrapper to deposit into, from ListEarnVaults/ListEarnPositions. Must be one of the org's deployed wrappers." + }, + "signWith": { + "type": "string", + "description": "A Wallet account address or Private Key address to deposit from and sign with. Must be an on-chain address; Private Key identifiers are not supported." + }, + "assets": { + "type": "string", + "description": "Amount of the underlying asset to deposit, in raw on-chain units (e.g., '1000000' for 1 USDC at 6 decimals)." + }, + "chainCaip2": { + "type": "string", + "enum": [ + "eip155:1", + "eip155:8453", + "eip155:42161", + "eip155:137", + "eip155:56", + "eip155:4217" + ], + "description": "CAIP-2 chain ID the vault lives on (e.g., 'eip155:8453' for Base)." + }, + "sponsor": { + "type": "boolean", + "x-nullable": true, + "description": "Whether to sponsor this transaction via Gas Station." + } + }, + "required": [ + "wrapperAddress", + "signWith", + "assets", + "chainCaip2" + ] + }, + "EarnDepositRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_EARN_DEPOSIT" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/EarnDepositIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "EarnDepositResult": { + "type": "object", + "properties": { + "depositRequestId": { + "type": "string", + "description": "Identifier to poll deposit status and tx hash via GetEarnDepositStatus." + } + }, + "required": [ + "depositRequestId" + ] + }, + "EarnEnabledVault": { + "type": "object", + "properties": { + "vaultAddress": { + "type": "string", + "description": "Address of the underlying yield vault." + }, + "wrapperAddress": { + "type": "string", + "description": "Address of the deployed fee wrapper (the deposit target)." + }, + "provider": { + "$ref": "#/definitions/EarnProvider", + "description": "Yield provider for the vault." + }, + "caip19": { + "type": "string", + "description": "CAIP-19 asset ID of the vault's underlying asset (e.g. 'eip155:8453/erc20:0x833589...'); the chain is encoded in the identifier." + }, + "apyPct": { + "type": "string", + "description": "Gross annual percentage yield, expressed as a decimal fraction (before Turnkey and client fees)." + }, + "totalDeposited": { + "type": "string", + "description": "Total deposited through this wrapper (wrapper TVL), in raw on-chain units of the underlying asset." + }, + "display": { + "$ref": "#/definitions/EarnValueDisplay", + "description": "Normalized total-deposited values for display only (usd + crypto). Do not do arithmetic with these; use total_deposited instead." + }, + "netApyPct": { + "type": "string", + "description": "Annual percentage yield net of the Turnkey and client performance fees, expressed as a decimal fraction." + }, + "clientFeeBps": { + "type": "string", + "description": "Client performance fee taken on yield, in basis points. Currently org-wide; moving to a per-vault setting." + }, + "depositsDisabled": { + "type": "boolean", + "description": "When true, deposits to this wrapper are rejected; withdrawals are unaffected. Toggled via EarnSetWrapperState." + }, + "name": { + "type": "string", + "description": "Human-readable vault name from the provider (e.g. 'Steakhouse Prime USDC' for Morpho; the reserve symbol for Aave)." + }, + "curator": { + "type": "string", + "description": "Vault curator name(s), comma-separated when a vault has multiple. Empty for providers without curators (e.g. Aave)." + }, + "claimableClientFee": { + "type": "string", + "x-nullable": true, + "description": "The client's claimable performance fee (releasable now), in raw on-chain units of the underlying asset (the caip19 asset). Turnkey's fee is excluded. Only returned to the parent org; unset when a sub-org queries." + }, + "claimableClientFeeDisplay": { + "$ref": "#/definitions/EarnValueDisplay", + "description": "Normalized claimable_client_fee for display only (usd + crypto). Do not do arithmetic with these; use claimable_client_fee. Unset when a sub-org queries." + } + } + }, + "EarnPosition": { + "type": "object", + "properties": { + "vaultAddress": { + "type": "string", + "description": "Address of the underlying yield vault." + }, + "wrapperAddress": { + "type": "string", + "description": "Address of the fee wrapper holding the position." + }, + "provider": { + "$ref": "#/definitions/EarnProvider", + "description": "Yield provider for the vault." + }, + "caip19": { + "type": "string", + "description": "CAIP-19 asset ID of the vault's underlying asset (e.g. 'eip155:8453/erc20:0x833589...'); the chain is encoded in the identifier." + }, + "currentValue": { + "type": "string", + "description": "Current value of the position in the underlying asset, in raw on-chain units (already net of the wrapper fee)." + }, + "totalDeposited": { + "type": "string", + "description": "Lifetime total deposited into this position, in raw on-chain units." + }, + "totalWithdrawn": { + "type": "string", + "description": "Lifetime total withdrawn from this position, in raw on-chain units." + }, + "display": { + "$ref": "#/definitions/EarnPositionDisplay", + "description": "USD + crypto renderings for display only. Do not do arithmetic with these." + }, + "depositsDisabled": { + "type": "boolean", + "description": "When true, deposits to this wrapper are rejected; withdrawals are unaffected. Toggled via EarnSetWrapperState." + } + } + }, + "EarnPositionDisplay": { + "type": "object", + "properties": { + "currentValueUsd": { + "type": "string", + "description": "Current value in USD, for display only." + }, + "totalDepositedUsd": { + "type": "string", + "description": "Total deposited in USD, for display only." + }, + "totalWithdrawnUsd": { + "type": "string", + "description": "Total withdrawn in USD, for display only." + }, + "currentValueCrypto": { + "type": "string", + "description": "Current value in the asset's own units, for display only." + }, + "totalDepositedCrypto": { + "type": "string", + "description": "Total deposited in the asset's own units, for display only." + }, + "totalWithdrawnCrypto": { + "type": "string", + "description": "Total withdrawn in the asset's own units, for display only." + } + } + }, + "EarnProvider": { + "type": "string", + "enum": [ + "EARN_PROVIDER_MORPHO", + "EARN_PROVIDER_AAVE" + ] + }, + "EarnSetWrapperStateIntent": { + "type": "object", + "properties": { + "wrapperAddress": { + "type": "string", + "description": "Address of the deployed Earn wrapper to update, from ListEarnVaults/ListEarnPositions. Must be one of the org's deployed wrappers." + }, + "depositsDisabled": { + "type": "boolean", + "x-nullable": true, + "description": "When true, deposits to this wrapper are rejected; withdrawals are unaffected. Set to false to re-enable deposits." + } + }, + "required": [ + "wrapperAddress", + "depositsDisabled" + ] }, - "DeleteWebhookEndpointRequest": { + "EarnSetWrapperStateRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_DELETE_WEBHOOK_ENDPOINT"] + "enum": [ + "ACTIVITY_TYPE_EARN_SET_WRAPPER_STATE" + ] }, "timestampMs": { "type": "string", @@ -8183,83 +10074,181 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/definitions/DeleteWebhookEndpointIntent" + "$ref": "#/definitions/EarnSetWrapperStateIntent" }, "generateAppProofs": { "type": "boolean", "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, - "DeleteWebhookEndpointResult": { + "EarnSetWrapperStateResult": { "type": "object", "properties": { - "endpointId": { + "wrapperAddress": { "type": "string", - "description": "Unique identifier of the deleted webhook endpoint." + "description": "Address of the updated Earn wrapper." + }, + "depositsDisabled": { + "type": "boolean", + "description": "The wrapper's deposit state after this activity." } }, - "required": ["endpointId"] + "required": [ + "wrapperAddress", + "depositsDisabled" + ] }, - "DeploymentStatus": { + "EarnValueDisplay": { "type": "object", "properties": { - "deploymentId": { + "usd": { "type": "string", - "description": "Unique identifier for this deployment (corresponds to k8s deployment label)" + "description": "USD value, for display only." }, - "readyReplicas": { - "type": "integer", - "format": "int32", - "description": "Number of ready replicas" + "crypto": { + "type": "string", + "description": "Normalized amount in the asset's own units, for display only." + } + } + }, + "EarnVault": { + "type": "object", + "properties": { + "vaultAddress": { + "type": "string", + "description": "Address of the underlying yield vault." }, - "desiredReplicas": { - "type": "integer", - "format": "int32", - "description": "Desired number of replicas" + "provider": { + "$ref": "#/definitions/EarnProvider", + "description": "Yield provider for the vault." }, - "lastUpdatedTime": { - "$ref": "#/definitions/external.data.v1.Timestamp", - "description": "Last time this deployment was updated" + "caip19": { + "type": "string", + "description": "CAIP-19 asset ID of the vault's underlying asset (e.g. 'eip155:8453/erc20:0x833589...'); the chain is encoded in the identifier." + }, + "tvl": { + "type": "string", + "description": "Total value locked in the vault, in raw on-chain units of the underlying asset. The catalog is sorted by the USD value of this." + }, + "apyPct": { + "type": "string", + "description": "Current annual percentage yield, expressed as a decimal fraction (e.g., '0.0812' for 8.12%)." + }, + "enabled": { + "type": "boolean", + "description": "Whether the organization has enabled this vault." + }, + "display": { + "$ref": "#/definitions/EarnValueDisplay", + "description": "Normalized TVL values for display purposes only (usd + crypto). Do not do arithmetic with these; use tvl instead." + }, + "name": { + "type": "string", + "description": "Human-readable vault name from the provider (e.g. 'Steakhouse Prime USDC' for Morpho; the reserve symbol for Aave)." + }, + "curator": { + "type": "string", + "description": "Vault curator name(s), comma-separated when a vault has multiple. Empty for providers without curators (e.g. Aave)." + } + } + }, + "EarnWithdrawIntent": { + "type": "object", + "properties": { + "wrapperAddress": { + "type": "string", + "description": "Address of the deployed Earn wrapper holding the position to withdraw from, from ListEarnPositions. Must be one of the org's deployed wrappers." + }, + "signWith": { + "type": "string", + "description": "A Wallet account address or Private Key address to withdraw to and sign with. Must be an on-chain address; Private Key identifiers are not supported." + }, + "chainCaip2": { + "type": "string", + "enum": [ + "eip155:1", + "eip155:8453", + "eip155:42161", + "eip155:137", + "eip155:56", + "eip155:4217" + ], + "description": "CAIP-2 chain ID the vault lives on (e.g., 'eip155:8453' for Base)." + }, + "sponsor": { + "type": "boolean", + "x-nullable": true, + "description": "Whether to sponsor this transaction via Gas Station." + }, + "amountValue": { + "type": "string", + "description": "The amount of the underlying asset to withdraw, in raw on-chain units. Pass 'MAX' to withdraw the entire position." } }, "required": [ - "deploymentId", - "readyReplicas", - "desiredReplicas", - "lastUpdatedTime" + "wrapperAddress", + "signWith", + "chainCaip2", + "amountValue" ] }, - "DisableAuthProxyIntent": { - "type": "object" - }, - "DisableAuthProxyResult": { - "type": "object" - }, - "DisablePrivateKeyIntent": { + "EarnWithdrawRequest": { "type": "object", "properties": { - "privateKeyId": { + "type": { "type": "string", - "description": "Unique identifier for a given Private Key." + "enum": [ + "ACTIVITY_TYPE_EARN_WITHDRAW" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/EarnWithdrawIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true } }, - "required": ["privateKeyId"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, - "DisablePrivateKeyResult": { + "EarnWithdrawResult": { "type": "object", "properties": { - "privateKeyId": { + "withdrawRequestId": { "type": "string", - "description": "Unique identifier for a given Private Key." + "description": "Identifier to poll withdrawal status and tx hash via GetEarnWithdrawStatus." } }, - "required": ["privateKeyId"] + "required": [ + "withdrawRequestId" + ] }, "Effect": { "type": "string", - "enum": ["EFFECT_ALLOW", "EFFECT_DENY"] + "enum": [ + "EFFECT_ALLOW", + "EFFECT_DENY" + ] }, "EmailAuthCustomizationParams": { "type": "object", @@ -8289,7 +10278,9 @@ "description": "Unique identifier for a given Email Template. If not specified, the default is the most recent Email Template." } }, - "required": ["appName"] + "required": [ + "appName" + ] }, "EmailAuthIntent": { "type": "object", @@ -8305,7 +10296,7 @@ "apiKeyName": { "type": "string", "x-nullable": true, - "description": "Optional human-readable name for an API Key. If none provided, default to Email Auth - \u003cTimestamp\u003e" + "description": "Optional human-readable name for an API Key. If none provided, default to Email Auth - " }, "expirationSeconds": { "type": "string", @@ -8338,7 +10329,10 @@ "description": "Optional custom email address to use as reply-to" } }, - "required": ["email", "targetPublicKey"] + "required": [ + "email", + "targetPublicKey" + ] }, "EmailAuthIntentV2": { "type": "object", @@ -8354,7 +10348,7 @@ "apiKeyName": { "type": "string", "x-nullable": true, - "description": "Optional human-readable name for an API Key. If none provided, default to Email Auth - \u003cTimestamp\u003e" + "description": "Optional human-readable name for an API Key. If none provided, default to Email Auth - " }, "expirationSeconds": { "type": "string", @@ -8387,7 +10381,10 @@ "description": "Optional custom email address to use as reply-to" } }, - "required": ["email", "targetPublicKey"] + "required": [ + "email", + "targetPublicKey" + ] }, "EmailAuthIntentV3": { "type": "object", @@ -8403,7 +10400,7 @@ "apiKeyName": { "type": "string", "x-nullable": true, - "description": "Optional human-readable name for an API Key. If none provided, default to Email Auth - \u003cTimestamp\u003e" + "description": "Optional human-readable name for an API Key. If none provided, default to Email Auth - " }, "expirationSeconds": { "type": "string", @@ -8435,14 +10432,20 @@ "description": "Optional custom email address to use as reply-to" } }, - "required": ["email", "targetPublicKey", "emailCustomization"] + "required": [ + "email", + "targetPublicKey", + "emailCustomization" + ] }, "EmailAuthRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_EMAIL_AUTH_V3"] + "enum": [ + "ACTIVITY_TYPE_EMAIL_AUTH_V3" + ] }, "timestampMs": { "type": "string", @@ -8460,7 +10463,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "EmailAuthResult": { "type": "object", @@ -8474,7 +10482,10 @@ "description": "Unique identifier for the created API key." } }, - "required": ["userId", "apiKeyId"] + "required": [ + "userId", + "apiKeyId" + ] }, "EmailCustomizationParams": { "type": "object", @@ -8542,7 +10553,9 @@ "description": "A User ID with permission to initiate authentication." } }, - "required": ["userId"] + "required": [ + "userId" + ] }, "EthCallParams": { "type": "object", @@ -8562,7 +10575,9 @@ "description": "Hex-encoded call data for contract interactions." } }, - "required": ["to"] + "required": [ + "to" + ] }, "EthFailureDetails": { "type": "object", @@ -8607,7 +10622,10 @@ "description": "CAIP-2 chain ID (e.g., 'eip155:1' for Ethereum mainnet)." } }, - "required": ["signedTransaction", "caip2"] + "required": [ + "signedTransaction", + "caip2" + ] }, "EthSendRawTransactionResult": { "type": "object", @@ -8617,7 +10635,9 @@ "description": "The transaction hash of the sent transaction" } }, - "required": ["transactionHash"] + "required": [ + "transactionHash" + ] }, "EthSendTransactionIntent": { "type": "object", @@ -8698,7 +10718,11 @@ "description": "The gas station delegate contract nonce. Only used when sponsor=true. Include this if you want maximal security posture." } }, - "required": ["from", "caip2", "to"] + "required": [ + "from", + "caip2", + "to" + ] }, "EthSendTransactionIntentV2": { "type": "object", @@ -8773,14 +10797,20 @@ "description": "Ordered list of calls to execute. Must contain between 1 and 50 entries. A single entry with sponsor=false uses EIP-1559; multiple entries use EIP-7702 batch execution via Gas Station." } }, - "required": ["from", "caip2", "calls"] + "required": [ + "from", + "caip2", + "calls" + ] }, "EthSendTransactionRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_ETH_SEND_TRANSACTION_V2"] + "enum": [ + "ACTIVITY_TYPE_ETH_SEND_TRANSACTION_V2" + ] }, "timestampMs": { "type": "string", @@ -8798,7 +10828,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "EthSendTransactionResult": { "type": "object", @@ -8808,7 +10843,9 @@ "description": "The send_transaction_status ID associated with the transaction submission" } }, - "required": ["sendTransactionStatusId"] + "required": [ + "sendTransactionStatusId" + ] }, "EthSendTransactionResultV2": { "type": "object", @@ -8818,7 +10855,9 @@ "description": "The send_transaction_status ID associated with the transaction submission" } }, - "required": ["sendTransactionStatusId"] + "required": [ + "sendTransactionStatusId" + ] }, "EthSendTransactionStatus": { "type": "object", @@ -8830,6 +10869,75 @@ } } }, + "ExecuteSwapIntent": { + "type": "object", + "properties": { + "inputToken": { + "type": "string", + "description": "CAIP-19 asset ID for the input asset. The chain is derived from this value." + }, + "outputToken": { + "type": "string", + "description": "CAIP-19 asset ID for the output asset. May be on a different chain than `input_token` for cross-chain swaps." + }, + "inputAmount": { + "type": "string", + "description": "Base-unit amount of the input asset." + }, + "walletAccount": { + "type": "string", + "description": "Wallet account address to sign and submit the swap transaction from. Cross-wallet swaps are not supported." + }, + "sponsor": { + "type": "boolean", + "x-nullable": true, + "description": "Whether to sponsor the resulting swap transaction via Gas Station when supported by the chain." + }, + "slippage": { + "type": "string", + "x-nullable": true, + "description": "Maximum allowed slippage in basis points." + }, + "provider": { + "type": "string", + "x-nullable": true, + "description": "Swap provider to execute with, as returned by get_swap_quote. When omitted, execution uses the default provider." + }, + "minOutputAmount": { + "type": "string", + "description": "Minimum acceptable base-unit amount of the output asset. Execution fails if the swap provider's quoted minimum output falls below this floor at execution time." + } + }, + "required": [ + "inputToken", + "outputToken", + "inputAmount", + "walletAccount", + "minOutputAmount" + ] + }, + "ExecuteSwapResult": { + "type": "object", + "properties": { + "sendTransactionStatusId": { + "type": "string", + "description": "The send_transaction_status ID associated with the swap transaction submission" + }, + "provider": { + "type": "string", + "x-nullable": true, + "description": "Swap provider used to build the transaction." + }, + "quoteId": { + "type": "string", + "x-nullable": true, + "description": "Quote identifier used for execution, if any." + } + }, + "required": [ + "sendTransactionStatusId" + ] + }, "ExportPrivateKeyIntent": { "type": "object", "properties": { @@ -8842,14 +10950,19 @@ "description": "Client-side public key generated by the user, to which the export bundle will be encrypted." } }, - "required": ["privateKeyId", "targetPublicKey"] + "required": [ + "privateKeyId", + "targetPublicKey" + ] }, "ExportPrivateKeyRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_EXPORT_PRIVATE_KEY"] + "enum": [ + "ACTIVITY_TYPE_EXPORT_PRIVATE_KEY" + ] }, "timestampMs": { "type": "string", @@ -8867,7 +10980,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "ExportPrivateKeyResult": { "type": "object", @@ -8881,7 +10999,10 @@ "description": "Export bundle containing a private key encrypted to the client's target public key." } }, - "required": ["privateKeyId", "exportBundle"] + "required": [ + "privateKeyId", + "exportBundle" + ] }, "ExportWalletAccountIntent": { "type": "object", @@ -8895,14 +11016,19 @@ "description": "Client-side public key generated by the user, to which the export bundle will be encrypted." } }, - "required": ["address", "targetPublicKey"] + "required": [ + "address", + "targetPublicKey" + ] }, "ExportWalletAccountRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_EXPORT_WALLET_ACCOUNT"] + "enum": [ + "ACTIVITY_TYPE_EXPORT_WALLET_ACCOUNT" + ] }, "timestampMs": { "type": "string", @@ -8920,7 +11046,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "ExportWalletAccountResult": { "type": "object", @@ -8934,7 +11065,10 @@ "description": "Export bundle containing a private key encrypted by the client's target public key." } }, - "required": ["address", "exportBundle"] + "required": [ + "address", + "exportBundle" + ] }, "ExportWalletIntent": { "type": "object", @@ -8953,14 +11087,19 @@ "description": "The language of the mnemonic to export. Defaults to English." } }, - "required": ["walletId", "targetPublicKey"] + "required": [ + "walletId", + "targetPublicKey" + ] }, "ExportWalletRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_EXPORT_WALLET"] + "enum": [ + "ACTIVITY_TYPE_EXPORT_WALLET" + ] }, "timestampMs": { "type": "string", @@ -8978,7 +11117,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "ExportWalletResult": { "type": "object", @@ -8992,7 +11136,10 @@ "description": "Export bundle containing a wallet mnemonic + optional newline passphrase encrypted by the client's target public key." } }, - "required": ["walletId", "exportBundle"] + "required": [ + "walletId", + "exportBundle" + ] }, "Feature": { "type": "object", @@ -9017,7 +11164,9 @@ "FEATURE_NAME_SMS_AUTH", "FEATURE_NAME_OTP_EMAIL_AUTH", "FEATURE_NAME_AUTH_PROXY", - "FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED" + "FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED", + "FEATURE_NAME_SWAP_CONFIG", + "FEATURE_NAME_EARN_CONFIG" ] }, "FiatOnRampBlockchainNetwork": { @@ -9182,7 +11331,9 @@ "description": "Array of activity types filtering which activities will be listed in the response." } }, - "required": ["organizationId"] + "required": [ + "organizationId" + ] }, "GetActivitiesResponse": { "type": "object", @@ -9196,7 +11347,9 @@ "description": "A list of activities." } }, - "required": ["activities"] + "required": [ + "activities" + ] }, "GetActivityRequest": { "type": "object", @@ -9210,7 +11363,10 @@ "description": "Unique identifier for a given activity object." } }, - "required": ["organizationId", "activityId"] + "required": [ + "organizationId", + "activityId" + ] }, "GetApiKeyRequest": { "type": "object", @@ -9224,7 +11380,10 @@ "description": "Unique identifier for a given API key." } }, - "required": ["organizationId", "apiKeyId"] + "required": [ + "organizationId", + "apiKeyId" + ] }, "GetApiKeyResponse": { "type": "object", @@ -9234,7 +11393,9 @@ "description": "An API key." } }, - "required": ["apiKey"] + "required": [ + "apiKey" + ] }, "GetApiKeysRequest": { "type": "object", @@ -9249,7 +11410,9 @@ "description": "Unique identifier for a given user." } }, - "required": ["organizationId"] + "required": [ + "organizationId" + ] }, "GetApiKeysResponse": { "type": "object", @@ -9263,7 +11426,9 @@ "description": "A list of API keys." } }, - "required": ["apiKeys"] + "required": [ + "apiKeys" + ] }, "GetAppProofsRequest": { "type": "object", @@ -9277,7 +11442,10 @@ "description": "Unique identifier for a given activity." } }, - "required": ["organizationId", "activityId"] + "required": [ + "organizationId", + "activityId" + ] }, "GetAppProofsResponse": { "type": "object", @@ -9290,7 +11458,9 @@ } } }, - "required": ["appProofs"] + "required": [ + "appProofs" + ] }, "GetAppStatusRequest": { "type": "object", @@ -9304,7 +11474,10 @@ "description": "Unique identifier for a given TVC App." } }, - "required": ["organizationId", "appId"] + "required": [ + "organizationId", + "appId" + ] }, "GetAppStatusResponse": { "type": "object", @@ -9314,7 +11487,9 @@ "description": "Live runtime status for the TVC App" } }, - "required": ["appStatus"] + "required": [ + "appStatus" + ] }, "GetAuthenticatorRequest": { "type": "object", @@ -9328,7 +11503,10 @@ "description": "Unique identifier for a given authenticator." } }, - "required": ["organizationId", "authenticatorId"] + "required": [ + "organizationId", + "authenticatorId" + ] }, "GetAuthenticatorResponse": { "type": "object", @@ -9338,7 +11516,9 @@ "description": "An authenticator." } }, - "required": ["authenticator"] + "required": [ + "authenticator" + ] }, "GetAuthenticatorsRequest": { "type": "object", @@ -9352,7 +11532,10 @@ "description": "Unique identifier for a given user." } }, - "required": ["organizationId", "userId"] + "required": [ + "organizationId", + "userId" + ] }, "GetAuthenticatorsResponse": { "type": "object", @@ -9366,7 +11549,9 @@ "description": "A list of authenticators." } }, - "required": ["authenticators"] + "required": [ + "authenticators" + ] }, "GetBootProofRequest": { "type": "object", @@ -9380,7 +11565,142 @@ "description": "Hex encoded ephemeral public key." } }, - "required": ["organizationId", "ephemeralKey"] + "required": [ + "organizationId", + "ephemeralKey" + ] + }, + "GetEarnDeployStatusRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "deployRequestId": { + "type": "string", + "description": "The deploy_request_id returned by EarnDeployWrapper." + } + }, + "required": [ + "organizationId", + "deployRequestId" + ] + }, + "GetEarnDeployStatusResponse": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "PENDING", + "COMPLETED", + "FAILED" + ], + "description": "Status of the wrapper deployment." + }, + "deployTxHash": { + "type": "string", + "x-nullable": true, + "description": "Transaction hash of the deployment, once available." + }, + "error": { + "type": "string", + "x-nullable": true, + "description": "Reason the deployment transaction failed, when status is FAILED." + } + }, + "required": [ + "status" + ] + }, + "GetEarnDepositStatusRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "depositRequestId": { + "type": "string", + "description": "The deposit_request_id returned by EarnDeposit." + } + }, + "required": [ + "organizationId", + "depositRequestId" + ] + }, + "GetEarnDepositStatusResponse": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "PENDING", + "COMPLETED", + "FAILED" + ], + "description": "Status of the deposit." + }, + "depositTxHash": { + "type": "string", + "x-nullable": true, + "description": "Transaction hash of the deposit, once available." + }, + "error": { + "type": "string", + "x-nullable": true, + "description": "Reason the deposit transaction failed, when status is FAILED." + } + }, + "required": [ + "status" + ] + }, + "GetEarnWithdrawStatusRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "withdrawRequestId": { + "type": "string", + "description": "The withdraw_request_id returned by EarnWithdraw." + } + }, + "required": [ + "organizationId", + "withdrawRequestId" + ] + }, + "GetEarnWithdrawStatusResponse": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "PENDING", + "COMPLETED", + "FAILED" + ], + "description": "Status of the withdrawal." + }, + "withdrawTxHash": { + "type": "string", + "x-nullable": true, + "description": "Transaction hash of the withdrawal, once available." + }, + "error": { + "type": "string", + "x-nullable": true, + "description": "Reason the withdrawal transaction failed, when status is FAILED." + } + }, + "required": [ + "status" + ] }, "GetGasUsageRequest": { "type": "object", @@ -9390,7 +11710,9 @@ "description": "Unique identifier for a given Organization." } }, - "required": ["organizationId"] + "required": [ + "organizationId" + ] }, "GetGasUsageResponse": { "type": "object", @@ -9409,7 +11731,11 @@ "description": "The total gas usage (in USD) of all sponsored transactions processed over the last `window_duration_minutes`" } }, - "required": ["windowDurationMinutes", "windowLimitUsd", "usageUsd"] + "required": [ + "windowDurationMinutes", + "windowLimitUsd", + "usageUsd" + ] }, "GetIpAllowlistRequest": { "type": "object", @@ -9424,7 +11750,9 @@ "description": "If provided, return only the allowlist for this specific API key." } }, - "required": ["organizationId"] + "required": [ + "organizationId" + ] }, "GetIpAllowlistResponse": { "type": "object", @@ -9433,7 +11761,9 @@ "$ref": "#/definitions/IpAllowlist" } }, - "required": ["allowlist"] + "required": [ + "allowlist" + ] }, "GetLatestBootProofRequest": { "type": "object", @@ -9447,7 +11777,10 @@ "description": "Name of enclave app." } }, - "required": ["organizationId", "appName"] + "required": [ + "organizationId", + "appName" + ] }, "GetMfaPoliciesRequest": { "type": "object", @@ -9461,7 +11794,10 @@ "description": "Unique identifier for a given user." } }, - "required": ["organizationId", "userId"] + "required": [ + "organizationId", + "userId" + ] }, "GetMfaPoliciesResponse": { "type": "object", @@ -9475,7 +11811,9 @@ "description": "A list of multi-factor authentication policies for a user." } }, - "required": ["mfaPolicies"] + "required": [ + "mfaPolicies" + ] }, "GetMfaPolicyRequest": { "type": "object", @@ -9493,7 +11831,11 @@ "description": "Unique identifier for a given MFA policy." } }, - "required": ["organizationId", "userId", "mfaPolicyId"] + "required": [ + "organizationId", + "userId", + "mfaPolicyId" + ] }, "GetMfaPolicyResponse": { "type": "object", @@ -9503,7 +11845,9 @@ "description": "Multi-factor authentication policy for a user." } }, - "required": ["mfaPolicy"] + "required": [ + "mfaPolicy" + ] }, "GetMfaStatusRequest": { "type": "object", @@ -9522,7 +11866,10 @@ "description": "Optional user ID to filter MFA status for a specific user." } }, - "required": ["organizationId", "activityId"] + "required": [ + "organizationId", + "activityId" + ] }, "GetMfaStatusResponse": { "type": "object", @@ -9536,7 +11883,9 @@ "description": "A list of MFA statuses for the activity's votes." } }, - "required": ["mfaStatuses"] + "required": [ + "mfaStatuses" + ] }, "GetNoncesRequest": { "type": "object", @@ -9580,7 +11929,11 @@ "description": "Whether to fetch the gas station nonce used for sponsored transactions." } }, - "required": ["organizationId", "address", "caip2"] + "required": [ + "organizationId", + "address", + "caip2" + ] }, "GetNoncesResponse": { "type": "object", @@ -9611,7 +11964,10 @@ "description": "Unique identifier for a given OAuth 2.0 Credential." } }, - "required": ["organizationId", "oauth2CredentialId"] + "required": [ + "organizationId", + "oauth2CredentialId" + ] }, "GetOauth2CredentialResponse": { "type": "object", @@ -9620,7 +11976,9 @@ "$ref": "#/definitions/Oauth2Credential" } }, - "required": ["oauth2Credential"] + "required": [ + "oauth2Credential" + ] }, "GetOauthProvidersRequest": { "type": "object", @@ -9635,7 +11993,9 @@ "description": "Unique identifier for a given user." } }, - "required": ["organizationId"] + "required": [ + "organizationId" + ] }, "GetOauthProvidersResponse": { "type": "object", @@ -9649,7 +12009,9 @@ "description": "A list of Oauth providers." } }, - "required": ["oauthProviders"] + "required": [ + "oauthProviders" + ] }, "GetOnRampTransactionStatusRequest": { "type": "object", @@ -9668,7 +12030,10 @@ "description": "Optional flag to specify if the transaction status should be refreshed from the fiat on ramp provider. Default = false." } }, - "required": ["organizationId", "transactionId"] + "required": [ + "organizationId", + "transactionId" + ] }, "GetOnRampTransactionStatusResponse": { "type": "object", @@ -9678,7 +12043,9 @@ "description": "The status of the fiat on ramp transaction." } }, - "required": ["transactionStatus"] + "required": [ + "transactionStatus" + ] }, "GetOrganizationConfigsRequest": { "type": "object", @@ -9688,7 +12055,9 @@ "description": "Unique identifier for a given organization." } }, - "required": ["organizationId"] + "required": [ + "organizationId" + ] }, "GetOrganizationConfigsResponse": { "type": "object", @@ -9698,7 +12067,9 @@ "description": "Organization configs including quorum settings and organization features." } }, - "required": ["configs"] + "required": [ + "configs" + ] }, "GetPoliciesRequest": { "type": "object", @@ -9708,7 +12079,9 @@ "description": "Unique identifier for a given organization." } }, - "required": ["organizationId"] + "required": [ + "organizationId" + ] }, "GetPoliciesResponse": { "type": "object", @@ -9722,7 +12095,9 @@ "description": "A list of policies." } }, - "required": ["policies"] + "required": [ + "policies" + ] }, "GetPolicyEvaluationsRequest": { "type": "object", @@ -9736,7 +12111,10 @@ "description": "Unique identifier for a given activity." } }, - "required": ["organizationId", "activityId"] + "required": [ + "organizationId", + "activityId" + ] }, "GetPolicyEvaluationsResponse": { "type": "object", @@ -9749,7 +12127,9 @@ } } }, - "required": ["policyEvaluations"] + "required": [ + "policyEvaluations" + ] }, "GetPolicyRequest": { "type": "object", @@ -9763,7 +12143,10 @@ "description": "Unique identifier for a given policy." } }, - "required": ["organizationId", "policyId"] + "required": [ + "organizationId", + "policyId" + ] }, "GetPolicyResponse": { "type": "object", @@ -9773,7 +12156,9 @@ "description": "Object that codifies rules defining the actions that are permissible within an organization." } }, - "required": ["policy"] + "required": [ + "policy" + ] }, "GetPrivateKeyRequest": { "type": "object", @@ -9787,7 +12172,10 @@ "description": "Unique identifier for a given private key." } }, - "required": ["organizationId", "privateKeyId"] + "required": [ + "organizationId", + "privateKeyId" + ] }, "GetPrivateKeyResponse": { "type": "object", @@ -9797,7 +12185,9 @@ "description": "Cryptographic public/private key pair that can be used for cryptocurrency needs or more generalized encryption." } }, - "required": ["privateKey"] + "required": [ + "privateKey" + ] }, "GetPrivateKeysRequest": { "type": "object", @@ -9807,7 +12197,9 @@ "description": "Unique identifier for a given organization." } }, - "required": ["organizationId"] + "required": [ + "organizationId" + ] }, "GetPrivateKeysResponse": { "type": "object", @@ -9821,7 +12213,9 @@ "description": "A list of private keys." } }, - "required": ["privateKeys"] + "required": [ + "privateKeys" + ] }, "GetSendTransactionStatusRequest": { "type": "object", @@ -9835,7 +12229,10 @@ "description": "The unique identifier of a send transaction request." } }, - "required": ["organizationId", "sendTransactionStatusId"] + "required": [ + "organizationId", + "sendTransactionStatusId" + ] }, "GetSendTransactionStatusResponse": { "type": "object", @@ -9863,7 +12260,9 @@ "description": "Structured error information including revert details, if available." } }, - "required": ["txStatus"] + "required": [ + "txStatus" + ] }, "GetSessionProfileRequest": { "type": "object", @@ -9877,7 +12276,10 @@ "description": "Unique identifier for a session profile." } }, - "required": ["organizationId", "sessionProfileId"] + "required": [ + "organizationId", + "sessionProfileId" + ] }, "GetSessionProfileResponse": { "type": "object", @@ -9887,7 +12289,9 @@ "description": "Session profile for a user, including details about the user's authenticators, Oauth providers, API keys, and MFA policies." } }, - "required": ["sessionProfile"] + "required": [ + "sessionProfile" + ] }, "GetSessionProfilesRequest": { "type": "object", @@ -9897,7 +12301,9 @@ "description": "Unique identifier for a given organization." } }, - "required": ["organizationId"] + "required": [ + "organizationId" + ] }, "GetSessionProfilesResponse": { "type": "object", @@ -9911,7 +12317,9 @@ "description": "A list of session profiles for users in the organization." } }, - "required": ["sessionProfiles"] + "required": [ + "sessionProfiles" + ] }, "GetSmartContractInterfaceRequest": { "type": "object", @@ -9925,7 +12333,10 @@ "description": "Unique identifier for a given smart contract interface." } }, - "required": ["organizationId", "smartContractInterfaceId"] + "required": [ + "organizationId", + "smartContractInterfaceId" + ] }, "GetSmartContractInterfaceResponse": { "type": "object", @@ -9935,7 +12346,9 @@ "description": "Object to be used in conjunction with policies to guard transaction signing." } }, - "required": ["smartContractInterface"] + "required": [ + "smartContractInterface" + ] }, "GetSmartContractInterfacesRequest": { "type": "object", @@ -9945,7 +12358,9 @@ "description": "Unique identifier for a given organization." } }, - "required": ["organizationId"] + "required": [ + "organizationId" + ] }, "GetSmartContractInterfacesResponse": { "type": "object", @@ -9959,7 +12374,9 @@ "description": "A list of smart contract interfaces." } }, - "required": ["smartContractInterfaces"] + "required": [ + "smartContractInterfaces" + ] }, "GetSubOrgIdsRequest": { "type": "object", @@ -9981,7 +12398,9 @@ "description": "Parameters used for cursor-based pagination." } }, - "required": ["organizationId"] + "required": [ + "organizationId" + ] }, "GetSubOrgIdsResponse": { "type": "object", @@ -9994,7 +12413,9 @@ "description": "List of unique identifiers for the matching sub-organizations." } }, - "required": ["organizationIds"] + "required": [ + "organizationIds" + ] }, "GetTvcAppDeploymentsRequest": { "type": "object", @@ -10008,7 +12429,10 @@ "description": "Unique identifier for a given TVC App." } }, - "required": ["organizationId", "appId"] + "required": [ + "organizationId", + "appId" + ] }, "GetTvcAppDeploymentsResponse": { "type": "object", @@ -10022,7 +12446,9 @@ "description": "List of deployments for this TVC App" } }, - "required": ["tvcDeployments"] + "required": [ + "tvcDeployments" + ] }, "GetTvcAppRequest": { "type": "object", @@ -10036,7 +12462,10 @@ "description": "Unique identifier for a given TVC App." } }, - "required": ["organizationId", "tvcAppId"] + "required": [ + "organizationId", + "tvcAppId" + ] }, "GetTvcAppResponse": { "type": "object", @@ -10046,7 +12475,9 @@ "description": "Details about a single TVC App" } }, - "required": ["tvcApp"] + "required": [ + "tvcApp" + ] }, "GetTvcAppsRequest": { "type": "object", @@ -10056,7 +12487,9 @@ "description": "Unique identifier for a given organization." } }, - "required": ["organizationId"] + "required": [ + "organizationId" + ] }, "GetTvcAppsResponse": { "type": "object", @@ -10070,7 +12503,9 @@ "description": "A list of TVC Apps." } }, - "required": ["tvcApps"] + "required": [ + "tvcApps" + ] }, "GetTvcDeploymentDebugLogsRequest": { "type": "object", @@ -10094,7 +12529,10 @@ "description": "Return logs newer than this many seconds ago. If unset or zero, no since-time limit is applied. Useful for clients that poll to follow logs." } }, - "required": ["organizationId", "deploymentId"] + "required": [ + "organizationId", + "deploymentId" + ] }, "GetTvcDeploymentDebugLogsResponse": { "type": "object", @@ -10108,7 +12546,9 @@ "description": "Application log entries sorted by platform timestamp." } }, - "required": ["entries"] + "required": [ + "entries" + ] }, "GetTvcDeploymentRequest": { "type": "object", @@ -10122,7 +12562,10 @@ "description": "Unique identifier for a given TVC Deployment." } }, - "required": ["organizationId", "deploymentId"] + "required": [ + "organizationId", + "deploymentId" + ] }, "GetTvcDeploymentResponse": { "type": "object", @@ -10132,7 +12575,9 @@ "description": "Details about a single TVC Deployment" } }, - "required": ["tvcDeployment"] + "required": [ + "tvcDeployment" + ] }, "GetUserRequest": { "type": "object", @@ -10146,7 +12591,10 @@ "description": "Unique identifier for a given user." } }, - "required": ["organizationId", "userId"] + "required": [ + "organizationId", + "userId" + ] }, "GetUserResponse": { "type": "object", @@ -10156,7 +12604,9 @@ "description": "Web and/or API user within your organization." } }, - "required": ["user"] + "required": [ + "user" + ] }, "GetUsersRequest": { "type": "object", @@ -10166,7 +12616,9 @@ "description": "Unique identifier for a given organization." } }, - "required": ["organizationId"] + "required": [ + "organizationId" + ] }, "GetUsersResponse": { "type": "object", @@ -10180,7 +12632,9 @@ "description": "A list of users." } }, - "required": ["users"] + "required": [ + "users" + ] }, "GetVerifiedSubOrgIdsRequest": { "type": "object", @@ -10202,7 +12656,9 @@ "description": "Parameters used for cursor-based pagination." } }, - "required": ["organizationId"] + "required": [ + "organizationId" + ] }, "GetVerifiedSubOrgIdsResponse": { "type": "object", @@ -10215,7 +12671,9 @@ "description": "List of unique identifiers for the matching sub-organizations." } }, - "required": ["organizationIds"] + "required": [ + "organizationIds" + ] }, "GetWalletAccountRequest": { "type": "object", @@ -10239,7 +12697,10 @@ "description": "Path corresponding to a wallet account." } }, - "required": ["organizationId", "walletId"] + "required": [ + "organizationId", + "walletId" + ] }, "GetWalletAccountResponse": { "type": "object", @@ -10249,7 +12710,9 @@ "description": "The resulting wallet account." } }, - "required": ["account"] + "required": [ + "account" + ] }, "GetWalletAccountsRequest": { "type": "object", @@ -10273,7 +12736,9 @@ "description": "Parameters used for cursor-based pagination." } }, - "required": ["organizationId"] + "required": [ + "organizationId" + ] }, "GetWalletAccountsResponse": { "type": "object", @@ -10287,7 +12752,9 @@ "description": "A list of accounts generated from a wallet that share a common seed." } }, - "required": ["accounts"] + "required": [ + "accounts" + ] }, "GetWalletAddressBalancesRequest": { "type": "object", @@ -10325,7 +12792,11 @@ "description": "CAIP-2 chain ID (e.g., 'eip155:1' for Ethereum mainnet or 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' for Solana mainnet). Human-readable Solana aliases ('solana:mainnet', 'solana:devnet') are also accepted and normalized to canonical CAIP-2 values." } }, - "required": ["organizationId", "address", "caip2"] + "required": [ + "organizationId", + "address", + "caip2" + ] }, "GetWalletAddressBalancesResponse": { "type": "object", @@ -10352,7 +12823,10 @@ "description": "Unique identifier for a given wallet." } }, - "required": ["organizationId", "walletId"] + "required": [ + "organizationId", + "walletId" + ] }, "GetWalletResponse": { "type": "object", @@ -10362,7 +12836,9 @@ "description": "A collection of deterministically generated cryptographic public / private key pairs that share a common seed." } }, - "required": ["wallet"] + "required": [ + "wallet" + ] }, "GetWalletsRequest": { "type": "object", @@ -10372,7 +12848,9 @@ "description": "Unique identifier for a given organization." } }, - "required": ["organizationId"] + "required": [ + "organizationId" + ] }, "GetWalletsResponse": { "type": "object", @@ -10386,7 +12864,9 @@ "description": "A list of wallets." } }, - "required": ["wallets"] + "required": [ + "wallets" + ] }, "GetWhoamiRequest": { "type": "object", @@ -10396,7 +12876,9 @@ "description": "Unique identifier for a given organization. If the request is being made by a WebAuthN user and their sub-organization ID is unknown, this can be the parent organization ID; using the sub-organization ID when possible is preferred due to performance reasons." } }, - "required": ["organizationId"] + "required": [ + "organizationId" + ] }, "GetWhoamiResponse": { "type": "object", @@ -10418,7 +12900,12 @@ "description": "Human-readable name for a user." } }, - "required": ["organizationId", "organizationName", "userId", "username"] + "required": [ + "organizationId", + "organizationName", + "userId", + "username" + ] }, "HashFunction": { "type": "string", @@ -10469,7 +12956,9 @@ "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_IMPORT_PRIVATE_KEY"] + "enum": [ + "ACTIVITY_TYPE_IMPORT_PRIVATE_KEY" + ] }, "timestampMs": { "type": "string", @@ -10487,7 +12976,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "ImportPrivateKeyResult": { "type": "object", @@ -10505,7 +12999,10 @@ "description": "A list of addresses." } }, - "required": ["privateKeyId", "addresses"] + "required": [ + "privateKeyId", + "addresses" + ] }, "ImportWalletIntent": { "type": "object", @@ -10531,14 +13028,21 @@ "description": "A list of wallet Accounts." } }, - "required": ["userId", "walletName", "encryptedBundle", "accounts"] + "required": [ + "userId", + "walletName", + "encryptedBundle", + "accounts" + ] }, "ImportWalletRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_IMPORT_WALLET"] + "enum": [ + "ACTIVITY_TYPE_IMPORT_WALLET" + ] }, "timestampMs": { "type": "string", @@ -10556,7 +13060,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "ImportWalletResult": { "type": "object", @@ -10573,7 +13082,10 @@ "description": "A list of account addresses." } }, - "required": ["walletId", "addresses"] + "required": [ + "walletId", + "addresses" + ] }, "InitFiatOnRampIntent": { "type": "object", @@ -10612,12 +13124,12 @@ "countryCode": { "type": "string", "x-nullable": true, - "description": "ISO 3166-1 two-digit country code for Coinbase representing the purchasing user’s country of residence, e.g., US, GB." + "description": "ISO 3166-1 two-digit country code for Coinbase representing the purchasing user\u2019s country of residence, e.g., US, GB." }, "countrySubdivisionCode": { "type": "string", "x-nullable": true, - "description": "ISO 3166-2 two-digit country subdivision code for Coinbase representing the purchasing user’s subdivision of residence within their country, e.g. NY. Required if country_code=US." + "description": "ISO 3166-2 two-digit country subdivision code for Coinbase representing the purchasing user\u2019s subdivision of residence within their country, e.g. NY. Required if country_code=US." }, "sandboxMode": { "type": "boolean", @@ -10642,7 +13154,9 @@ "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_INIT_FIAT_ON_RAMP"] + "enum": [ + "ACTIVITY_TYPE_INIT_FIAT_ON_RAMP" + ] }, "timestampMs": { "type": "string", @@ -10660,7 +13174,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "InitFiatOnRampResult": { "type": "object", @@ -10678,7 +13197,10 @@ "description": "Optional signature of the MoonPay Widget URL. The signature is generated if the Init Fiat On Ramp intent includes the urlForSignature field. The signature can be used to initialize the MoonPay SDKs when URL signing is enabled for your project." } }, - "required": ["onRampUrl", "onRampTransactionId"] + "required": [ + "onRampUrl", + "onRampTransactionId" + ] }, "InitImportPrivateKeyIntent": { "type": "object", @@ -10688,14 +13210,18 @@ "description": "The ID of the User importing a Private Key." } }, - "required": ["userId"] + "required": [ + "userId" + ] }, "InitImportPrivateKeyRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_INIT_IMPORT_PRIVATE_KEY"] + "enum": [ + "ACTIVITY_TYPE_INIT_IMPORT_PRIVATE_KEY" + ] }, "timestampMs": { "type": "string", @@ -10713,7 +13239,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "InitImportPrivateKeyResult": { "type": "object", @@ -10723,7 +13254,42 @@ "description": "Import bundle containing a public key and signature to use for importing client data." } }, - "required": ["importBundle"] + "required": [ + "importBundle" + ] + }, + "InitImportSecretsIntent": { + "type": "object", + "properties": { + "encryptionSuite": { + "$ref": "#/definitions/TransportEncryptionSuite", + "description": "Transport encryption suite used for ingress secrets." + }, + "numSecrets": { + "type": "integer", + "format": "int32", + "description": "The number of secrets the user intends to import." + } + }, + "required": [ + "encryptionSuite", + "numSecrets" + ] + }, + "InitImportSecretsResult": { + "type": "object", + "properties": { + "enclaveTargetMessages": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Enclave ingress target keys along with metadata specific to the encryption suite. For enclave encrypt v1 this will be ServerTargetMsgV1." + } + }, + "required": [ + "enclaveTargetMessages" + ] }, "InitImportWalletIntent": { "type": "object", @@ -10733,14 +13299,18 @@ "description": "The ID of the User importing a Wallet." } }, - "required": ["userId"] + "required": [ + "userId" + ] }, "InitImportWalletRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_INIT_IMPORT_WALLET"] + "enum": [ + "ACTIVITY_TYPE_INIT_IMPORT_WALLET" + ] }, "timestampMs": { "type": "string", @@ -10758,7 +13328,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "InitImportWalletResult": { "type": "object", @@ -10768,7 +13343,9 @@ "description": "Import bundle containing a public key and signature to use for importing client data." } }, - "required": ["importBundle"] + "required": [ + "importBundle" + ] }, "InitOtpAuthIntent": { "type": "object", @@ -10812,7 +13389,10 @@ "description": "Optional custom email address to use as reply-to" } }, - "required": ["otpType", "contact"] + "required": [ + "otpType", + "contact" + ] }, "InitOtpAuthIntentV2": { "type": "object", @@ -10854,7 +13434,7 @@ "alphanumeric": { "type": "boolean", "x-nullable": true, - "description": "Optional flag to specify if the OTP code should be alphanumeric (Crockford’s Base32). Default = true" + "description": "Optional flag to specify if the OTP code should be alphanumeric (Crockford\u2019s Base32). Default = true" }, "sendFromEmailSenderName": { "type": "string", @@ -10867,7 +13447,10 @@ "description": "Optional custom email address to use as reply-to" } }, - "required": ["otpType", "contact"] + "required": [ + "otpType", + "contact" + ] }, "InitOtpAuthIntentV3": { "type": "object", @@ -10913,7 +13496,7 @@ "alphanumeric": { "type": "boolean", "x-nullable": true, - "description": "Optional flag to specify if the OTP code should be alphanumeric (Crockford’s Base32). Default = true" + "description": "Optional flag to specify if the OTP code should be alphanumeric (Crockford\u2019s Base32). Default = true" }, "sendFromEmailSenderName": { "type": "string", @@ -10931,14 +13514,20 @@ "description": "Optional custom email address to use as reply-to" } }, - "required": ["otpType", "contact", "appName"] + "required": [ + "otpType", + "contact", + "appName" + ] }, "InitOtpAuthRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_INIT_OTP_AUTH_V3"] + "enum": [ + "ACTIVITY_TYPE_INIT_OTP_AUTH_V3" + ] }, "timestampMs": { "type": "string", @@ -10956,7 +13545,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "InitOtpAuthResult": { "type": "object", @@ -10966,7 +13560,9 @@ "description": "Unique identifier for an OTP authentication" } }, - "required": ["otpId"] + "required": [ + "otpId" + ] }, "InitOtpAuthResultV2": { "type": "object", @@ -10976,7 +13572,9 @@ "description": "Unique identifier for an OTP authentication" } }, - "required": ["otpId"] + "required": [ + "otpId" + ] }, "InitOtpIntent": { "type": "object", @@ -11018,7 +13616,7 @@ "alphanumeric": { "type": "boolean", "x-nullable": true, - "description": "Optional flag to specify if the OTP code should be alphanumeric (Crockford’s Base32). Default = true" + "description": "Optional flag to specify if the OTP code should be alphanumeric (Crockford\u2019s Base32). Default = true" }, "sendFromEmailSenderName": { "type": "string", @@ -11036,7 +13634,10 @@ "description": "Optional custom email address to use as reply-to" } }, - "required": ["otpType", "contact"] + "required": [ + "otpType", + "contact" + ] }, "InitOtpIntentV2": { "type": "object", @@ -11082,7 +13683,7 @@ "alphanumeric": { "type": "boolean", "x-nullable": true, - "description": "Optional flag to specify if the OTP code should be alphanumeric (Crockford’s Base32). Default = true" + "description": "Optional flag to specify if the OTP code should be alphanumeric (Crockford\u2019s Base32). Default = true" }, "sendFromEmailSenderName": { "type": "string", @@ -11100,7 +13701,11 @@ "description": "Optional custom email address to use as reply-to" } }, - "required": ["otpType", "contact", "appName"] + "required": [ + "otpType", + "contact", + "appName" + ] }, "InitOtpIntentV3": { "type": "object", @@ -11146,7 +13751,7 @@ "alphanumeric": { "type": "boolean", "x-nullable": true, - "description": "Optional flag to specify if the OTP code should be alphanumeric (Crockford’s Base32). If set to false, OTP code will only be numeric. Default = true" + "description": "Optional flag to specify if the OTP code should be alphanumeric (Crockford\u2019s Base32). If set to false, OTP code will only be numeric. Default = true" }, "sendFromEmailSenderName": { "type": "string", @@ -11164,14 +13769,20 @@ "description": "Optional custom email address to use as reply-to" } }, - "required": ["otpType", "contact", "appName"] + "required": [ + "otpType", + "contact", + "appName" + ] }, "InitOtpRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_INIT_OTP_V3"] + "enum": [ + "ACTIVITY_TYPE_INIT_OTP_V3" + ] }, "timestampMs": { "type": "string", @@ -11189,7 +13800,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "InitOtpResult": { "type": "object", @@ -11199,7 +13815,9 @@ "description": "Unique identifier for an OTP authentication" } }, - "required": ["otpId"] + "required": [ + "otpId" + ] }, "InitOtpResultV2": { "type": "object", @@ -11213,7 +13831,10 @@ "description": "Signed bundle containing a target encryption key to use when submitting OTP codes." } }, - "required": ["otpId", "otpEncryptionTargetBundle"] + "required": [ + "otpId", + "otpEncryptionTargetBundle" + ] }, "InitUserEmailRecoveryIntent": { "type": "object", @@ -11252,7 +13873,10 @@ "description": "Optional custom email address to use as reply-to" } }, - "required": ["email", "targetPublicKey"] + "required": [ + "email", + "targetPublicKey" + ] }, "InitUserEmailRecoveryIntentV2": { "type": "object", @@ -11290,14 +13914,20 @@ "description": "Optional custom email address to use as reply-to" } }, - "required": ["email", "targetPublicKey", "emailCustomization"] + "required": [ + "email", + "targetPublicKey", + "emailCustomization" + ] }, "InitUserEmailRecoveryRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_INIT_USER_EMAIL_RECOVERY_V2"] + "enum": [ + "ACTIVITY_TYPE_INIT_USER_EMAIL_RECOVERY_V2" + ] }, "timestampMs": { "type": "string", @@ -11315,7 +13945,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "InitUserEmailRecoveryResult": { "type": "object", @@ -11325,7 +13960,9 @@ "description": "Unique identifier for the user being recovered." } }, - "required": ["userId"] + "required": [ + "userId" + ] }, "Intent": { "type": "object", @@ -11758,6 +14395,48 @@ }, "createSessionProfileIntent": { "$ref": "#/definitions/CreateSessionProfileIntent" + }, + "earnDeployWrapperIntent": { + "$ref": "#/definitions/EarnDeployWrapperIntent" + }, + "earnDepositIntent": { + "$ref": "#/definitions/EarnDepositIntent" + }, + "earnWithdrawIntent": { + "$ref": "#/definitions/EarnWithdrawIntent" + }, + "executeSwapIntent": { + "$ref": "#/definitions/ExecuteSwapIntent" + }, + "upsertSwapConfigIntent": { + "$ref": "#/definitions/UpsertSwapConfigIntent" + }, + "createTvcOperatorIntent": { + "$ref": "#/definitions/CreateTvcOperatorIntent" + }, + "createTvcQuorumKeyIntent": { + "$ref": "#/definitions/CreateTvcQuorumKeyIntent" + }, + "reEncryptTvcQuorumKeyShareIntent": { + "$ref": "#/definitions/ReEncryptTvcQuorumKeyShareIntent" + }, + "initImportSecretsIntent": { + "$ref": "#/definitions/InitImportSecretsIntent" + }, + "solSendTransactionIntentV2": { + "$ref": "#/definitions/SolSendTransactionIntentV2" + }, + "claimSwapFeesIntent": { + "$ref": "#/definitions/ClaimSwapFeesIntent" + }, + "earnSetWrapperStateIntent": { + "$ref": "#/definitions/EarnSetWrapperStateIntent" + }, + "claimEarnFeesIntent": { + "$ref": "#/definitions/ClaimEarnFeesIntent" + }, + "updateWalletAccountNameIntent": { + "$ref": "#/definitions/UpdateWalletAccountNameIntent" } } }, @@ -11783,85 +14462,198 @@ "$ref": "#/definitions/AccessType", "description": "The User's permissible access method(s)." }, - "senderUserId": { + "senderUserId": { + "type": "string", + "description": "Unique identifier for the Sender of an Invitation." + } + }, + "required": [ + "receiverUserName", + "receiverUserEmail", + "receiverUserTags", + "accessType", + "senderUserId" + ] + }, + "IpAllowlist": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for the organization this allowlist belongs to." + }, + "rules": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/IpAllowlistRule" + }, + "description": "List of IP allowlist rules with their metadata." + }, + "publicKey": { + "type": "string", + "x-nullable": true, + "description": "Public key of the API key this allowlist applies to. Null means the allowlist applies to the entire organization." + }, + "enabled": { + "type": "boolean", + "x-nullable": true, + "description": "Whether the IP allowlist is enabled. Only present for organization-level allowlists. Null for API key-level allowlists (presence of the allowlist implies enablement)." + }, + "onEvaluationError": { + "type": "string", + "x-nullable": true, + "description": "Behavior when an error occurs during IP allowlist evaluation. Valid values: ALLOW, DENY. Defaults to DENY." + } + }, + "required": [ + "organizationId", + "rules" + ] + }, + "IpAllowlistIntentRule": { + "type": "object", + "properties": { + "cidr": { + "type": "string", + "description": "CIDR block (e.g., '192.168.1.0/24', '2001:db8::/32')." + }, + "label": { + "type": "string", + "x-nullable": true, + "description": "Optional human-readable label for this rule (e.g., 'Office VPN')." + } + }, + "required": [ + "cidr" + ] + }, + "IpAllowlistRule": { + "type": "object", + "properties": { + "cidr": { + "type": "string", + "description": "CIDR block (e.g., '192.168.1.0/24')." + }, + "label": { + "type": "string", + "x-nullable": true, + "description": "Optional human-readable label for this rule." + }, + "createdAt": { + "type": "string", + "description": "Creation timestamp as millisecond epoch string." + } + }, + "required": [ + "cidr" + ] + }, + "ListEarnEnabledVaultsRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "provider": { + "$ref": "#/definitions/EarnProvider", + "description": "Optional filter: only return enabled vaults from this provider. Leave EARN_PROVIDER_UNSPECIFIED to return all providers." + }, + "caip19": { + "type": "string", + "x-nullable": true, + "description": "Optional filter: only return enabled vaults whose underlying asset matches this CAIP-19 asset ID (e.g. 'eip155:8453/erc20:0x833589...'). The chain is taken from the CAIP-19 identifier." + } + }, + "required": [ + "organizationId" + ] + }, + "ListEarnEnabledVaultsResponse": { + "type": "object", + "properties": { + "enabledVaults": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/EarnEnabledVault" + }, + "description": "The organization's deployed wrappers." + } + } + }, + "ListEarnPositionsRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "walletAddress": { "type": "string", - "description": "Unique identifier for the Sender of an Invitation." + "description": "The wallet address to return positions for." } }, "required": [ - "receiverUserName", - "receiverUserEmail", - "receiverUserTags", - "accessType", - "senderUserId" + "organizationId", + "walletAddress" ] }, - "IpAllowlist": { + "ListEarnPositionsResponse": { "type": "object", "properties": { - "organizationId": { - "type": "string", - "description": "Unique identifier for the organization this allowlist belongs to." - }, - "rules": { + "positions": { "type": "array", "items": { "type": "object", - "$ref": "#/definitions/IpAllowlistRule" + "$ref": "#/definitions/EarnPosition" }, - "description": "List of IP allowlist rules with their metadata." - }, - "publicKey": { - "type": "string", - "x-nullable": true, - "description": "Public key of the API key this allowlist applies to. Null means the allowlist applies to the entire organization." - }, - "enabled": { - "type": "boolean", - "x-nullable": true, - "description": "Whether the IP allowlist is enabled. Only present for organization-level allowlists. Null for API key-level allowlists (presence of the allowlist implies enablement)." - }, - "onEvaluationError": { - "type": "string", - "x-nullable": true, - "description": "Behavior when an error occurs during IP allowlist evaluation. Valid values: ALLOW, DENY. Defaults to DENY." + "description": "The wallet's active Earn positions." } - }, - "required": ["organizationId", "rules"] + } }, - "IpAllowlistIntentRule": { + "ListEarnVaultsRequest": { "type": "object", "properties": { - "cidr": { + "organizationId": { "type": "string", - "description": "CIDR block (e.g., '192.168.1.0/24', '2001:db8::/32')." + "description": "Unique identifier for a given Organization. Annotates which vaults the organization has already enabled." }, - "label": { + "provider": { + "$ref": "#/definitions/EarnProvider", + "description": "Optional filter: only return vaults from this provider. Leave EARN_PROVIDER_UNSPECIFIED to return all providers." + }, + "caip19": { "type": "string", - "x-nullable": true, - "description": "Optional human-readable label for this rule (e.g., 'Office VPN')." + "description": "CAIP-19 asset ID (e.g. 'eip155:8453/erc20:0x833589...') to return vaults for. Only vaults whose underlying asset matches are returned; the chain is taken from the CAIP-19 identifier." + }, + "paginationOptions": { + "$ref": "#/definitions/Pagination", + "description": "Pagination over the TVL-sorted catalog. before/after are opaque cursors from a prior page's page_info (start_cursor/end_cursor); do not construct them by hand." } }, - "required": ["cidr"] + "required": [ + "organizationId", + "caip19" + ] }, - "IpAllowlistRule": { + "ListEarnVaultsResponse": { "type": "object", "properties": { - "cidr": { - "type": "string", - "description": "CIDR block (e.g., '192.168.1.0/24')." - }, - "label": { - "type": "string", - "x-nullable": true, - "description": "Optional human-readable label for this rule." + "vaults": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/EarnVault" + }, + "description": "The catalog of wrappable vaults, sorted by TVL (USD) descending. To page, pass page_info.end_cursor as the pagination after cursor." }, - "createdAt": { - "type": "string", - "description": "Creation timestamp as millisecond epoch string." + "pageInfo": { + "$ref": "#/definitions/PageInfo", + "description": "Pagination metadata for the returned page. Pass end_cursor as the next request's after cursor (or start_cursor as the before cursor) to page through the catalog. Cursors are opaque; do not parse them." } - }, - "required": ["cidr"] + } }, "ListFiatOnRampCredentialsRequest": { "type": "object", @@ -11871,7 +14663,9 @@ "description": "Unique identifier for a given Organization." } }, - "required": ["organizationId"] + "required": [ + "organizationId" + ] }, "ListFiatOnRampCredentialsResponse": { "type": "object", @@ -11884,7 +14678,9 @@ } } }, - "required": ["fiatOnRampCredentials"] + "required": [ + "fiatOnRampCredentials" + ] }, "ListOauth2CredentialsRequest": { "type": "object", @@ -11894,7 +14690,9 @@ "description": "Unique identifier for a given Organization." } }, - "required": ["organizationId"] + "required": [ + "organizationId" + ] }, "ListOauth2CredentialsResponse": { "type": "object", @@ -11907,7 +14705,9 @@ } } }, - "required": ["oauth2Credentials"] + "required": [ + "oauth2Credentials" + ] }, "ListPrivateKeyTagsRequest": { "type": "object", @@ -11917,7 +14717,9 @@ "description": "Unique identifier for a given organization." } }, - "required": ["organizationId"] + "required": [ + "organizationId" + ] }, "ListPrivateKeyTagsResponse": { "type": "object", @@ -11931,7 +14733,9 @@ "description": "A list of private key tags." } }, - "required": ["privateKeyTags"] + "required": [ + "privateKeyTags" + ] }, "ListSupportedAssetsRequest": { "type": "object", @@ -11965,7 +14769,10 @@ "description": "CAIP-2 chain ID (e.g., 'eip155:1' for Ethereum mainnet or 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' for Solana mainnet). Human-readable Solana aliases ('solana:mainnet', 'solana:devnet') are also accepted and normalized to canonical CAIP-2 values." } }, - "required": ["organizationId", "caip2"] + "required": [ + "organizationId", + "caip2" + ] }, "ListSupportedAssetsResponse": { "type": "object", @@ -11988,7 +14795,9 @@ "description": "Unique identifier for a given organization." } }, - "required": ["organizationId"] + "required": [ + "organizationId" + ] }, "ListUserTagsResponse": { "type": "object", @@ -12002,7 +14811,9 @@ "description": "A list of user tags." } }, - "required": ["userTags"] + "required": [ + "userTags" + ] }, "ListWebhookEndpointsRequest": { "type": "object", @@ -12012,7 +14823,9 @@ "description": "Unique identifier for a given Organization." } }, - "required": ["organizationId"] + "required": [ + "organizationId" + ] }, "ListWebhookEndpointsResponse": { "type": "object", @@ -12025,7 +14838,9 @@ } } }, - "required": ["webhookEndpoints"] + "required": [ + "webhookEndpoints" + ] }, "LogLine": { "type": "object", @@ -12039,7 +14854,9 @@ "description": "When the line was logged. Stable across replays, so lines can be chronologically merged across pods" } }, - "required": ["content"] + "required": [ + "content" + ] }, "LoginUsage": { "type": "object", @@ -12049,7 +14866,9 @@ "description": "Public key for authentication" } }, - "required": ["publicKey"] + "required": [ + "publicKey" + ] }, "MfaPolicy": { "type": "object", @@ -12165,7 +14984,9 @@ "$ref": "#/definitions/TokenUsage" } }, - "required": ["stamp"] + "required": [ + "stamp" + ] }, "NativeRevertError": { "type": "object", @@ -12230,7 +15051,9 @@ "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_OAUTH2_AUTHENTICATE"] + "enum": [ + "ACTIVITY_TYPE_OAUTH2_AUTHENTICATE" + ] }, "timestampMs": { "type": "string", @@ -12248,7 +15071,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "Oauth2AuthenticateResult": { "type": "object", @@ -12258,7 +15086,9 @@ "description": "Base64 encoded OIDC token issued by Turnkey to be used with the LoginWithOAuth activity" } }, - "required": ["oidcToken"] + "required": [ + "oidcToken" + ] }, "Oauth2Credential": { "type": "object", @@ -12302,7 +15132,10 @@ }, "Oauth2Provider": { "type": "string", - "enum": ["OAUTH2_PROVIDER_X", "OAUTH2_PROVIDER_DISCORD"] + "enum": [ + "OAUTH2_PROVIDER_X", + "OAUTH2_PROVIDER_DISCORD" + ] }, "OauthIntent": { "type": "object", @@ -12318,7 +15151,7 @@ "apiKeyName": { "type": "string", "x-nullable": true, - "description": "Optional human-readable name for an API Key. If none provided, default to Oauth - \u003cTimestamp\u003e" + "description": "Optional human-readable name for an API Key. If none provided, default to Oauth - " }, "expirationSeconds": { "type": "string", @@ -12331,7 +15164,10 @@ "description": "Invalidate all other previously generated Oauth API keys" } }, - "required": ["oidcToken", "targetPublicKey"] + "required": [ + "oidcToken", + "targetPublicKey" + ] }, "OauthLoginIntent": { "type": "object", @@ -12360,14 +15196,19 @@ "description": "Optional session profile ID to specify which Session Profile to use for this login. If not provided, the default read/write session will be used." } }, - "required": ["oidcToken", "publicKey"] + "required": [ + "oidcToken", + "publicKey" + ] }, "OauthLoginRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_OAUTH_LOGIN"] + "enum": [ + "ACTIVITY_TYPE_OAUTH_LOGIN" + ] }, "timestampMs": { "type": "string", @@ -12385,7 +15226,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "OauthLoginResult": { "type": "object", @@ -12395,7 +15241,9 @@ "description": "Signed JWT containing an expiry, public key, session type, user id, and organization id" } }, - "required": ["session"] + "required": [ + "session" + ] }, "OauthProvider": { "type": "object", @@ -12449,7 +15297,10 @@ "description": "Base64 encoded OIDC token" } }, - "required": ["providerName", "oidcToken"] + "required": [ + "providerName", + "oidcToken" + ] }, "OauthProviderParamsV2": { "type": "object", @@ -12467,14 +15318,18 @@ "description": "OIDC claims (iss, sub, aud) to uniquely identify the user" } }, - "required": ["providerName"] + "required": [ + "providerName" + ] }, "OauthRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_OAUTH"] + "enum": [ + "ACTIVITY_TYPE_OAUTH" + ] }, "timestampMs": { "type": "string", @@ -12492,7 +15347,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "OauthResult": { "type": "object", @@ -12510,7 +15370,11 @@ "description": "HPKE encrypted credential bundle" } }, - "required": ["userId", "apiKeyId", "credentialBundle"] + "required": [ + "userId", + "apiKeyId", + "credentialBundle" + ] }, "OidcClaims": { "type": "object", @@ -12528,7 +15392,11 @@ "description": "The audience from the OIDC token (aud claim)" } }, - "required": ["iss", "sub", "aud"] + "required": [ + "iss", + "sub", + "aud" + ] }, "Operator": { "type": "string", @@ -12564,7 +15432,7 @@ "apiKeyName": { "type": "string", "x-nullable": true, - "description": "Optional human-readable name for an API Key. If none provided, default to OTP Auth - \u003cTimestamp\u003e" + "description": "Optional human-readable name for an API Key. If none provided, default to OTP Auth - " }, "expirationSeconds": { "type": "string", @@ -12577,14 +15445,20 @@ "description": "Invalidate all other previously generated OTP Auth API keys" } }, - "required": ["otpId", "otpCode", "targetPublicKey"] + "required": [ + "otpId", + "otpCode", + "targetPublicKey" + ] }, "OtpAuthRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_OTP_AUTH"] + "enum": [ + "ACTIVITY_TYPE_OTP_AUTH" + ] }, "timestampMs": { "type": "string", @@ -12602,7 +15476,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "OtpAuthResult": { "type": "object", @@ -12620,7 +15499,9 @@ "description": "HPKE encrypted credential bundle" } }, - "required": ["userId"] + "required": [ + "userId" + ] }, "OtpLoginIntent": { "type": "object", @@ -12654,7 +15535,10 @@ "description": "Optional session profile ID to specify which Session Profile to use for this login. If not provided, the default read/write session will be used." } }, - "required": ["verificationToken", "publicKey"] + "required": [ + "verificationToken", + "publicKey" + ] }, "OtpLoginIntentV2": { "type": "object", @@ -12687,14 +15571,20 @@ "description": "Optional session profile ID to specify which Session Profile to use for this login. If not provided, the default read/write session will be used." } }, - "required": ["verificationToken", "publicKey", "clientSignature"] + "required": [ + "verificationToken", + "publicKey", + "clientSignature" + ] }, "OtpLoginRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_OTP_LOGIN_V2"] + "enum": [ + "ACTIVITY_TYPE_OTP_LOGIN_V2" + ] }, "timestampMs": { "type": "string", @@ -12712,7 +15602,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "OtpLoginResult": { "type": "object", @@ -12722,7 +15617,9 @@ "description": "Signed JWT containing an expiry, public key, session type, user id, and organization id" } }, - "required": ["session"] + "required": [ + "session" + ] }, "Outcome": { "type": "string", @@ -12736,6 +15633,25 @@ "OUTCOME_REQUIRES_AUTHENTICATORS" ] }, + "PageInfo": { + "type": "object", + "properties": { + "hasNextPage": { + "type": "boolean" + }, + "hasPreviousPage": { + "type": "boolean" + }, + "startCursor": { + "type": "string", + "x-nullable": true + }, + "endCursor": { + "type": "string", + "x-nullable": true + } + } + }, "Pagination": { "type": "object", "properties": { @@ -12755,7 +15671,9 @@ }, "PathFormat": { "type": "string", - "enum": ["PATH_FORMAT_BIP32"] + "enum": [ + "PATH_FORMAT_BIP32" + ] }, "PayloadEncoding": { "type": "string", @@ -12843,7 +15761,9 @@ "description": "The unique identifier for the provisioning quorum key share" } }, - "required": ["provisioningShareId"] + "required": [ + "provisioningShareId" + ] }, "PrivateKey": { "type": "object", @@ -12963,14 +15883,19 @@ }, "type": { "type": "string", - "enum": ["public-key"] + "enum": [ + "public-key" + ] }, "rawId": { "type": "string" }, "authenticatorAttachment": { "type": "string", - "enum": ["cross-platform", "platform"], + "enum": [ + "cross-platform", + "platform" + ], "x-nullable": true }, "response": { @@ -12980,7 +15905,13 @@ "$ref": "#/definitions/SimpleClientExtensionResults" } }, - "required": ["id", "type", "rawId", "response", "clientExtensionResults"] + "required": [ + "id", + "type", + "rawId", + "response", + "clientExtensionResults" + ] }, "QuorumKeyShareApprovalBundle": { "type": "object", @@ -12998,7 +15929,60 @@ "description": "Signature from the share set operator approving the manifest" } }, - "required": ["operatorId", "reEncryptedShareHex", "signature"] + "required": [ + "operatorId", + "reEncryptedShareHex", + "signature" + ] + }, + "ReEncryptTvcQuorumKeyShareIntent": { + "type": "object", + "properties": { + "attestationDocB64": { + "type": "string", + "description": "Base64-encoded attestation document for the TVC deployment provisioning enclave" + }, + "manifestB64": { + "type": "string", + "description": "Base64-encoded manifest for the TVC deployment" + }, + "operatorEncryptKey": { + "type": "string", + "description": "Operator encryption public key used to encrypt the hosted TVC quorum key share" + }, + "operatorSignKey": { + "type": "string", + "description": "Operator signing public key used to approve the TVC manifest" + }, + "deploymentId": { + "type": "string", + "description": "Unique identifier of the TVC deployment receiving the re-encrypted quorum key share" + }, + "appQuorumKey": { + "type": "string", + "description": "Quorum key for the TVC application" + } + }, + "required": [ + "attestationDocB64", + "manifestB64", + "operatorEncryptKey", + "operatorSignKey", + "deploymentId", + "appQuorumKey" + ] + }, + "ReEncryptTvcQuorumKeyShareResult": { + "type": "object", + "properties": { + "provisioningShareId": { + "type": "string", + "description": "The unique identifier for the provisioning quorum key share" + } + }, + "required": [ + "provisioningShareId" + ] }, "RecoverUserIntent": { "type": "object", @@ -13012,14 +15996,19 @@ "description": "Unique identifier for the user performing recovery." } }, - "required": ["authenticator", "userId"] + "required": [ + "authenticator", + "userId" + ] }, "RecoverUserRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_RECOVER_USER"] + "enum": [ + "ACTIVITY_TYPE_RECOVER_USER" + ] }, "timestampMs": { "type": "string", @@ -13037,7 +16026,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "RecoverUserResult": { "type": "object", @@ -13050,7 +16044,9 @@ "description": "ID of the authenticator created." } }, - "required": ["authenticatorId"] + "required": [ + "authenticatorId" + ] }, "RejectActivityIntent": { "type": "object", @@ -13060,14 +16056,18 @@ "description": "An artifact verifying a User's action." } }, - "required": ["fingerprint"] + "required": [ + "fingerprint" + ] }, "RejectActivityRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_REJECT_ACTIVITY"] + "enum": [ + "ACTIVITY_TYPE_REJECT_ACTIVITY" + ] }, "timestampMs": { "type": "string", @@ -13085,7 +16085,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "RemoveIpAllowlistIntent": { "type": "object", @@ -13102,7 +16107,9 @@ "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_REMOVE_IP_ALLOWLIST"] + "enum": [ + "ACTIVITY_TYPE_REMOVE_IP_ALLOWLIST" + ] }, "timestampMs": { "type": "string", @@ -13120,7 +16127,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "RemoveIpAllowlistResult": { "type": "object" @@ -13133,14 +16145,18 @@ "description": "Name of the feature to remove" } }, - "required": ["name"] + "required": [ + "name" + ] }, "RemoveOrganizationFeatureRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_REMOVE_ORGANIZATION_FEATURE"] + "enum": [ + "ACTIVITY_TYPE_REMOVE_ORGANIZATION_FEATURE" + ] }, "timestampMs": { "type": "string", @@ -13158,7 +16174,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "RemoveOrganizationFeatureResult": { "type": "object", @@ -13172,7 +16193,9 @@ "description": "Resulting list of organization features." } }, - "required": ["features"] + "required": [ + "features" + ] }, "RequiredAuthenticationMethod": { "type": "object", @@ -13186,7 +16209,9 @@ "description": "A list of authentication methods for this MFA step. If only one method is provided, it is required. If multiple are provided, the user must satisfy ANY one of them." } }, - "required": ["any"] + "required": [ + "any" + ] }, "RequiredAuthenticationMethodParams": { "type": "object", @@ -13200,7 +16225,9 @@ "description": "A list of authentication methods for this MFA step. If only one method is provided, it is required. If multiple are provided, the user must satisfy ANY one of them." } }, - "required": ["any"] + "required": [ + "any" + ] }, "RestoreTvcDeploymentIntent": { "type": "object", @@ -13210,14 +16237,18 @@ "description": "The unique identifier of the TVC deployment to restore." } }, - "required": ["deploymentId"] + "required": [ + "deploymentId" + ] }, "RestoreTvcDeploymentRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_RESTORE_TVC_DEPLOYMENT"] + "enum": [ + "ACTIVITY_TYPE_RESTORE_TVC_DEPLOYMENT" + ] }, "timestampMs": { "type": "string", @@ -13235,7 +16266,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "RestoreTvcDeploymentResult": { "type": "object", @@ -13245,7 +16281,9 @@ "description": "The unique identifier of the restored TVC deployment." } }, - "required": ["deploymentId"] + "required": [ + "deploymentId" + ] }, "Result": { "type": "object", @@ -13612,6 +16650,48 @@ }, "createSessionProfileResult": { "$ref": "#/definitions/CreateSessionProfileResult" + }, + "earnDeployWrapperResult": { + "$ref": "#/definitions/EarnDeployWrapperResult" + }, + "earnDepositResult": { + "$ref": "#/definitions/EarnDepositResult" + }, + "earnWithdrawResult": { + "$ref": "#/definitions/EarnWithdrawResult" + }, + "executeSwapResult": { + "$ref": "#/definitions/ExecuteSwapResult" + }, + "upsertSwapConfigResult": { + "$ref": "#/definitions/UpsertSwapConfigResult" + }, + "createTvcOperatorResult": { + "$ref": "#/definitions/CreateTvcOperatorResult" + }, + "createTvcQuorumKeyResult": { + "$ref": "#/definitions/CreateTvcQuorumKeyResult" + }, + "reEncryptTvcQuorumKeyShareResult": { + "$ref": "#/definitions/ReEncryptTvcQuorumKeyShareResult" + }, + "initImportSecretsResult": { + "$ref": "#/definitions/InitImportSecretsResult" + }, + "solSendTransactionResultV2": { + "$ref": "#/definitions/SolSendTransactionResultV2" + }, + "claimSwapFeesResult": { + "$ref": "#/definitions/ClaimSwapFeesResult" + }, + "earnSetWrapperStateResult": { + "$ref": "#/definitions/EarnSetWrapperStateResult" + }, + "claimEarnFeesResult": { + "$ref": "#/definitions/ClaimEarnFeesResult" + }, + "updateWalletAccountNameResult": { + "$ref": "#/definitions/UpdateWalletAccountNameResult" } } }, @@ -13673,7 +16753,11 @@ "description": "A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body." } }, - "required": ["userName", "apiKeys", "authenticators"] + "required": [ + "userName", + "apiKeys", + "authenticators" + ] }, "RootUserParamsV2": { "type": "object", @@ -13712,7 +16796,12 @@ "description": "A list of Oauth providers. This field, if not needed, should be an empty array in your request body." } }, - "required": ["userName", "apiKeys", "authenticators", "oauthProviders"] + "required": [ + "userName", + "apiKeys", + "authenticators", + "oauthProviders" + ] }, "RootUserParamsV3": { "type": "object", @@ -13751,7 +16840,12 @@ "description": "A list of Oauth providers. This field, if not needed, should be an empty array in your request body." } }, - "required": ["userName", "apiKeys", "authenticators", "oauthProviders"] + "required": [ + "userName", + "apiKeys", + "authenticators", + "oauthProviders" + ] }, "RootUserParamsV4": { "type": "object", @@ -13795,7 +16889,12 @@ "description": "A list of Oauth providers. This field, if not needed, should be an empty array in your request body." } }, - "required": ["userName", "apiKeys", "authenticators", "oauthProviders"] + "required": [ + "userName", + "apiKeys", + "authenticators", + "oauthProviders" + ] }, "RootUserParamsV5": { "type": "object", @@ -13839,7 +16938,12 @@ "description": "A list of Oauth providers. This field, if not needed, should be an empty array in your request body." } }, - "required": ["userName", "apiKeys", "authenticators", "oauthProviders"] + "required": [ + "userName", + "apiKeys", + "authenticators", + "oauthProviders" + ] }, "Selector": { "type": "object", @@ -13945,7 +17049,9 @@ "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_SET_IP_ALLOWLIST"] + "enum": [ + "ACTIVITY_TYPE_SET_IP_ALLOWLIST" + ] }, "timestampMs": { "type": "string", @@ -13963,7 +17069,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "SetIpAllowlistResult": { "type": "object" @@ -13981,14 +17092,19 @@ "description": "Optional value for the feature. Will override existing values if feature is already set." } }, - "required": ["name", "value"] + "required": [ + "name", + "value" + ] }, "SetOrganizationFeatureRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_SET_ORGANIZATION_FEATURE"] + "enum": [ + "ACTIVITY_TYPE_SET_ORGANIZATION_FEATURE" + ] }, "timestampMs": { "type": "string", @@ -14006,7 +17122,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "SetOrganizationFeatureResult": { "type": "object", @@ -14020,7 +17141,9 @@ "description": "Resulting list of organization features." } }, - "required": ["features"] + "required": [ + "features" + ] }, "SetPaymentMethodIntent": { "type": "object", @@ -14075,7 +17198,11 @@ "description": "The name associated with the credit card." } }, - "required": ["paymentMethodId", "cardHolderEmail", "cardHolderName"] + "required": [ + "paymentMethodId", + "cardHolderEmail", + "cardHolderName" + ] }, "SetPaymentMethodResult": { "type": "object", @@ -14093,7 +17220,11 @@ "description": "The email address associated with the payment method." } }, - "required": ["lastFour", "cardHolderName", "cardHolderEmail"] + "required": [ + "lastFour", + "cardHolderName", + "cardHolderEmail" + ] }, "SignRawPayloadIntent": { "type": "object", @@ -14115,7 +17246,12 @@ "description": "Hash function to apply to payload bytes before signing. This field must be set to HASH_FUNCTION_NOT_APPLICABLE for EdDSA/ed25519 signature requests; configurable payload hashing is not supported by RFC 8032." } }, - "required": ["privateKeyId", "payload", "encoding", "hashFunction"] + "required": [ + "privateKeyId", + "payload", + "encoding", + "hashFunction" + ] }, "SignRawPayloadIntentV2": { "type": "object", @@ -14137,14 +17273,21 @@ "description": "Hash function to apply to payload bytes before signing. This field must be set to HASH_FUNCTION_NOT_APPLICABLE for EdDSA/ed25519 signature requests; configurable payload hashing is not supported by RFC 8032." } }, - "required": ["signWith", "payload", "encoding", "hashFunction"] + "required": [ + "signWith", + "payload", + "encoding", + "hashFunction" + ] }, "SignRawPayloadRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_SIGN_RAW_PAYLOAD_V2"] + "enum": [ + "ACTIVITY_TYPE_SIGN_RAW_PAYLOAD_V2" + ] }, "timestampMs": { "type": "string", @@ -14162,7 +17305,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "SignRawPayloadResult": { "type": "object", @@ -14180,7 +17328,11 @@ "description": "Component of an ECSDA signature." } }, - "required": ["r", "s", "v"] + "required": [ + "r", + "s", + "v" + ] }, "SignRawPayloadsIntent": { "type": "object", @@ -14205,14 +17357,21 @@ "description": "Hash function to apply to payload bytes before signing. This field must be set to HASH_FUNCTION_NOT_APPLICABLE for EdDSA/ed25519 signature requests; configurable payload hashing is not supported by RFC 8032." } }, - "required": ["signWith", "payloads", "encoding", "hashFunction"] + "required": [ + "signWith", + "payloads", + "encoding", + "hashFunction" + ] }, "SignRawPayloadsRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_SIGN_RAW_PAYLOADS"] + "enum": [ + "ACTIVITY_TYPE_SIGN_RAW_PAYLOADS" + ] }, "timestampMs": { "type": "string", @@ -14230,7 +17389,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "SignRawPayloadsResult": { "type": "object", @@ -14259,7 +17423,11 @@ "$ref": "#/definitions/TransactionType" } }, - "required": ["privateKeyId", "unsignedTransaction", "type"] + "required": [ + "privateKeyId", + "unsignedTransaction", + "type" + ] }, "SignTransactionIntentV2": { "type": "object", @@ -14276,14 +17444,20 @@ "$ref": "#/definitions/TransactionType" } }, - "required": ["signWith", "unsignedTransaction", "type"] + "required": [ + "signWith", + "unsignedTransaction", + "type" + ] }, "SignTransactionRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_SIGN_TRANSACTION_V2"] + "enum": [ + "ACTIVITY_TYPE_SIGN_TRANSACTION_V2" + ] }, "timestampMs": { "type": "string", @@ -14301,7 +17475,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "SignTransactionResult": { "type": "object", @@ -14310,7 +17489,9 @@ "type": "string" } }, - "required": ["signedTransaction"] + "required": [ + "signedTransaction" + ] }, "SignupUsage": { "type": "object", @@ -14448,14 +17629,63 @@ "description": "user-provided blockhash for replay protection / deadline control. If omitted and sponsor=true, we fetch a fresh blockhash during execution" } }, - "required": ["unsignedTransaction", "signWith", "caip2"] + "required": [ + "unsignedTransaction", + "signWith", + "caip2" + ] + }, + "SolSendTransactionIntentV2": { + "type": "object", + "properties": { + "unsignedTransaction": { + "type": "string", + "description": "Hex-encoded serialized unsigned Solana transaction (full wire format with zeroed signature placeholders)" + }, + "signWiths": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Ordered Solana signer addresses Turnkey signs with. Between 1 and 16 signers. For sponsored transactions this must list every required signer of the transaction in transaction order." + }, + "sponsor": { + "type": "boolean", + "x-nullable": true, + "description": "Whether to sponsor this transaction via Gas Station." + }, + "caip2": { + "type": "string", + "enum": [ + "solana:mainnet", + "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", + "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d", + "solana:devnet", + "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1", + "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1wcaWoxPkrZBG" + ], + "description": "CAIP-2 chain ID (e.g., 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' for Solana mainnet). Human-readable Solana aliases ('solana:mainnet', 'solana:devnet') are also accepted and normalized to canonical CAIP-2 values." + }, + "recentBlockhash": { + "type": "string", + "x-nullable": true, + "description": "User-provided blockhash for replay protection / deadline control. If provided, it is used as-is, including for sponsored transactions (the transaction is only broadcastable while the blockhash is current). If omitted and sponsor=true, a fresh blockhash is fetched during execution." + } + }, + "required": [ + "unsignedTransaction", + "signWiths", + "caip2" + ] }, "SolSendTransactionRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_SOL_SEND_TRANSACTION"] + "enum": [ + "ACTIVITY_TYPE_SOL_SEND_TRANSACTION" + ] }, "timestampMs": { "type": "string", @@ -14473,7 +17703,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "SolSendTransactionResult": { "type": "object", @@ -14483,7 +17718,21 @@ "description": "The send_transaction_status ID associated with the transaction submission" } }, - "required": ["sendTransactionStatusId"] + "required": [ + "sendTransactionStatusId" + ] + }, + "SolSendTransactionResultV2": { + "type": "object", + "properties": { + "sendTransactionStatusId": { + "type": "string", + "description": "The send_transaction_status ID associated with the transaction submission" + } + }, + "required": [ + "sendTransactionStatusId" + ] }, "SolanaConfig": { "type": "object", @@ -14564,7 +17813,11 @@ "description": "Hex-encoded 64-byte compact ECDSA signature binding (leaf_id, transfer_id, ciphertext) to the sender's identity key. Verified inside the enclave before decryption." } }, - "required": ["leafId", "ciphertext", "senderSignature"] + "required": [ + "leafId", + "ciphertext", + "senderSignature" + ] }, "SparkClaimPackage": { "type": "object", @@ -14619,14 +17872,19 @@ "description": "Claim package parameters." } }, - "required": ["signWith", "claim"] + "required": [ + "signWith", + "claim" + ] }, "SparkClaimTransferRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_SPARK_CLAIM_TRANSFER"] + "enum": [ + "ACTIVITY_TYPE_SPARK_CLAIM_TRANSFER" + ] }, "timestampMs": { "type": "string", @@ -14640,7 +17898,12 @@ "$ref": "#/definitions/SparkClaimTransferIntent" } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "SparkClaimTransferResult": { "type": "object", @@ -14662,7 +17925,10 @@ "description": "Newly-derived SigningLeaf public keys, one per leaf, in input order." } }, - "required": ["operatorPackages", "newLeafPublicKeys"] + "required": [ + "operatorPackages", + "newLeafPublicKeys" + ] }, "SparkDepositDerivation": { "type": "object" @@ -14679,7 +17945,10 @@ "description": "ECIES ciphertext (hex-encoded) opaque to Turnkey after emission." } }, - "required": ["operatorId", "encryptedPackage"] + "required": [ + "operatorId", + "encryptedPackage" + ] }, "SparkFrostCommitment": { "type": "object", @@ -14697,7 +17966,11 @@ "description": "Binding commitment E, hex-encoded compressed secp256k1 point." } }, - "required": ["id", "hiding", "binding"] + "required": [ + "id", + "hiding", + "binding" + ] }, "SparkHtlcPreimageDerivation": { "type": "object" @@ -14742,7 +18015,10 @@ "description": "Hex-encoded compressed secp256k1 point (33 bytes) for the SigningLeaf derivation at leaf_id." } }, - "required": ["leafId", "publicKey"] + "required": [ + "leafId", + "publicKey" + ] }, "SparkLightningReceivePackage": { "type": "object", @@ -14761,7 +18037,10 @@ "description": "Operators that will receive Feldman shares of the preimage. Order must match the operators' numeric IDs in the Spark operator config - share index is the 1-based position in this list." } }, - "required": ["threshold", "operatorRecipients"] + "required": [ + "threshold", + "operatorRecipients" + ] }, "SparkOperatorRecipient": { "type": "object", @@ -14775,7 +18054,10 @@ "description": "Operator's ECIES encryption pubkey (hex-encoded compressed secp256k1 point)." } }, - "required": ["operatorId", "encryptionPublicKey"] + "required": [ + "operatorId", + "encryptionPublicKey" + ] }, "SparkPartialSignature": { "type": "object", @@ -14793,7 +18075,11 @@ "description": "Turnkey's binding commitment E (hex-encoded compressed secp256k1 point). Forward to the Spark Operator." } }, - "required": ["signatureShare", "hiding", "binding"] + "required": [ + "signatureShare", + "hiding", + "binding" + ] }, "SparkPrepareLightningReceiveIntent": { "type": "object", @@ -14807,14 +18093,19 @@ "description": "Lightning receive package parameters: threshold and operator recipients." } }, - "required": ["signWith", "lightningReceive"] + "required": [ + "signWith", + "lightningReceive" + ] }, "SparkPrepareLightningReceiveRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_SPARK_PREPARE_LIGHTNING_RECEIVE"] + "enum": [ + "ACTIVITY_TYPE_SPARK_PREPARE_LIGHTNING_RECEIVE" + ] }, "timestampMs": { "type": "string", @@ -14828,7 +18119,12 @@ "$ref": "#/definitions/SparkPrepareLightningReceiveIntent" } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "SparkPrepareLightningReceiveResult": { "type": "object", @@ -14846,7 +18142,10 @@ "description": "Hex-encoded SHA256(preimage). Forward to the Lightning node." } }, - "required": ["operatorPackages", "paymentHash"] + "required": [ + "operatorPackages", + "paymentHash" + ] }, "SparkPrepareTransferIntent": { "type": "object", @@ -14860,14 +18159,19 @@ "description": "Transfer package parameters for HD key tweak splitting." } }, - "required": ["signWith", "transfer"] + "required": [ + "signWith", + "transfer" + ] }, "SparkPrepareTransferRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_SPARK_PREPARE_TRANSFER"] + "enum": [ + "ACTIVITY_TYPE_SPARK_PREPARE_TRANSFER" + ] }, "timestampMs": { "type": "string", @@ -14881,7 +18185,12 @@ "$ref": "#/definitions/SparkPrepareTransferIntent" } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "SparkPrepareTransferResult": { "type": "object", @@ -14929,14 +18238,19 @@ "description": "Batched sign requests. Each produces a partial signature plus Turnkey's public commitments." } }, - "required": ["signWith", "signatures"] + "required": [ + "signWith", + "signatures" + ] }, "SparkSignFrostRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_SPARK_SIGN_FROST"] + "enum": [ + "ACTIVITY_TYPE_SPARK_SIGN_FROST" + ] }, "timestampMs": { "type": "string", @@ -14950,7 +18264,12 @@ "$ref": "#/definitions/SparkSignFrostIntent" } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "SparkSignFrostResult": { "type": "object", @@ -14964,7 +18283,9 @@ "description": "Partial signatures plus Turnkey commitments, one per request, in order." } }, - "required": ["signatures"] + "required": [ + "signatures" + ] }, "SparkSignatureRequest": { "type": "object", @@ -15010,7 +18331,9 @@ "description": "Unique identifier for the Spark signing leaf." } }, - "required": ["leafId"] + "required": [ + "leafId" + ] }, "SparkStaticDepositDerivation": { "type": "object", @@ -15021,7 +18344,9 @@ "description": "Index used to derive the static deposit key." } }, - "required": ["index"] + "required": [ + "index" + ] }, "SparkTransferLeaf": { "type": "object", @@ -15054,7 +18379,11 @@ "description": "Client-produced direct-from-CPFP refund signature (hex-encoded). Passed through verbatim." } }, - "required": ["leafId", "oldLeafDerivation", "newLeafDerivation"] + "required": [ + "leafId", + "oldLeafDerivation", + "newLeafDerivation" + ] }, "SparkTransferPackage": { "type": "object", @@ -15120,14 +18449,18 @@ "description": "Optional session profile ID to specify which Session Profile to use for this login. If not provided, the default read/write session will be used." } }, - "required": ["publicKey"] + "required": [ + "publicKey" + ] }, "StampLoginRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_STAMP_LOGIN"] + "enum": [ + "ACTIVITY_TYPE_STAMP_LOGIN" + ] }, "timestampMs": { "type": "string", @@ -15145,7 +18478,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "StampLoginResult": { "type": "object", @@ -15155,7 +18493,9 @@ "description": "Signed JWT containing an expiry, public key, session type, user id, and organization id" } }, - "required": ["session"] + "required": [ + "session" + ] }, "Status": { "type": "object", @@ -15178,7 +18518,10 @@ }, "TagType": { "type": "string", - "enum": ["TAG_TYPE_USER", "TAG_TYPE_PRIVATE_KEY"] + "enum": [ + "TAG_TYPE_USER", + "TAG_TYPE_PRIVATE_KEY" + ] }, "TokenUsage": { "type": "object", @@ -15201,7 +18544,10 @@ "$ref": "#/definitions/SignupUsageV2" } }, - "required": ["type", "tokenId"] + "required": [ + "type", + "tokenId" + ] }, "TransactionType": { "type": "string", @@ -15213,6 +18559,12 @@ "TRANSACTION_TYPE_TEMPO" ] }, + "TransportEncryptionSuite": { + "type": "string", + "enum": [ + "TRANSPORT_ENCRYPTION_SUITE_ENCLAVE_ENCRYPT_V1" + ] + }, "TvcApp": { "type": "object", "properties": { @@ -15257,11 +18609,11 @@ }, "publicDomain": { "type": "string", - "description": "The public domain for ingress to this TVC App (in the format \"app-\u003cID\u003e.turnkey.cloud\")." + "description": "The public domain for ingress to this TVC App (in the format \"app-.turnkey.cloud\")." }, "enableDebugModeDeployments": { "type": "boolean", - "description": "Whether this app permits debug-mode deployments. Set at app creation via CreateTvcAppIntent.enable_debug_mode_deployments and never updated thereafter. Debug-mode deployments expose logs and emit zero'd attestation PCRs, so remote attestation cannot succeed. The app's quorum key is therefore considered permanently insecure once enabled — a new app with a fresh quorum key must be created to return to a secure posture." + "description": "Whether this app permits debug-mode deployments. Set at app creation via CreateTvcAppIntent.enable_debug_mode_deployments and never updated thereafter. Debug-mode deployments expose logs and emit zero'd attestation PCRs, so remote attestation cannot succeed. The app's quorum key is therefore considered permanently insecure once enabled \u2014 a new app with a fresh quorum key must be created to return to a secure posture." } }, "required": [ @@ -15406,11 +18758,17 @@ "description": "Public replica label that produced this log line, for example 'replica 2/3'." } }, - "required": ["line", "replicaLabel"] + "required": [ + "line", + "replicaLabel" + ] }, "TvcHealthCheckType": { "type": "string", - "enum": ["TVC_HEALTH_CHECK_TYPE_HTTP", "TVC_HEALTH_CHECK_TYPE_GRPC"] + "enum": [ + "TVC_HEALTH_CHECK_TYPE_HTTP", + "TVC_HEALTH_CHECK_TYPE_GRPC" + ] }, "TvcManifest": { "type": "object", @@ -15431,7 +18789,12 @@ "$ref": "#/definitions/external.data.v1.Timestamp" } }, - "required": ["id", "manifest", "createdAt", "updatedAt"] + "required": [ + "id", + "manifest", + "createdAt", + "updatedAt" + ] }, "TvcManifestApproval": { "type": "object", @@ -15445,7 +18808,10 @@ "description": "Signature from the operator approving the manifest" } }, - "required": ["operatorId", "signature"] + "required": [ + "operatorId", + "signature" + ] }, "TvcOperator": { "type": "object", @@ -15469,7 +18835,13 @@ "$ref": "#/definitions/external.data.v1.Timestamp" } }, - "required": ["id", "name", "publicKey", "createdAt", "updatedAt"] + "required": [ + "id", + "name", + "publicKey", + "createdAt", + "updatedAt" + ] }, "TvcOperatorApproval": { "type": "object", @@ -15519,7 +18891,10 @@ "description": "Public key for this operator" } }, - "required": ["name", "publicKey"] + "required": [ + "name", + "publicKey" + ] }, "TvcOperatorSet": { "type": "object", @@ -15594,7 +18969,10 @@ "description": "The threshold of operators needed to reach consensus in this new Operator Set" } }, - "required": ["name", "threshold"] + "required": [ + "name", + "threshold" + ] }, "TxError": { "type": "object", @@ -15649,7 +19027,9 @@ "description": "Additional origins requests are allowed from besides Turnkey origins" } }, - "required": ["allowedOrigins"] + "required": [ + "allowedOrigins" + ] }, "UpdateAllowedOriginsResult": { "type": "object" @@ -15733,7 +19113,7 @@ "type": "integer", "format": "int32", "x-nullable": true, - "description": "Desired OTP code length (6–9)." + "description": "Desired OTP code length (6\u20139)." }, "sendFromEmailSenderName": { "type": "string", @@ -15751,6 +19131,11 @@ "type": "string" }, "description": "Whitelisted OAuth client IDs for social account linking. When a user authenticates via a social provider with an email matching an existing account, the accounts will be linked if the client ID is in this list and the issuer is considered a trusted provider." + }, + "captchaEnabled": { + "type": "boolean", + "x-nullable": true, + "description": "Whether captcha verification is required on sign up & otp init." } } }, @@ -15805,7 +19190,9 @@ "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_UPDATE_FIAT_ON_RAMP_CREDENTIAL"] + "enum": [ + "ACTIVITY_TYPE_UPDATE_FIAT_ON_RAMP_CREDENTIAL" + ] }, "timestampMs": { "type": "string", @@ -15823,7 +19210,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "UpdateFiatOnRampCredentialResult": { "type": "object", @@ -15833,7 +19225,9 @@ "description": "Unique identifier of the Fiat On-Ramp credential that was updated" } }, - "required": ["fiatOnRampCredentialId"] + "required": [ + "fiatOnRampCredentialId" + ] }, "UpdateMfaPolicyIntent": { "type": "object", @@ -15876,14 +19270,19 @@ "description": "Notes for an MFA Policy." } }, - "required": ["userId", "mfaPolicyId"] + "required": [ + "userId", + "mfaPolicyId" + ] }, "UpdateMfaPolicyRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_UPDATE_MFA_POLICY"] + "enum": [ + "ACTIVITY_TYPE_UPDATE_MFA_POLICY" + ] }, "timestampMs": { "type": "string", @@ -15897,7 +19296,12 @@ "$ref": "#/definitions/UpdateMfaPolicyIntent" } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "UpdateMfaPolicyResult": { "type": "object", @@ -15907,7 +19311,9 @@ "description": "Unique identifier for a given MFA Policy." } }, - "required": ["mfaPolicyId"] + "required": [ + "mfaPolicyId" + ] }, "UpdateOauth2CredentialIntent": { "type": "object", @@ -15941,7 +19347,9 @@ "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_UPDATE_OAUTH2_CREDENTIAL"] + "enum": [ + "ACTIVITY_TYPE_UPDATE_OAUTH2_CREDENTIAL" + ] }, "timestampMs": { "type": "string", @@ -15959,7 +19367,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "UpdateOauth2CredentialResult": { "type": "object", @@ -15969,7 +19382,9 @@ "description": "Unique identifier of the OAuth 2.0 credential that was updated" } }, - "required": ["oauth2CredentialId"] + "required": [ + "oauth2CredentialId" + ] }, "UpdateOrganizationNameIntent": { "type": "object", @@ -15979,14 +19394,18 @@ "description": "New name for the Organization." } }, - "required": ["organizationName"] + "required": [ + "organizationName" + ] }, "UpdateOrganizationNameRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_UPDATE_ORGANIZATION_NAME"] + "enum": [ + "ACTIVITY_TYPE_UPDATE_ORGANIZATION_NAME" + ] }, "timestampMs": { "type": "string", @@ -16004,7 +19423,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "UpdateOrganizationNameResult": { "type": "object", @@ -16018,7 +19442,10 @@ "description": "The updated organization name." } }, - "required": ["organizationId", "organizationName"] + "required": [ + "organizationId", + "organizationName" + ] }, "UpdatePolicyIntent": { "type": "object", @@ -16053,7 +19480,9 @@ "description": "Accompanying notes for a Policy (optional)." } }, - "required": ["policyId"] + "required": [ + "policyId" + ] }, "UpdatePolicyIntentV2": { "type": "object", @@ -16088,14 +19517,18 @@ "description": "Accompanying notes for a Policy (optional)." } }, - "required": ["policyId"] + "required": [ + "policyId" + ] }, "UpdatePolicyRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_UPDATE_POLICY_V2"] + "enum": [ + "ACTIVITY_TYPE_UPDATE_POLICY_V2" + ] }, "timestampMs": { "type": "string", @@ -16113,7 +19546,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "UpdatePolicyResult": { "type": "object", @@ -16123,7 +19561,9 @@ "description": "Unique identifier for a given Policy." } }, - "required": ["policyId"] + "required": [ + "policyId" + ] }, "UpdatePolicyResultV2": { "type": "object", @@ -16133,7 +19573,9 @@ "description": "Unique identifier for a given Policy." } }, - "required": ["policyId"] + "required": [ + "policyId" + ] }, "UpdatePrivateKeyTagIntent": { "type": "object", @@ -16162,14 +19604,20 @@ "description": "A list of Private Key IDs to remove this tag from." } }, - "required": ["privateKeyTagId", "addPrivateKeyIds", "removePrivateKeyIds"] + "required": [ + "privateKeyTagId", + "addPrivateKeyIds", + "removePrivateKeyIds" + ] }, "UpdatePrivateKeyTagRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_UPDATE_PRIVATE_KEY_TAG"] + "enum": [ + "ACTIVITY_TYPE_UPDATE_PRIVATE_KEY_TAG" + ] }, "timestampMs": { "type": "string", @@ -16187,7 +19635,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "UpdatePrivateKeyTagResult": { "type": "object", @@ -16197,7 +19650,9 @@ "description": "Unique identifier for a given Private Key Tag." } }, - "required": ["privateKeyTagId"] + "required": [ + "privateKeyTagId" + ] }, "UpdateRootQuorumIntent": { "type": "object", @@ -16215,14 +19670,19 @@ "description": "The unique identifiers of users who comprise the quorum set." } }, - "required": ["threshold", "userIds"] + "required": [ + "threshold", + "userIds" + ] }, "UpdateRootQuorumRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_UPDATE_ROOT_QUORUM"] + "enum": [ + "ACTIVITY_TYPE_UPDATE_ROOT_QUORUM" + ] }, "timestampMs": { "type": "string", @@ -16240,7 +19700,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "UpdateRootQuorumResult": { "type": "object" @@ -16253,14 +19718,18 @@ "description": "The unique identifier of the TVC deployment to set as live for the app." } }, - "required": ["deploymentId"] + "required": [ + "deploymentId" + ] }, "UpdateTvcAppLiveDeploymentRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_UPDATE_TVC_APP_LIVE_DEPLOYMENT"] + "enum": [ + "ACTIVITY_TYPE_UPDATE_TVC_APP_LIVE_DEPLOYMENT" + ] }, "timestampMs": { "type": "string", @@ -16278,7 +19747,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "UpdateTvcAppLiveDeploymentResult": { "type": "object" @@ -16300,14 +19774,19 @@ "description": "Signed JWT containing a unique id, expiry, verification type, contact" } }, - "required": ["userId", "userEmail"] + "required": [ + "userId", + "userEmail" + ] }, "UpdateUserEmailRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_UPDATE_USER_EMAIL"] + "enum": [ + "ACTIVITY_TYPE_UPDATE_USER_EMAIL" + ] }, "timestampMs": { "type": "string", @@ -16325,7 +19804,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "UpdateUserEmailResult": { "type": "object", @@ -16335,7 +19819,9 @@ "description": "Unique identifier of the User whose email was updated." } }, - "required": ["userId"] + "required": [ + "userId" + ] }, "UpdateUserIntent": { "type": "object", @@ -16367,7 +19853,9 @@ "description": "The user's phone number in E.164 format e.g. +13214567890" } }, - "required": ["userId"] + "required": [ + "userId" + ] }, "UpdateUserNameIntent": { "type": "object", @@ -16381,14 +19869,19 @@ "description": "Human-readable name for a User." } }, - "required": ["userId", "userName"] + "required": [ + "userId", + "userName" + ] }, "UpdateUserNameRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_UPDATE_USER_NAME"] + "enum": [ + "ACTIVITY_TYPE_UPDATE_USER_NAME" + ] }, "timestampMs": { "type": "string", @@ -16406,7 +19899,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "UpdateUserNameResult": { "type": "object", @@ -16416,7 +19914,9 @@ "description": "Unique identifier of the User whose name was updated." } }, - "required": ["userId"] + "required": [ + "userId" + ] }, "UpdateUserPhoneNumberIntent": { "type": "object", @@ -16435,14 +19935,19 @@ "description": "Signed JWT containing a unique id, expiry, verification type, contact" } }, - "required": ["userId", "userPhoneNumber"] + "required": [ + "userId", + "userPhoneNumber" + ] }, "UpdateUserPhoneNumberRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_UPDATE_USER_PHONE_NUMBER"] + "enum": [ + "ACTIVITY_TYPE_UPDATE_USER_PHONE_NUMBER" + ] }, "timestampMs": { "type": "string", @@ -16460,7 +19965,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "UpdateUserPhoneNumberResult": { "type": "object", @@ -16470,14 +19980,18 @@ "description": "Unique identifier of the User whose phone number was updated." } }, - "required": ["userId"] + "required": [ + "userId" + ] }, "UpdateUserRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_UPDATE_USER"] + "enum": [ + "ACTIVITY_TYPE_UPDATE_USER" + ] }, "timestampMs": { "type": "string", @@ -16495,7 +20009,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "UpdateUserResult": { "type": "object", @@ -16505,7 +20024,9 @@ "description": "A User ID." } }, - "required": ["userId"] + "required": [ + "userId" + ] }, "UpdateUserTagIntent": { "type": "object", @@ -16534,14 +20055,20 @@ "description": "A list of User IDs to remove this tag from." } }, - "required": ["userTagId", "addUserIds", "removeUserIds"] + "required": [ + "userTagId", + "addUserIds", + "removeUserIds" + ] }, "UpdateUserTagRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_UPDATE_USER_TAG"] + "enum": [ + "ACTIVITY_TYPE_UPDATE_USER_TAG" + ] }, "timestampMs": { "type": "string", @@ -16559,7 +20086,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "UpdateUserTagResult": { "type": "object", @@ -16569,7 +20101,38 @@ "description": "Unique identifier for a given User Tag." } }, - "required": ["userTagId"] + "required": [ + "userTagId" + ] + }, + "UpdateWalletAccountNameIntent": { + "type": "object", + "properties": { + "walletAccountId": { + "type": "string", + "description": "Unique identifier for a given Wallet Account." + }, + "name": { + "type": "string", + "description": "Human-readable name for this Wallet Account." + } + }, + "required": [ + "walletAccountId", + "name" + ] + }, + "UpdateWalletAccountNameResult": { + "type": "object", + "properties": { + "walletAccountId": { + "type": "string", + "description": "Unique identifier for a given Wallet Account." + } + }, + "required": [ + "walletAccountId" + ] }, "UpdateWalletIntent": { "type": "object", @@ -16583,14 +20146,18 @@ "description": "Human-readable name for a Wallet." } }, - "required": ["walletId"] + "required": [ + "walletId" + ] }, "UpdateWalletRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_UPDATE_WALLET"] + "enum": [ + "ACTIVITY_TYPE_UPDATE_WALLET" + ] }, "timestampMs": { "type": "string", @@ -16608,7 +20175,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "UpdateWalletResult": { "type": "object", @@ -16618,7 +20190,9 @@ "description": "A Wallet ID." } }, - "required": ["walletId"] + "required": [ + "walletId" + ] }, "UpdateWebhookEndpointIntent": { "type": "object", @@ -16643,14 +20217,18 @@ "description": "Whether this webhook endpoint is active." } }, - "required": ["endpointId"] + "required": [ + "endpointId" + ] }, "UpdateWebhookEndpointRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_UPDATE_WEBHOOK_ENDPOINT"] + "enum": [ + "ACTIVITY_TYPE_UPDATE_WEBHOOK_ENDPOINT" + ] }, "timestampMs": { "type": "string", @@ -16668,7 +20246,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "UpdateWebhookEndpointResult": { "type": "object", @@ -16682,7 +20265,10 @@ "description": "The updated webhook endpoint data." } }, - "required": ["endpointId", "webhookEndpoint"] + "required": [ + "endpointId", + "webhookEndpoint" + ] }, "UpsertGasUsageConfigIntent": { "type": "object", @@ -16723,11 +20309,56 @@ "description": "Unique identifier for the gas usage configuration that was created or updated." } }, - "required": ["gasUsageConfigId"] + "required": [ + "gasUsageConfigId" + ] + }, + "UpsertSwapConfigIntent": { + "type": "object", + "properties": { + "feeReceiverWalletAddress": { + "type": "string", + "x-nullable": true + }, + "feeBps": { + "type": "string", + "x-nullable": true, + "description": "Client fee in basis points applied to swaps; used for all pairs unless stable_fee_bps is set." + }, + "provider": { + "type": "string", + "x-nullable": true + }, + "stableFeeBps": { + "type": "string", + "x-nullable": true, + "description": "Optional override applied when both swap assets are stablecoins; falls back to fee_bps when unset." + } + } + }, + "UpsertSwapConfigResult": { + "type": "object", + "properties": { + "feeReceiverWalletAddress": { + "type": "string", + "x-nullable": true + }, + "feeBps": { + "type": "string", + "x-nullable": true + }, + "stableFeeBps": { + "type": "string", + "x-nullable": true + } + } }, "UsageType": { "type": "string", - "enum": ["USAGE_TYPE_SIGNUP", "USAGE_TYPE_LOGIN"] + "enum": [ + "USAGE_TYPE_SIGNUP", + "USAGE_TYPE_LOGIN" + ] }, "User": { "type": "object", @@ -16892,7 +20523,12 @@ "description": "A list of User Tag IDs. This field, if not needed, should be an empty array in your request body." } }, - "required": ["userName", "apiKeys", "authenticators", "userTags"] + "required": [ + "userName", + "apiKeys", + "authenticators", + "userTags" + ] }, "UserParamsV3": { "type": "object", @@ -17025,7 +20661,10 @@ "description": "HPKE-encrypted pull secret for private images." } }, - "required": ["organizationId", "pivotContainerImageUrl"] + "required": [ + "organizationId", + "pivotContainerImageUrl" + ] }, "ValidateTvcImageResponse": { "type": "object", @@ -17057,7 +20696,10 @@ "description": "Client-side public key generated by the user, which will be added to the JWT response and verified in subsequent requests via a client proof signature" } }, - "required": ["otpId", "otpCode"] + "required": [ + "otpId", + "otpCode" + ] }, "VerifyOtpIntentV2": { "type": "object", @@ -17076,14 +20718,19 @@ "description": "Expiration window (in seconds) indicating how long the verification token is valid for. If not provided, a default of 1 hour will be used. Maximum value is 86400 seconds (24 hours)" } }, - "required": ["otpId", "encryptedOtpBundle"] + "required": [ + "otpId", + "encryptedOtpBundle" + ] }, "VerifyOtpRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": ["ACTIVITY_TYPE_VERIFY_OTP_V2"] + "enum": [ + "ACTIVITY_TYPE_VERIFY_OTP_V2" + ] }, "timestampMs": { "type": "string", @@ -17101,7 +20748,12 @@ "x-nullable": true } }, - "required": ["type", "timestampMs", "organizationId", "parameters"] + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] }, "VerifyOtpResult": { "type": "object", @@ -17111,7 +20763,9 @@ "description": "Signed JWT containing a unique id, expiry, verification type, contact. Verification status of a user is updated when the token is consumed (in OTP_LOGIN requests)" } }, - "required": ["verificationToken"] + "required": [ + "verificationToken" + ] }, "Vote": { "type": "object", @@ -17134,7 +20788,10 @@ }, "selection": { "type": "string", - "enum": ["VOTE_SELECTION_APPROVED", "VOTE_SELECTION_REJECTED"] + "enum": [ + "VOTE_SELECTION_APPROVED", + "VOTE_SELECTION_REJECTED" + ] }, "message": { "type": "string", @@ -17299,7 +20956,12 @@ "description": "Optional human-readable name for the account." } }, - "required": ["curve", "pathFormat", "path", "addressFormat"] + "required": [ + "curve", + "pathFormat", + "path", + "addressFormat" + ] }, "WalletKitSettingsParams": { "type": "object", @@ -17349,7 +21011,10 @@ "description": "Length of mnemonic to generate the Wallet seed. Defaults to 12. Accepted values: 12, 15, 18, 21, 24." } }, - "required": ["walletName", "accounts"] + "required": [ + "walletName", + "accounts" + ] }, "WalletResult": { "type": "object", @@ -17365,7 +21030,10 @@ "description": "A list of account addresses." } }, - "required": ["walletId", "addresses"] + "required": [ + "walletId", + "addresses" + ] }, "WebAuthnStamp": { "type": "object", @@ -17426,7 +21094,13 @@ "description": "Current subscriptions attached to this endpoint." } }, - "required": ["endpointId", "organizationId", "url", "name", "isActive"] + "required": [ + "endpointId", + "organizationId", + "url", + "name", + "isActive" + ] }, "WebhookSubscriptionParams": { "type": "object", @@ -17446,7 +21120,9 @@ "description": "Whether this subscription is active." } }, - "required": ["eventType"] + "required": [ + "eventType" + ] }, "activity.v1.Address": { "type": "object", @@ -17523,7 +21199,9 @@ }, "data.v1.SignatureScheme": { "type": "string", - "enum": ["SIGNATURE_SCHEME_EPHEMERAL_KEY_P256"] + "enum": [ + "SIGNATURE_SCHEME_EPHEMERAL_KEY_P256" + ] }, "data.v1.SmartContractInterface": { "type": "object", @@ -17591,7 +21269,10 @@ "description": "The session profile associated with this credential, if any. This field is only applicable for credentials of type CREDENTIAL_TYPE_LOGIN." } }, - "required": ["publicKey", "type"] + "required": [ + "publicKey", + "type" + ] }, "external.data.v1.Quorum": { "type": "object", @@ -17609,7 +21290,10 @@ "description": "Unique identifiers of quorum set members." } }, - "required": ["threshold", "userIds"] + "required": [ + "threshold", + "userIds" + ] }, "external.data.v1.Timestamp": { "type": "object", @@ -17621,7 +21305,10 @@ "type": "string" } }, - "required": ["seconds", "nanos"] + "required": [ + "seconds", + "nanos" + ] }, "v1.Tag": { "type": "object", @@ -17644,7 +21331,13 @@ "$ref": "#/definitions/external.data.v1.Timestamp" } }, - "required": ["tagId", "tagName", "tagType", "createdAt", "updatedAt"] + "required": [ + "tagId", + "tagName", + "tagType", + "createdAt", + "updatedAt" + ] } }, "securityDefinitions": { @@ -17685,19 +21378,36 @@ }, { "name": "WALLETS AND PRIVATE KEYS", - "tags": ["Wallets", "Signing", "Private Keys", "Private Key Tags"] + "tags": [ + "Wallets", + "Signing", + "Private Keys", + "Private Key Tags" + ] }, { "name": "USERS", - "tags": ["Users", "User Tags", "User Recovery", "User Auth"] + "tags": [ + "Users", + "User Tags", + "User Recovery", + "User Auth" + ] }, { "name": "CREDENTIALS", - "tags": ["Authenticators", "API Keys", "Sessions"] + "tags": [ + "Authenticators", + "API Keys", + "Sessions" + ] }, { "name": "ACTIVITIES", - "tags": ["Activities", "Consensus"] + "tags": [ + "Activities", + "Consensus" + ] } ] } diff --git a/scripts/openapi-gen/openapi.json b/scripts/openapi-gen/openapi.json index 841e243b..78703238 100644 --- a/scripts/openapi-gen/openapi.json +++ b/scripts/openapi-gen/openapi.json @@ -302,6 +302,102 @@ } } }, + "/public/v1/query/get_earn_deploy_status": { + "post": { + "tags": [ + "Earn" + ], + "summary": "Get Earn deploy status", + "description": "Poll the status of a wrapper deployment by its deploy_request_id.", + "operationId": "GetEarnDeployStatus", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetEarnDeployStatusRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetEarnDeployStatusResponse" + } + } + } + } + } + } + }, + "/public/v1/query/get_earn_deposit_status": { + "post": { + "tags": [ + "Earn" + ], + "summary": "Get Earn deposit status", + "description": "Poll the status of a deposit by its deposit_request_id (for the async/sponsored deposit path).", + "operationId": "GetEarnDepositStatus", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetEarnDepositStatusRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetEarnDepositStatusResponse" + } + } + } + } + } + } + }, + "/public/v1/query/get_earn_withdraw_status": { + "post": { + "tags": [ + "Earn" + ], + "summary": "Get Earn withdraw status", + "description": "Poll the status of a withdrawal by its withdraw_request_id.", + "operationId": "GetEarnWithdrawStatus", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetEarnWithdrawStatusRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetEarnWithdrawStatusResponse" + } + } + } + } + } + } + }, "/public/v1/query/get_gas_usage": { "post": { "tags": [ @@ -1163,6 +1259,102 @@ } } }, + "/public/v1/query/list_earn_enabled_vaults": { + "post": { + "tags": [ + "Earn" + ], + "summary": "Get Earn enabled vaults", + "description": "Get the organization's deployed wrappers with on-chain total deposited and live APY. The management view, distinct from per-wallet positions.", + "operationId": "ListEarnEnabledVaults", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListEarnEnabledVaultsRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListEarnEnabledVaultsResponse" + } + } + } + } + } + } + }, + "/public/v1/query/list_earn_positions": { + "post": { + "tags": [ + "Earn" + ], + "summary": "Get Earn positions", + "description": "Get the active Earn positions for a specific wallet, including current value, cost basis, yield, and projected fees.", + "operationId": "ListEarnPositions", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListEarnPositionsRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListEarnPositionsResponse" + } + } + } + } + } + } + }, + "/public/v1/query/list_earn_vaults": { + "post": { + "tags": [ + "Earn" + ], + "summary": "Get Earn vault catalog", + "description": "Get the catalog of all wrappable yield vaults across supported chains, enriched with live TVL and APY. Annotates which vaults the organization has already enabled.", + "operationId": "ListEarnVaults", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListEarnVaultsRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListEarnVaultsResponse" + } + } + } + } + } + } + }, "/public/v1/query/list_fiat_on_ramp_credentials": { "post": { "tags": [ @@ -1771,6 +1963,38 @@ } } }, + "/public/v1/submit/claim_earn_fees": { + "post": { + "tags": [ + "Earn" + ], + "summary": "Claim earn fees", + "description": "Claim earn fees through the activity pipeline.", + "operationId": "ClaimEarnFees", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ClaimEarnFeesRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, "/public/v1/submit/create_api_keys": { "post": { "tags": [ @@ -3179,19 +3403,19 @@ } } }, - "/public/v1/submit/email_auth": { + "/public/v1/submit/earn_deploy_wrapper": { "post": { "tags": [ - "User Auth" + "Earn" ], - "summary": "Perform email auth", - "description": "Authenticate a user via email.", - "operationId": "EmailAuth", + "summary": "Deploy Earn wrapper", + "description": "Enable a yield vault for an organization by deploying its fee wrapper. Must be called before any deposits into the vault.", + "operationId": "EarnDeployWrapper", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EmailAuthRequest" + "$ref": "#/components/schemas/EarnDeployWrapperRequest" } } }, @@ -3211,19 +3435,19 @@ } } }, - "/public/v1/submit/eth_send_transaction": { + "/public/v1/submit/earn_deposit": { "post": { "tags": [ - "Broadcasting" + "Earn" ], - "summary": "Broadcast EVM transaction", - "description": "Submit a transaction intent describing an EVM transaction you would like to broadcast.", - "operationId": "EthSendTransaction", + "summary": "Deposit into Earn vault", + "description": "Deposit assets from a wallet into an enabled yield vault.", + "operationId": "EarnDeposit", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EthSendTransactionRequest" + "$ref": "#/components/schemas/EarnDepositRequest" } } }, @@ -3243,19 +3467,19 @@ } } }, - "/public/v1/submit/export_private_key": { + "/public/v1/submit/earn_set_wrapper_state": { "post": { "tags": [ - "Private Keys" + "Earn" ], - "summary": "Export private key", - "description": "Export a private key.", - "operationId": "ExportPrivateKey", + "summary": "Set Earn wrapper state", + "description": "Enable or disable deposits to a deployed Earn wrapper. Withdrawals are always allowed.", + "operationId": "EarnSetWrapperState", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ExportPrivateKeyRequest" + "$ref": "#/components/schemas/EarnSetWrapperStateRequest" } } }, @@ -3275,19 +3499,19 @@ } } }, - "/public/v1/submit/export_wallet": { + "/public/v1/submit/earn_withdraw": { "post": { "tags": [ - "Wallets" + "Earn" ], - "summary": "Export wallet", - "description": "Export a wallet.", - "operationId": "ExportWallet", + "summary": "Withdraw from Earn vault", + "description": "Withdraw assets or redeem shares from an enabled yield vault.", + "operationId": "EarnWithdraw", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ExportWalletRequest" + "$ref": "#/components/schemas/EarnWithdrawRequest" } } }, @@ -3307,19 +3531,19 @@ } } }, - "/public/v1/submit/export_wallet_account": { + "/public/v1/submit/email_auth": { "post": { "tags": [ - "Wallets" + "User Auth" ], - "summary": "Export wallet account", - "description": "Export a wallet account.", - "operationId": "ExportWalletAccount", + "summary": "Perform email auth", + "description": "Authenticate a user via email.", + "operationId": "EmailAuth", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ExportWalletAccountRequest" + "$ref": "#/components/schemas/EmailAuthRequest" } } }, @@ -3339,19 +3563,19 @@ } } }, - "/public/v1/submit/import_private_key": { + "/public/v1/submit/eth_send_transaction": { "post": { "tags": [ - "Private Keys" + "Broadcasting" ], - "summary": "Import private key", - "description": "Import a private key.", - "operationId": "ImportPrivateKey", + "summary": "Broadcast EVM transaction", + "description": "Submit a transaction intent describing an EVM transaction you would like to broadcast.", + "operationId": "EthSendTransaction", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ImportPrivateKeyRequest" + "$ref": "#/components/schemas/EthSendTransactionRequest" } } }, @@ -3371,19 +3595,19 @@ } } }, - "/public/v1/submit/import_wallet": { + "/public/v1/submit/export_private_key": { "post": { "tags": [ - "Wallets" + "Private Keys" ], - "summary": "Import wallet", - "description": "Import a wallet.", - "operationId": "ImportWallet", + "summary": "Export private key", + "description": "Export a private key.", + "operationId": "ExportPrivateKey", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ImportWalletRequest" + "$ref": "#/components/schemas/ExportPrivateKeyRequest" } } }, @@ -3403,19 +3627,19 @@ } } }, - "/public/v1/submit/init_fiat_on_ramp": { + "/public/v1/submit/export_wallet": { "post": { "tags": [ - "On Ramp" + "Wallets" ], - "summary": "Init fiat on ramp", - "description": "Initiate a fiat on ramp flow.", - "operationId": "InitFiatOnRamp", + "summary": "Export wallet", + "description": "Export a wallet.", + "operationId": "ExportWallet", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/InitFiatOnRampRequest" + "$ref": "#/components/schemas/ExportWalletRequest" } } }, @@ -3435,15 +3659,143 @@ } } }, - "/public/v1/submit/init_import_private_key": { + "/public/v1/submit/export_wallet_account": { "post": { "tags": [ - "Private Keys" + "Wallets" ], - "summary": "Init import private key", - "description": "Initialize a new private key import.", - "operationId": "InitImportPrivateKey", - "requestBody": { + "summary": "Export wallet account", + "description": "Export a wallet account.", + "operationId": "ExportWalletAccount", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ExportWalletAccountRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/import_private_key": { + "post": { + "tags": [ + "Private Keys" + ], + "summary": "Import private key", + "description": "Import a private key.", + "operationId": "ImportPrivateKey", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ImportPrivateKeyRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/import_wallet": { + "post": { + "tags": [ + "Wallets" + ], + "summary": "Import wallet", + "description": "Import a wallet.", + "operationId": "ImportWallet", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ImportWalletRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/init_fiat_on_ramp": { + "post": { + "tags": [ + "On Ramp" + ], + "summary": "Init fiat on ramp", + "description": "Initiate a fiat on ramp flow.", + "operationId": "InitFiatOnRamp", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InitFiatOnRampRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/init_import_private_key": { + "post": { + "tags": [ + "Private Keys" + ], + "summary": "Init import private key", + "description": "Initialize a new private key import.", + "operationId": "InitImportPrivateKey", + "requestBody": { "content": { "application/json": { "schema": { @@ -5151,7 +5503,21 @@ "ACTIVITY_TYPE_CREATE_MFA_POLICY", "ACTIVITY_TYPE_UPDATE_MFA_POLICY", "ACTIVITY_TYPE_DELETE_MFA_POLICY", - "ACTIVITY_TYPE_CREATE_SESSION_PROFILE" + "ACTIVITY_TYPE_CREATE_SESSION_PROFILE", + "ACTIVITY_TYPE_EARN_DEPLOY_WRAPPER", + "ACTIVITY_TYPE_EARN_DEPOSIT", + "ACTIVITY_TYPE_EARN_WITHDRAW", + "ACTIVITY_TYPE_EXECUTE_SWAP", + "ACTIVITY_TYPE_UPSERT_SWAP_CONFIG", + "ACTIVITY_TYPE_CREATE_TVC_OPERATOR", + "ACTIVITY_TYPE_CREATE_TVC_QUORUM_KEY", + "ACTIVITY_TYPE_RE_ENCRYPT_TVC_QUORUM_KEY_SHARE", + "ACTIVITY_TYPE_INIT_IMPORT_SECRETS", + "ACTIVITY_TYPE_SOL_SEND_TRANSACTION_V2", + "ACTIVITY_TYPE_CLAIM_SWAP_FEES", + "ACTIVITY_TYPE_EARN_SET_WRAPPER_STATE", + "ACTIVITY_TYPE_CLAIM_EARN_FEES", + "ACTIVITY_TYPE_UPDATE_WALLET_ACCOUNT_NAME" ] }, "AddressFormat": { @@ -5770,6 +6136,77 @@ "bootProof" ] }, + "ClaimEarnFeesIntent": { + "type": "object", + "properties": { + "wrapperAddress": { + "type": "string", + "description": "Address of the deployed Earn wrapper to claim fees for. Must be one of the org's deployed wrappers." + } + }, + "required": [ + "wrapperAddress" + ] + }, + "ClaimEarnFeesRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_CLAIM_EARN_FEES" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/ClaimEarnFeesIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "ClaimEarnFeesResult": { + "type": "object", + "properties": { + "claimRequestId": { + "type": "string", + "description": "Identifier to poll claim status and tx hash via GetClaimEarnFeesStatus." + } + }, + "required": [ + "claimRequestId" + ] + }, + "ClaimSwapFeesIntent": { + "type": "object" + }, + "ClaimSwapFeesResult": { + "type": "object", + "properties": { + "requestId": { + "type": "string", + "description": "Relay claim request ID submitted through the permit endpoint." + } + }, + "required": [ + "requestId" + ] + }, "ClientSignature": { "type": "object", "properties": { @@ -7848,6 +8285,12 @@ "type": "integer", "format": "int64", "description": "Port to use for public ingress." + }, + "replicas": { + "type": "integer", + "format": "int64", + "description": "Optional desired replica count for this deployment.", + "nullable": true } }, "required": [ @@ -7970,82 +8413,182 @@ "approvalIds" ] }, - "CreateUserTagIntent": { + "CreateTvcOperatorIntent": { "type": "object", "properties": { - "userTagName": { + "walletName": { "type": "string", - "description": "Human-readable name for a User Tag." + "description": "Human-readable name for a new wallet created for this TVC operator", + "nullable": true }, - "userIds": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of User IDs." + "walletId": { + "type": "string", + "description": "Unique identifier for an existing wallet to reuse for this TVC operator", + "nullable": true + }, + "path": { + "type": "string", + "description": "Base derivation path for creating TVC operator wallet accounts" + }, + "operatorName": { + "type": "string", + "description": "Human-readable name for this new TVC operator" } }, "required": [ - "userTagName", - "userIds" + "path", + "operatorName" ] }, - "CreateUserTagRequest": { + "CreateTvcOperatorResult": { "type": "object", "properties": { - "type": { + "walletId": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_CREATE_USER_TAG" - ] + "description": "The unique identifier for the wallet containing TVC operator accounts" }, - "timestampMs": { + "operatorId": { "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + "description": "The unique identifier for the TVC operator" }, - "organizationId": { + "encryptPublicKey": { "type": "string", - "description": "Unique identifier for a given Organization." + "description": "Public encryption key for this TVC operator" }, - "parameters": { - "$ref": "#/components/schemas/CreateUserTagIntent" - }, - "generateAppProofs": { - "type": "boolean", - "nullable": true + "signPublicKey": { + "type": "string", + "description": "Public signing key for this TVC operator" } }, "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" + "walletId", + "operatorId", + "encryptPublicKey", + "signPublicKey" ] }, - "CreateUserTagResult": { + "CreateTvcQuorumKeyIntent": { "type": "object", "properties": { - "userTagId": { - "type": "string", - "description": "Unique identifier for a given User Tag." + "threshold": { + "type": "integer", + "format": "int64", + "description": "The threshold of operators needed to reassemble this TVC quorum key" }, - "userIds": { + "operatorEncryptKeys": { "type": "array", "items": { "type": "string" }, - "description": "A list of User IDs." + "description": "Operator public keys used to encrypt and later approve the generated TVC quorum key shares" } }, "required": [ - "userTagId", - "userIds" + "threshold", + "operatorEncryptKeys" ] }, - "CreateUsersIntent": { + "CreateTvcQuorumKeyResult": { "type": "object", "properties": { - "users": { + "quorumKeyId": { + "type": "string", + "description": "The unique identifier for the TVC quorum key" + }, + "quorumPublicKey": { + "type": "string", + "description": "Public key for the generated TVC quorum key" + }, + "shareIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The unique identifier(s) for the generated TVC quorum key shares" + } + }, + "required": [ + "quorumKeyId", + "quorumPublicKey", + "shareIds" + ] + }, + "CreateUserTagIntent": { + "type": "object", + "properties": { + "userTagName": { + "type": "string", + "description": "Human-readable name for a User Tag." + }, + "userIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User IDs." + } + }, + "required": [ + "userTagName", + "userIds" + ] + }, + "CreateUserTagRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_CREATE_USER_TAG" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/CreateUserTagIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "CreateUserTagResult": { + "type": "object", + "properties": { + "userTagId": { + "type": "string", + "description": "Unique identifier for a given User Tag." + }, + "userIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User IDs." + } + }, + "required": [ + "userTagId", + "userIds" + ] + }, + "CreateUsersIntent": { + "type": "object", + "properties": { + "users": { "type": "array", "items": { "$ref": "#/components/schemas/UserParams" @@ -9643,20 +10186,588 @@ "properties": { "endpointId": { "type": "string", - "description": "Unique identifier of the webhook endpoint to delete." + "description": "Unique identifier of the webhook endpoint to delete." + } + }, + "required": [ + "endpointId" + ] + }, + "DeleteWebhookEndpointRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_DELETE_WEBHOOK_ENDPOINT" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/DeleteWebhookEndpointIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "DeleteWebhookEndpointResult": { + "type": "object", + "properties": { + "endpointId": { + "type": "string", + "description": "Unique identifier of the deleted webhook endpoint." + } + }, + "required": [ + "endpointId" + ] + }, + "DeploymentStatus": { + "type": "object", + "properties": { + "deploymentId": { + "type": "string", + "description": "Unique identifier for this deployment (corresponds to k8s deployment label)" + }, + "readyReplicas": { + "type": "integer", + "format": "int32", + "description": "Number of ready replicas" + }, + "desiredReplicas": { + "type": "integer", + "format": "int32", + "description": "Desired number of replicas" + }, + "lastUpdatedTime": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + } + }, + "required": [ + "deploymentId", + "readyReplicas", + "desiredReplicas", + "lastUpdatedTime" + ] + }, + "DisableAuthProxyIntent": { + "type": "object" + }, + "DisableAuthProxyResult": { + "type": "object" + }, + "DisablePrivateKeyIntent": { + "type": "object", + "properties": { + "privateKeyId": { + "type": "string", + "description": "Unique identifier for a given Private Key." + } + }, + "required": [ + "privateKeyId" + ] + }, + "DisablePrivateKeyResult": { + "type": "object", + "properties": { + "privateKeyId": { + "type": "string", + "description": "Unique identifier for a given Private Key." + } + }, + "required": [ + "privateKeyId" + ] + }, + "EarnDeployWrapperIntent": { + "type": "object", + "properties": { + "vaultAddress": { + "type": "string", + "description": "Address of the underlying yield vault to wrap (from the ListEarnVaults catalog)." + }, + "chainCaip2": { + "type": "string", + "enum": [ + "eip155:1", + "eip155:8453", + "eip155:42161", + "eip155:137", + "eip155:56", + "eip155:4217" + ], + "description": "CAIP-2 chain ID the vault lives on (e.g., 'eip155:8453' for Base)." + }, + "clientFeeBps": { + "type": "string", + "description": "Your performance fee on gross yield, in basis points (e.g., '2000' for 20%). Your fee plus Turnkey's fee cannot exceed 50% of yield." + }, + "clientFeeWallet": { + "type": "string", + "description": "The wallet address that receives the client's fee payouts on-chain. Must be a Turnkey-managed wallet address." + } + }, + "required": [ + "vaultAddress", + "chainCaip2", + "clientFeeBps", + "clientFeeWallet" + ] + }, + "EarnDeployWrapperRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_EARN_DEPLOY_WRAPPER" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/EarnDeployWrapperIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "EarnDeployWrapperResult": { + "type": "object", + "properties": { + "wrapperAddress": { + "type": "string", + "description": "Address of the deployed fee wrapper (the deposit target)." + }, + "splitterAddress": { + "type": "string", + "description": "Address of the deployed fee splitter (PaymentSplitter for Morpho, RevenueSplitterOwner for Aave)." + }, + "deployRequestId": { + "type": "string", + "description": "Identifier to poll deploy status." + } + }, + "required": [ + "wrapperAddress", + "splitterAddress", + "deployRequestId" + ] + }, + "EarnDepositIntent": { + "type": "object", + "properties": { + "wrapperAddress": { + "type": "string", + "description": "Address of the deployed Earn wrapper to deposit into, from ListEarnVaults/ListEarnPositions. Must be one of the org's deployed wrappers." + }, + "signWith": { + "type": "string", + "description": "A Wallet account address or Private Key address to deposit from and sign with. Must be an on-chain address; Private Key identifiers are not supported." + }, + "assets": { + "type": "string", + "description": "Amount of the underlying asset to deposit, in raw on-chain units (e.g., '1000000' for 1 USDC at 6 decimals)." + }, + "chainCaip2": { + "type": "string", + "enum": [ + "eip155:1", + "eip155:8453", + "eip155:42161", + "eip155:137", + "eip155:56", + "eip155:4217" + ], + "description": "CAIP-2 chain ID the vault lives on (e.g., 'eip155:8453' for Base)." + }, + "sponsor": { + "type": "boolean", + "description": "Whether to sponsor this transaction via Gas Station.", + "nullable": true + } + }, + "required": [ + "wrapperAddress", + "signWith", + "assets", + "chainCaip2" + ] + }, + "EarnDepositRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_EARN_DEPOSIT" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/EarnDepositIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "EarnDepositResult": { + "type": "object", + "properties": { + "depositRequestId": { + "type": "string", + "description": "Identifier to poll deposit status and tx hash via GetEarnDepositStatus." + } + }, + "required": [ + "depositRequestId" + ] + }, + "EarnEnabledVault": { + "type": "object", + "properties": { + "vaultAddress": { + "type": "string", + "description": "Address of the underlying yield vault." + }, + "wrapperAddress": { + "type": "string", + "description": "Address of the deployed fee wrapper (the deposit target)." + }, + "provider": { + "$ref": "#/components/schemas/EarnProvider" + }, + "caip19": { + "type": "string", + "description": "CAIP-19 asset ID of the vault's underlying asset (e.g. 'eip155:8453/erc20:0x833589...'); the chain is encoded in the identifier." + }, + "apyPct": { + "type": "string", + "description": "Gross annual percentage yield, expressed as a decimal fraction (before Turnkey and client fees)." + }, + "totalDeposited": { + "type": "string", + "description": "Total deposited through this wrapper (wrapper TVL), in raw on-chain units of the underlying asset." + }, + "display": { + "$ref": "#/components/schemas/EarnValueDisplay" + }, + "netApyPct": { + "type": "string", + "description": "Annual percentage yield net of the Turnkey and client performance fees, expressed as a decimal fraction." + }, + "clientFeeBps": { + "type": "string", + "description": "Client performance fee taken on yield, in basis points. Currently org-wide; moving to a per-vault setting." + }, + "depositsDisabled": { + "type": "boolean", + "description": "When true, deposits to this wrapper are rejected; withdrawals are unaffected. Toggled via EarnSetWrapperState." + }, + "name": { + "type": "string", + "description": "Human-readable vault name from the provider (e.g. 'Steakhouse Prime USDC' for Morpho; the reserve symbol for Aave)." + }, + "curator": { + "type": "string", + "description": "Vault curator name(s), comma-separated when a vault has multiple. Empty for providers without curators (e.g. Aave)." + }, + "claimableClientFee": { + "type": "string", + "description": "The client's claimable performance fee (releasable now), in raw on-chain units of the underlying asset (the caip19 asset). Turnkey's fee is excluded. Only returned to the parent org; unset when a sub-org queries.", + "nullable": true + }, + "claimableClientFeeDisplay": { + "$ref": "#/components/schemas/EarnValueDisplay" + } + } + }, + "EarnPosition": { + "type": "object", + "properties": { + "vaultAddress": { + "type": "string", + "description": "Address of the underlying yield vault." + }, + "wrapperAddress": { + "type": "string", + "description": "Address of the fee wrapper holding the position." + }, + "provider": { + "$ref": "#/components/schemas/EarnProvider" + }, + "caip19": { + "type": "string", + "description": "CAIP-19 asset ID of the vault's underlying asset (e.g. 'eip155:8453/erc20:0x833589...'); the chain is encoded in the identifier." + }, + "currentValue": { + "type": "string", + "description": "Current value of the position in the underlying asset, in raw on-chain units (already net of the wrapper fee)." + }, + "totalDeposited": { + "type": "string", + "description": "Lifetime total deposited into this position, in raw on-chain units." + }, + "totalWithdrawn": { + "type": "string", + "description": "Lifetime total withdrawn from this position, in raw on-chain units." + }, + "display": { + "$ref": "#/components/schemas/EarnPositionDisplay" + }, + "depositsDisabled": { + "type": "boolean", + "description": "When true, deposits to this wrapper are rejected; withdrawals are unaffected. Toggled via EarnSetWrapperState." + } + } + }, + "EarnPositionDisplay": { + "type": "object", + "properties": { + "currentValueUsd": { + "type": "string", + "description": "Current value in USD, for display only." + }, + "totalDepositedUsd": { + "type": "string", + "description": "Total deposited in USD, for display only." + }, + "totalWithdrawnUsd": { + "type": "string", + "description": "Total withdrawn in USD, for display only." + }, + "currentValueCrypto": { + "type": "string", + "description": "Current value in the asset's own units, for display only." + }, + "totalDepositedCrypto": { + "type": "string", + "description": "Total deposited in the asset's own units, for display only." + }, + "totalWithdrawnCrypto": { + "type": "string", + "description": "Total withdrawn in the asset's own units, for display only." + } + } + }, + "EarnProvider": { + "type": "string", + "enum": [ + "EARN_PROVIDER_MORPHO", + "EARN_PROVIDER_AAVE" + ] + }, + "EarnSetWrapperStateIntent": { + "type": "object", + "properties": { + "wrapperAddress": { + "type": "string", + "description": "Address of the deployed Earn wrapper to update, from ListEarnVaults/ListEarnPositions. Must be one of the org's deployed wrappers." + }, + "depositsDisabled": { + "type": "boolean", + "description": "When true, deposits to this wrapper are rejected; withdrawals are unaffected. Set to false to re-enable deposits.", + "nullable": true + } + }, + "required": [ + "wrapperAddress", + "depositsDisabled" + ] + }, + "EarnSetWrapperStateRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_EARN_SET_WRAPPER_STATE" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/EarnSetWrapperStateIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "EarnSetWrapperStateResult": { + "type": "object", + "properties": { + "wrapperAddress": { + "type": "string", + "description": "Address of the updated Earn wrapper." + }, + "depositsDisabled": { + "type": "boolean", + "description": "The wrapper's deposit state after this activity." + } + }, + "required": [ + "wrapperAddress", + "depositsDisabled" + ] + }, + "EarnValueDisplay": { + "type": "object", + "properties": { + "usd": { + "type": "string", + "description": "USD value, for display only." + }, + "crypto": { + "type": "string", + "description": "Normalized amount in the asset's own units, for display only." + } + } + }, + "EarnVault": { + "type": "object", + "properties": { + "vaultAddress": { + "type": "string", + "description": "Address of the underlying yield vault." + }, + "provider": { + "$ref": "#/components/schemas/EarnProvider" + }, + "caip19": { + "type": "string", + "description": "CAIP-19 asset ID of the vault's underlying asset (e.g. 'eip155:8453/erc20:0x833589...'); the chain is encoded in the identifier." + }, + "tvl": { + "type": "string", + "description": "Total value locked in the vault, in raw on-chain units of the underlying asset. The catalog is sorted by the USD value of this." + }, + "apyPct": { + "type": "string", + "description": "Current annual percentage yield, expressed as a decimal fraction (e.g., '0.0812' for 8.12%)." + }, + "enabled": { + "type": "boolean", + "description": "Whether the organization has enabled this vault." + }, + "display": { + "$ref": "#/components/schemas/EarnValueDisplay" + }, + "name": { + "type": "string", + "description": "Human-readable vault name from the provider (e.g. 'Steakhouse Prime USDC' for Morpho; the reserve symbol for Aave)." + }, + "curator": { + "type": "string", + "description": "Vault curator name(s), comma-separated when a vault has multiple. Empty for providers without curators (e.g. Aave)." + } + } + }, + "EarnWithdrawIntent": { + "type": "object", + "properties": { + "wrapperAddress": { + "type": "string", + "description": "Address of the deployed Earn wrapper holding the position to withdraw from, from ListEarnPositions. Must be one of the org's deployed wrappers." + }, + "signWith": { + "type": "string", + "description": "A Wallet account address or Private Key address to withdraw to and sign with. Must be an on-chain address; Private Key identifiers are not supported." + }, + "chainCaip2": { + "type": "string", + "enum": [ + "eip155:1", + "eip155:8453", + "eip155:42161", + "eip155:137", + "eip155:56", + "eip155:4217" + ], + "description": "CAIP-2 chain ID the vault lives on (e.g., 'eip155:8453' for Base)." + }, + "sponsor": { + "type": "boolean", + "description": "Whether to sponsor this transaction via Gas Station.", + "nullable": true + }, + "amountValue": { + "type": "string", + "description": "The amount of the underlying asset to withdraw, in raw on-chain units. Pass 'MAX' to withdraw the entire position." } }, "required": [ - "endpointId" + "wrapperAddress", + "signWith", + "chainCaip2", + "amountValue" ] }, - "DeleteWebhookEndpointRequest": { + "EarnWithdrawRequest": { "type": "object", "properties": { "type": { "type": "string", "enum": [ - "ACTIVITY_TYPE_DELETE_WEBHOOK_ENDPOINT" + "ACTIVITY_TYPE_EARN_WITHDRAW" ] }, "timestampMs": { @@ -9668,7 +10779,7 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/components/schemas/DeleteWebhookEndpointIntent" + "$ref": "#/components/schemas/EarnWithdrawIntent" }, "generateAppProofs": { "type": "boolean", @@ -9682,74 +10793,16 @@ "parameters" ] }, - "DeleteWebhookEndpointResult": { - "type": "object", - "properties": { - "endpointId": { - "type": "string", - "description": "Unique identifier of the deleted webhook endpoint." - } - }, - "required": [ - "endpointId" - ] - }, - "DeploymentStatus": { - "type": "object", - "properties": { - "deploymentId": { - "type": "string", - "description": "Unique identifier for this deployment (corresponds to k8s deployment label)" - }, - "readyReplicas": { - "type": "integer", - "format": "int32", - "description": "Number of ready replicas" - }, - "desiredReplicas": { - "type": "integer", - "format": "int32", - "description": "Desired number of replicas" - }, - "lastUpdatedTime": { - "$ref": "#/components/schemas/external.data.v1.Timestamp" - } - }, - "required": [ - "deploymentId", - "readyReplicas", - "desiredReplicas", - "lastUpdatedTime" - ] - }, - "DisableAuthProxyIntent": { - "type": "object" - }, - "DisableAuthProxyResult": { - "type": "object" - }, - "DisablePrivateKeyIntent": { - "type": "object", - "properties": { - "privateKeyId": { - "type": "string", - "description": "Unique identifier for a given Private Key." - } - }, - "required": [ - "privateKeyId" - ] - }, - "DisablePrivateKeyResult": { + "EarnWithdrawResult": { "type": "object", "properties": { - "privateKeyId": { + "withdrawRequestId": { "type": "string", - "description": "Unique identifier for a given Private Key." + "description": "Identifier to poll withdrawal status and tx hash via GetEarnWithdrawStatus." } }, "required": [ - "privateKeyId" + "withdrawRequestId" ] }, "Effect": { @@ -10371,6 +11424,75 @@ } } }, + "ExecuteSwapIntent": { + "type": "object", + "properties": { + "inputToken": { + "type": "string", + "description": "CAIP-19 asset ID for the input asset. The chain is derived from this value." + }, + "outputToken": { + "type": "string", + "description": "CAIP-19 asset ID for the output asset. May be on a different chain than `input_token` for cross-chain swaps." + }, + "inputAmount": { + "type": "string", + "description": "Base-unit amount of the input asset." + }, + "walletAccount": { + "type": "string", + "description": "Wallet account address to sign and submit the swap transaction from. Cross-wallet swaps are not supported." + }, + "sponsor": { + "type": "boolean", + "description": "Whether to sponsor the resulting swap transaction via Gas Station when supported by the chain.", + "nullable": true + }, + "slippage": { + "type": "string", + "description": "Maximum allowed slippage in basis points.", + "nullable": true + }, + "provider": { + "type": "string", + "description": "Swap provider to execute with, as returned by get_swap_quote. When omitted, execution uses the default provider.", + "nullable": true + }, + "minOutputAmount": { + "type": "string", + "description": "Minimum acceptable base-unit amount of the output asset. Execution fails if the swap provider's quoted minimum output falls below this floor at execution time." + } + }, + "required": [ + "inputToken", + "outputToken", + "inputAmount", + "walletAccount", + "minOutputAmount" + ] + }, + "ExecuteSwapResult": { + "type": "object", + "properties": { + "sendTransactionStatusId": { + "type": "string", + "description": "The send_transaction_status ID associated with the swap transaction submission" + }, + "provider": { + "type": "string", + "description": "Swap provider used to build the transaction.", + "nullable": true + }, + "quoteId": { + "type": "string", + "description": "Quote identifier used for execution, if any.", + "nullable": true + } + }, + "required": [ + "sendTransactionStatusId" + ] + }, "ExportPrivateKeyIntent": { "type": "object", "properties": { @@ -10595,7 +11717,9 @@ "FEATURE_NAME_SMS_AUTH", "FEATURE_NAME_OTP_EMAIL_AUTH", "FEATURE_NAME_AUTH_PROXY", - "FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED" + "FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED", + "FEATURE_NAME_SWAP_CONFIG", + "FEATURE_NAME_EARN_CONFIG" ] }, "FiatOnRampBlockchainNetwork": { @@ -10990,6 +12114,138 @@ "ephemeralKey" ] }, + "GetEarnDeployStatusRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "deployRequestId": { + "type": "string", + "description": "The deploy_request_id returned by EarnDeployWrapper." + } + }, + "required": [ + "organizationId", + "deployRequestId" + ] + }, + "GetEarnDeployStatusResponse": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "PENDING", + "COMPLETED", + "FAILED" + ], + "description": "Status of the wrapper deployment." + }, + "deployTxHash": { + "type": "string", + "description": "Transaction hash of the deployment, once available.", + "nullable": true + }, + "error": { + "type": "string", + "description": "Reason the deployment transaction failed, when status is FAILED.", + "nullable": true + } + }, + "required": [ + "status" + ] + }, + "GetEarnDepositStatusRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "depositRequestId": { + "type": "string", + "description": "The deposit_request_id returned by EarnDeposit." + } + }, + "required": [ + "organizationId", + "depositRequestId" + ] + }, + "GetEarnDepositStatusResponse": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "PENDING", + "COMPLETED", + "FAILED" + ], + "description": "Status of the deposit." + }, + "depositTxHash": { + "type": "string", + "description": "Transaction hash of the deposit, once available.", + "nullable": true + }, + "error": { + "type": "string", + "description": "Reason the deposit transaction failed, when status is FAILED.", + "nullable": true + } + }, + "required": [ + "status" + ] + }, + "GetEarnWithdrawStatusRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "withdrawRequestId": { + "type": "string", + "description": "The withdraw_request_id returned by EarnWithdraw." + } + }, + "required": [ + "organizationId", + "withdrawRequestId" + ] + }, + "GetEarnWithdrawStatusResponse": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "PENDING", + "COMPLETED", + "FAILED" + ], + "description": "Status of the withdrawal." + }, + "withdrawTxHash": { + "type": "string", + "description": "Transaction hash of the withdrawal, once available.", + "nullable": true + }, + "error": { + "type": "string", + "description": "Reason the withdrawal transaction failed, when status is FAILED.", + "nullable": true + } + }, + "required": [ + "status" + ] + }, "GetGasUsageRequest": { "type": "object", "properties": { @@ -12503,6 +13759,38 @@ "importBundle" ] }, + "InitImportSecretsIntent": { + "type": "object", + "properties": { + "encryptionSuite": { + "$ref": "#/components/schemas/TransportEncryptionSuite" + }, + "numSecrets": { + "type": "integer", + "format": "int32", + "description": "The number of secrets the user intends to import." + } + }, + "required": [ + "encryptionSuite", + "numSecrets" + ] + }, + "InitImportSecretsResult": { + "type": "object", + "properties": { + "enclaveTargetMessages": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Enclave ingress target keys along with metadata specific to the encryption suite. For enclave encrypt v1 this will be ServerTargetMsgV1." + } + }, + "required": [ + "enclaveTargetMessages" + ] + }, "InitImportWalletIntent": { "type": "object", "properties": { @@ -13563,23 +14851,65 @@ "sparkPrepareLightningReceiveIntent": { "$ref": "#/components/schemas/SparkPrepareLightningReceiveIntent" }, - "postTvcQuorumKeyShareIntent": { - "$ref": "#/components/schemas/PostTvcQuorumKeyShareIntent" + "postTvcQuorumKeyShareIntent": { + "$ref": "#/components/schemas/PostTvcQuorumKeyShareIntent" + }, + "ethSendTransactionIntentV2": { + "$ref": "#/components/schemas/EthSendTransactionIntentV2" + }, + "createMfaPolicyIntent": { + "$ref": "#/components/schemas/CreateMfaPolicyIntent" + }, + "updateMfaPolicyIntent": { + "$ref": "#/components/schemas/UpdateMfaPolicyIntent" + }, + "deleteMfaPolicyIntent": { + "$ref": "#/components/schemas/DeleteMfaPolicyIntent" + }, + "createSessionProfileIntent": { + "$ref": "#/components/schemas/CreateSessionProfileIntent" + }, + "earnDeployWrapperIntent": { + "$ref": "#/components/schemas/EarnDeployWrapperIntent" + }, + "earnDepositIntent": { + "$ref": "#/components/schemas/EarnDepositIntent" + }, + "earnWithdrawIntent": { + "$ref": "#/components/schemas/EarnWithdrawIntent" + }, + "executeSwapIntent": { + "$ref": "#/components/schemas/ExecuteSwapIntent" + }, + "upsertSwapConfigIntent": { + "$ref": "#/components/schemas/UpsertSwapConfigIntent" + }, + "createTvcOperatorIntent": { + "$ref": "#/components/schemas/CreateTvcOperatorIntent" + }, + "createTvcQuorumKeyIntent": { + "$ref": "#/components/schemas/CreateTvcQuorumKeyIntent" + }, + "reEncryptTvcQuorumKeyShareIntent": { + "$ref": "#/components/schemas/ReEncryptTvcQuorumKeyShareIntent" }, - "ethSendTransactionIntentV2": { - "$ref": "#/components/schemas/EthSendTransactionIntentV2" + "initImportSecretsIntent": { + "$ref": "#/components/schemas/InitImportSecretsIntent" }, - "createMfaPolicyIntent": { - "$ref": "#/components/schemas/CreateMfaPolicyIntent" + "solSendTransactionIntentV2": { + "$ref": "#/components/schemas/SolSendTransactionIntentV2" }, - "updateMfaPolicyIntent": { - "$ref": "#/components/schemas/UpdateMfaPolicyIntent" + "claimSwapFeesIntent": { + "$ref": "#/components/schemas/ClaimSwapFeesIntent" }, - "deleteMfaPolicyIntent": { - "$ref": "#/components/schemas/DeleteMfaPolicyIntent" + "earnSetWrapperStateIntent": { + "$ref": "#/components/schemas/EarnSetWrapperStateIntent" }, - "createSessionProfileIntent": { - "$ref": "#/components/schemas/CreateSessionProfileIntent" + "claimEarnFeesIntent": { + "$ref": "#/components/schemas/ClaimEarnFeesIntent" + }, + "updateWalletAccountNameIntent": { + "$ref": "#/components/schemas/UpdateWalletAccountNameIntent" } } }, @@ -13690,6 +15020,105 @@ "cidr" ] }, + "ListEarnEnabledVaultsRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "provider": { + "$ref": "#/components/schemas/EarnProvider" + }, + "caip19": { + "type": "string", + "description": "Optional filter: only return enabled vaults whose underlying asset matches this CAIP-19 asset ID (e.g. 'eip155:8453/erc20:0x833589...'). The chain is taken from the CAIP-19 identifier.", + "nullable": true + } + }, + "required": [ + "organizationId" + ] + }, + "ListEarnEnabledVaultsResponse": { + "type": "object", + "properties": { + "enabledVaults": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EarnEnabledVault" + }, + "description": "The organization's deployed wrappers." + } + } + }, + "ListEarnPositionsRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "walletAddress": { + "type": "string", + "description": "The wallet address to return positions for." + } + }, + "required": [ + "organizationId", + "walletAddress" + ] + }, + "ListEarnPositionsResponse": { + "type": "object", + "properties": { + "positions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EarnPosition" + }, + "description": "The wallet's active Earn positions." + } + } + }, + "ListEarnVaultsRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization. Annotates which vaults the organization has already enabled." + }, + "provider": { + "$ref": "#/components/schemas/EarnProvider" + }, + "caip19": { + "type": "string", + "description": "CAIP-19 asset ID (e.g. 'eip155:8453/erc20:0x833589...') to return vaults for. Only vaults whose underlying asset matches are returned; the chain is taken from the CAIP-19 identifier." + }, + "paginationOptions": { + "$ref": "#/components/schemas/Pagination" + } + }, + "required": [ + "organizationId", + "caip19" + ] + }, + "ListEarnVaultsResponse": { + "type": "object", + "properties": { + "vaults": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EarnVault" + }, + "description": "The catalog of wrappable vaults, sorted by TVL (USD) descending. To page, pass page_info.end_cursor as the pagination after cursor." + }, + "pageInfo": { + "$ref": "#/components/schemas/PageInfo" + } + } + }, "ListFiatOnRampCredentialsRequest": { "type": "object", "properties": { @@ -14653,6 +16082,25 @@ "OUTCOME_REQUIRES_AUTHENTICATORS" ] }, + "PageInfo": { + "type": "object", + "properties": { + "hasNextPage": { + "type": "boolean" + }, + "hasPreviousPage": { + "type": "boolean" + }, + "startCursor": { + "type": "string", + "nullable": true + }, + "endCursor": { + "type": "string", + "nullable": true + } + } + }, "Pagination": { "type": "object", "properties": { @@ -14930,6 +16378,55 @@ "signature" ] }, + "ReEncryptTvcQuorumKeyShareIntent": { + "type": "object", + "properties": { + "attestationDocB64": { + "type": "string", + "description": "Base64-encoded attestation document for the TVC deployment provisioning enclave" + }, + "manifestB64": { + "type": "string", + "description": "Base64-encoded manifest for the TVC deployment" + }, + "operatorEncryptKey": { + "type": "string", + "description": "Operator encryption public key used to encrypt the hosted TVC quorum key share" + }, + "operatorSignKey": { + "type": "string", + "description": "Operator signing public key used to approve the TVC manifest" + }, + "deploymentId": { + "type": "string", + "description": "Unique identifier of the TVC deployment receiving the re-encrypted quorum key share" + }, + "appQuorumKey": { + "type": "string", + "description": "Quorum key for the TVC application" + } + }, + "required": [ + "attestationDocB64", + "manifestB64", + "operatorEncryptKey", + "operatorSignKey", + "deploymentId", + "appQuorumKey" + ] + }, + "ReEncryptTvcQuorumKeyShareResult": { + "type": "object", + "properties": { + "provisioningShareId": { + "type": "string", + "description": "The unique identifier for the provisioning quorum key share" + } + }, + "required": [ + "provisioningShareId" + ] + }, "RecoverUserIntent": { "type": "object", "properties": { @@ -15591,6 +17088,48 @@ }, "createSessionProfileResult": { "$ref": "#/components/schemas/CreateSessionProfileResult" + }, + "earnDeployWrapperResult": { + "$ref": "#/components/schemas/EarnDeployWrapperResult" + }, + "earnDepositResult": { + "$ref": "#/components/schemas/EarnDepositResult" + }, + "earnWithdrawResult": { + "$ref": "#/components/schemas/EarnWithdrawResult" + }, + "executeSwapResult": { + "$ref": "#/components/schemas/ExecuteSwapResult" + }, + "upsertSwapConfigResult": { + "$ref": "#/components/schemas/UpsertSwapConfigResult" + }, + "createTvcOperatorResult": { + "$ref": "#/components/schemas/CreateTvcOperatorResult" + }, + "createTvcQuorumKeyResult": { + "$ref": "#/components/schemas/CreateTvcQuorumKeyResult" + }, + "reEncryptTvcQuorumKeyShareResult": { + "$ref": "#/components/schemas/ReEncryptTvcQuorumKeyShareResult" + }, + "initImportSecretsResult": { + "$ref": "#/components/schemas/InitImportSecretsResult" + }, + "solSendTransactionResultV2": { + "$ref": "#/components/schemas/SolSendTransactionResultV2" + }, + "claimSwapFeesResult": { + "$ref": "#/components/schemas/ClaimSwapFeesResult" + }, + "earnSetWrapperStateResult": { + "$ref": "#/components/schemas/EarnSetWrapperStateResult" + }, + "claimEarnFeesResult": { + "$ref": "#/components/schemas/ClaimEarnFeesResult" + }, + "updateWalletAccountNameResult": { + "$ref": "#/components/schemas/UpdateWalletAccountNameResult" } } }, @@ -16500,6 +18039,49 @@ "caip2" ] }, + "SolSendTransactionIntentV2": { + "type": "object", + "properties": { + "unsignedTransaction": { + "type": "string", + "description": "Hex-encoded serialized unsigned Solana transaction (full wire format with zeroed signature placeholders)" + }, + "signWiths": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Ordered Solana signer addresses Turnkey signs with. Between 1 and 16 signers. For sponsored transactions this must list every required signer of the transaction in transaction order." + }, + "sponsor": { + "type": "boolean", + "description": "Whether to sponsor this transaction via Gas Station.", + "nullable": true + }, + "caip2": { + "type": "string", + "enum": [ + "solana:mainnet", + "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", + "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d", + "solana:devnet", + "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1", + "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1wcaWoxPkrZBG" + ], + "description": "CAIP-2 chain ID (e.g., 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' for Solana mainnet). Human-readable Solana aliases ('solana:mainnet', 'solana:devnet') are also accepted and normalized to canonical CAIP-2 values." + }, + "recentBlockhash": { + "type": "string", + "description": "User-provided blockhash for replay protection / deadline control. If provided, it is used as-is, including for sponsored transactions (the transaction is only broadcastable while the blockhash is current). If omitted and sponsor=true, a fresh blockhash is fetched during execution.", + "nullable": true + } + }, + "required": [ + "unsignedTransaction", + "signWiths", + "caip2" + ] + }, "SolSendTransactionRequest": { "type": "object", "properties": { @@ -16544,6 +18126,18 @@ "sendTransactionStatusId" ] }, + "SolSendTransactionResultV2": { + "type": "object", + "properties": { + "sendTransactionStatusId": { + "type": "string", + "description": "The send_transaction_status ID associated with the transaction submission" + } + }, + "required": [ + "sendTransactionStatusId" + ] + }, "SolanaConfig": { "type": "object", "properties": { @@ -17343,6 +18937,12 @@ "TRANSACTION_TYPE_TEMPO" ] }, + "TransportEncryptionSuite": { + "type": "string", + "enum": [ + "TRANSPORT_ENCRYPTION_SUITE_ENCLAVE_ENCRYPT_V1" + ] + }, "TvcApp": { "type": "object", "properties": { @@ -17886,6 +19486,11 @@ "type": "string" }, "description": "Whitelisted OAuth client IDs for social account linking. When a user authenticates via a social provider with an email matching an existing account, the accounts will be linked if the client ID is in this list and the issuer is considered a trusted provider." + }, + "captchaEnabled": { + "type": "boolean", + "description": "Whether captcha verification is required on sign up & otp init.", + "nullable": true } } }, @@ -18848,6 +20453,35 @@ "userTagId" ] }, + "UpdateWalletAccountNameIntent": { + "type": "object", + "properties": { + "walletAccountId": { + "type": "string", + "description": "Unique identifier for a given Wallet Account." + }, + "name": { + "type": "string", + "description": "Human-readable name for this Wallet Account." + } + }, + "required": [ + "walletAccountId", + "name" + ] + }, + "UpdateWalletAccountNameResult": { + "type": "object", + "properties": { + "walletAccountId": { + "type": "string", + "description": "Unique identifier for a given Wallet Account." + } + }, + "required": [ + "walletAccountId" + ] + }, "UpdateWalletIntent": { "type": "object", "properties": { @@ -19025,6 +20659,46 @@ "gasUsageConfigId" ] }, + "UpsertSwapConfigIntent": { + "type": "object", + "properties": { + "feeReceiverWalletAddress": { + "type": "string", + "nullable": true + }, + "feeBps": { + "type": "string", + "description": "Client fee in basis points applied to swaps; used for all pairs unless stable_fee_bps is set.", + "nullable": true + }, + "provider": { + "type": "string", + "nullable": true + }, + "stableFeeBps": { + "type": "string", + "description": "Optional override applied when both swap assets are stablecoins; falls back to fee_bps when unset.", + "nullable": true + } + } + }, + "UpsertSwapConfigResult": { + "type": "object", + "properties": { + "feeReceiverWalletAddress": { + "type": "string", + "nullable": true + }, + "feeBps": { + "type": "string", + "nullable": true + }, + "stableFeeBps": { + "type": "string", + "nullable": true + } + } + }, "UsageType": { "type": "string", "enum": [ diff --git a/scripts/openapi-gen/utils/mdx-generator/generator.ts b/scripts/openapi-gen/utils/mdx-generator/generator.ts index f25b9ec9..46aea6b9 100644 --- a/scripts/openapi-gen/utils/mdx-generator/generator.ts +++ b/scripts/openapi-gen/utils/mdx-generator/generator.ts @@ -217,12 +217,14 @@ export function generateResponseFieldMdxRecursive( // Top-level Primitive: Use if (!parentKey) { - mdx += `${description.trim()}${ - isEnum - ? ` - ${generateEnumOptionsMdx(options)}` - : "" - } + // Enum fields carry a paragraph break before the options list, so the + // description must start on its own line (block JSX) to parse as MDX. + mdx += isEnum + ? ` +${description.trim()} +${generateEnumOptionsMdx(options)} +` + : `${description.trim()} `; // Removed newline before closing tag } else { // ANY NESTED Primitive: Use diff --git a/snippets/data/endpoint-tags.mdx b/snippets/data/endpoint-tags.mdx index 01509f59..3a59c71d 100644 --- a/snippets/data/endpoint-tags.mdx +++ b/snippets/data/endpoint-tags.mdx @@ -32,6 +32,17 @@ export const endpoints = [ } ] }, + { + "name": "Claim earn fees", + "id": "claim-earn-fees", + "type": "activity", + "tags": [ + { + "id": "earn", + "label": "Earn" + } + ] + }, { "name": "Claim Spark transfer", "id": "claim-spark-transfer", @@ -120,6 +131,17 @@ export const endpoints = [ } ] }, + { + "name": "Create MFA policy", + "id": "create-mfa-policy", + "type": "activity", + "tags": [ + { + "id": "mfa-policies", + "label": "MFA Policies" + } + ] + }, { "name": "Create Oauth providers", "id": "create-oauth-providers", @@ -197,6 +219,17 @@ export const endpoints = [ } ] }, + { + "name": "Create session profile", + "id": "create-session-profile", + "type": "activity", + "tags": [ + { + "id": "session-profiles", + "label": "Session Profiles" + } + ] + }, { "name": "Create smart contract interface", "id": "create-smart-contract-interface", @@ -362,6 +395,17 @@ export const endpoints = [ } ] }, + { + "name": "Delete MFA policy", + "id": "delete-mfa-policy", + "type": "activity", + "tags": [ + { + "id": "mfa-policies", + "label": "MFA Policies" + } + ] + }, { "name": "Delete Oauth providers", "id": "delete-oauth-providers", @@ -494,6 +538,28 @@ export const endpoints = [ } ] }, + { + "name": "Deploy Earn wrapper", + "id": "deploy-earn-wrapper", + "type": "activity", + "tags": [ + { + "id": "earn", + "label": "Earn" + } + ] + }, + { + "name": "Deposit into Earn vault", + "id": "deposit-into-earn-vault", + "type": "activity", + "tags": [ + { + "id": "earn", + "label": "Earn" + } + ] + }, { "name": "Export private key", "id": "export-private-key", @@ -758,6 +824,17 @@ export const endpoints = [ } ] }, + { + "name": "Set Earn wrapper state", + "id": "set-earn-wrapper-state", + "type": "activity", + "tags": [ + { + "id": "earn", + "label": "Earn" + } + ] + }, { "name": "Set IP Allowlist", "id": "set-ip-allowlist", @@ -868,6 +945,17 @@ export const endpoints = [ } ] }, + { + "name": "Update MFA policy", + "id": "update-mfa-policy", + "type": "activity", + "tags": [ + { + "id": "mfa-policies", + "label": "MFA Policies" + } + ] + }, { "name": "Update organization name", "id": "update-organization-name", @@ -1000,6 +1088,17 @@ export const endpoints = [ } ] }, + { + "name": "Withdraw from Earn vault", + "id": "withdraw-from-earn-vault", + "type": "activity", + "tags": [ + { + "id": "earn", + "label": "Earn" + } + ] + }, { "name": "", "id": "", @@ -1094,6 +1193,72 @@ export const endpoints = [ } ] }, + { + "name": "Get Earn deploy status", + "id": "get-earn-deploy-status", + "type": "query", + "tags": [ + { + "id": "earn", + "label": "Earn" + } + ] + }, + { + "name": "Get Earn deposit status", + "id": "get-earn-deposit-status", + "type": "query", + "tags": [ + { + "id": "earn", + "label": "Earn" + } + ] + }, + { + "name": "Get Earn enabled vaults", + "id": "get-earn-enabled-vaults", + "type": "query", + "tags": [ + { + "id": "earn", + "label": "Earn" + } + ] + }, + { + "name": "Get Earn positions", + "id": "get-earn-positions", + "type": "query", + "tags": [ + { + "id": "earn", + "label": "Earn" + } + ] + }, + { + "name": "Get Earn vault catalog", + "id": "get-earn-vault-catalog", + "type": "query", + "tags": [ + { + "id": "earn", + "label": "Earn" + } + ] + }, + { + "name": "Get Earn withdraw status", + "id": "get-earn-withdraw-status", + "type": "query", + "tags": [ + { + "id": "earn", + "label": "Earn" + } + ] + }, { "name": "Get gas usage", "id": "get-gas-usage", @@ -1116,6 +1281,39 @@ export const endpoints = [ } ] }, + { + "name": "Get MFA policies", + "id": "get-mfa-policies", + "type": "query", + "tags": [ + { + "id": "mfa-policies", + "label": "MFA Policies" + } + ] + }, + { + "name": "Get MFA policy", + "id": "get-mfa-policy", + "type": "query", + "tags": [ + { + "id": "mfa-policies", + "label": "MFA Policies" + } + ] + }, + { + "name": "Get MFA status", + "id": "get-mfa-status", + "type": "query", + "tags": [ + { + "id": "mfa-policies", + "label": "MFA Policies" + } + ] + }, { "name": "Get nonces", "id": "get-nonces", @@ -1199,6 +1397,28 @@ export const endpoints = [ } ] }, + { + "name": "Get session profile", + "id": "get-session-profile", + "type": "query", + "tags": [ + { + "id": "session-profiles", + "label": "Session Profiles" + } + ] + }, + { + "name": "Get session profiles", + "id": "get-session-profiles", + "type": "query", + "tags": [ + { + "id": "session-profiles", + "label": "Session Profiles" + } + ] + }, { "name": "Get smart contract interface", "id": "get-smart-contract-interface", @@ -1265,6 +1485,17 @@ export const endpoints = [ } ] }, + { + "name": "Get TVC Deployment debug logs", + "id": "get-tvc-deployment-debug-logs", + "type": "query", + "tags": [ + { + "id": "tvc", + "label": "TVC" + } + ] + }, { "name": "Get user", "id": "get-user", @@ -1518,6 +1749,10 @@ export const tags = [ "id": "broadcasting", "label": "Broadcasting" }, + { + "id": "earn", + "label": "Earn" + }, { "id": "signing", "label": "Signing" @@ -1546,6 +1781,10 @@ export const tags = [ "id": "invitations", "label": "Invitations" }, + { + "id": "mfa-policies", + "label": "MFA Policies" + }, { "id": "policies", "label": "Policies" @@ -1562,6 +1801,10 @@ export const tags = [ "id": "sessions", "label": "Sessions" }, + { + "id": "session-profiles", + "label": "Session Profiles" + }, { "id": "organizations", "label": "Organizations" From f2b76b937ae0610c8bf089734dc0b43d827dcee1 Mon Sep 17 00:00:00 2001 From: Eric Velazquez Date: Thu, 30 Jul 2026 13:02:39 -0700 Subject: [PATCH 07/15] update docs --- .../activities/broadcast-svm-transaction.mdx | 44 +- .../activities/create-a-tvc-deployment.mdx | 16 +- .../remove-organization-feature.mdx | 6 +- .../activities/set-organization-feature.mdx | 6 +- api-reference/queries/get-activity.mdx | 344 +- api-reference/queries/get-configs.mdx | 2 +- api-reference/queries/list-activities.mdx | 406 +- public_api.swagger.json | 15312 +++++++--------- scripts/openapi-gen/openapi.json | 14785 ++++++--------- 9 files changed, 12438 insertions(+), 18483 deletions(-) diff --git a/api-reference/activities/broadcast-svm-transaction.mdx b/api-reference/activities/broadcast-svm-transaction.mdx index d0d41471..20ec8ce7 100644 --- a/api-reference/activities/broadcast-svm-transaction.mdx +++ b/api-reference/activities/broadcast-svm-transaction.mdx @@ -80,32 +80,26 @@ The activity type The intent of the activity - - The solSendTransactionIntentV2 object - - -Hex-encoded serialized unsigned Solana transaction (full wire format with zeroed signature placeholders) + + The solSendTransactionIntent object + + +Base64-encoded serialized unsigned Solana transaction - - Ordered Solana signer addresses Turnkey signs with. Between 1 and 16 signers. For sponsored transactions this must list every required signer of the transaction in transaction order. - - -item field + +A wallet or private key address to sign with. This does not support private key IDs. - - - - + Whether to sponsor this transaction via Gas Station. - + CAIP-2 chain ID (e.g., 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' for Solana mainnet). Human-readable Solana aliases ('solana:mainnet', 'solana:devnet') are also accepted and normalized to canonical CAIP-2 values. Enum options: `solana:mainnet`, `solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp`, `solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d`, `solana:devnet`, `solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1`, `solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1wcaWoxPkrZBG` - -User-provided blockhash for replay protection / deadline control. If provided, it is used as-is, including for sponsored transactions (the transaction is only broadcastable while the blockhash is current). If omitted and sponsor=true, a fresh blockhash is fetched during execution. + +user-provided blockhash for replay protection / deadline control. If omitted and sponsor=true, we fetch a fresh blockhash during execution @@ -116,10 +110,10 @@ User-provided blockhash for replay protection / deadline control. If provided, i The result of the activity - - The solSendTransactionResultV2 object - - + + The solSendTransactionResult object + + The send_transaction_status ID associated with the transaction submission @@ -210,18 +204,16 @@ const response = await turnkeyClient.apiClient().solSendTransaction({ "status": "", "type": "", "intent": { - "solSendTransactionIntentV2": { + "solSendTransactionIntent": { "unsignedTransaction": "", - "signWiths": [ - "" - ], + "signWith": "", "sponsor": "", "caip2": "", "recentBlockhash": "" } }, "result": { - "solSendTransactionResultV2": { + "solSendTransactionResult": { "sendTransactionStatusId": "" } }, diff --git a/api-reference/activities/create-a-tvc-deployment.mdx b/api-reference/activities/create-a-tvc-deployment.mdx index a11e483c..666d27cf 100644 --- a/api-reference/activities/create-a-tvc-deployment.mdx +++ b/api-reference/activities/create-a-tvc-deployment.mdx @@ -82,10 +82,6 @@ Unique identifier for a given Organization. Port to use for public ingress. - - - Optional desired replica count for this deployment. - @@ -157,9 +153,6 @@ Port to use for health checks. Port to use for public ingress. - - -Optional desired replica count for this deployment. @@ -233,8 +226,7 @@ curl --request POST \ "debugMode": "", "healthCheckType": "", "healthCheckPort": "", - "publicIngressPort": "", - "replicas": "" + "publicIngressPort": "" } }' ``` @@ -261,8 +253,7 @@ const response = await turnkeyClient.apiClient().createTvcDeployment({ debugMode: true // Optional flag to indicate whether to deploy the TVC app in debug mode, which includes additional logging and debugging tools. Default is false., healthCheckType: "" // healthCheckType field, healthCheckPort: 0 // Port to use for health checks., - publicIngressPort: 0 // Port to use for public ingress., - replicas: 0 // Optional desired replica count for this deployment. + publicIngressPort: 0 // Port to use for public ingress. }); ``` @@ -299,8 +290,7 @@ const response = await turnkeyClient.apiClient().createTvcDeployment({ "debugMode": "", "healthCheckType": "", "healthCheckPort": "", - "publicIngressPort": "", - "replicas": "" + "publicIngressPort": "" } }, "result": { diff --git a/api-reference/activities/remove-organization-feature.mdx b/api-reference/activities/remove-organization-feature.mdx index b9977ac3..4a7a000d 100644 --- a/api-reference/activities/remove-organization-feature.mdx +++ b/api-reference/activities/remove-organization-feature.mdx @@ -33,7 +33,7 @@ Unique identifier for a given Organization.

The parameters object containing the specific intent data for this activity.

- Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_SWAP_CONFIG`, `FEATURE_NAME_EARN_CONFIG` + Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED` @@ -70,7 +70,7 @@ The activity type name field -Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_SWAP_CONFIG`, `FEATURE_NAME_EARN_CONFIG` +Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED` @@ -91,7 +91,7 @@ Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_OR name field -Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_SWAP_CONFIG`, `FEATURE_NAME_EARN_CONFIG` +Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED` diff --git a/api-reference/activities/set-organization-feature.mdx b/api-reference/activities/set-organization-feature.mdx index 59caeb75..dd880f54 100644 --- a/api-reference/activities/set-organization-feature.mdx +++ b/api-reference/activities/set-organization-feature.mdx @@ -33,7 +33,7 @@ Unique identifier for a given Organization.

The parameters object containing the specific intent data for this activity.

- Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_SWAP_CONFIG`, `FEATURE_NAME_EARN_CONFIG` + Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED` @@ -74,7 +74,7 @@ The activity type name field -Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_SWAP_CONFIG`, `FEATURE_NAME_EARN_CONFIG` +Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED` @@ -98,7 +98,7 @@ Optional value for the feature. Will override existing values if feature is alre name field -Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_SWAP_CONFIG`, `FEATURE_NAME_EARN_CONFIG` +Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED` diff --git a/api-reference/queries/get-activity.mdx b/api-reference/queries/get-activity.mdx index 8a95d1b3..bce81abe 100644 --- a/api-reference/queries/get-activity.mdx +++ b/api-reference/queries/get-activity.mdx @@ -46,7 +46,7 @@ Enum options: `ACTIVITY_STATUS_CREATED`, `ACTIVITY_STATUS_PENDING`, `ACTIVITY_ST type field -Enum options: `ACTIVITY_TYPE_CREATE_API_KEYS`, `ACTIVITY_TYPE_CREATE_USERS`, `ACTIVITY_TYPE_CREATE_PRIVATE_KEYS`, `ACTIVITY_TYPE_SIGN_RAW_PAYLOAD`, `ACTIVITY_TYPE_CREATE_INVITATIONS`, `ACTIVITY_TYPE_ACCEPT_INVITATION`, `ACTIVITY_TYPE_CREATE_POLICY`, `ACTIVITY_TYPE_DISABLE_PRIVATE_KEY`, `ACTIVITY_TYPE_DELETE_USERS`, `ACTIVITY_TYPE_DELETE_API_KEYS`, `ACTIVITY_TYPE_DELETE_INVITATION`, `ACTIVITY_TYPE_DELETE_ORGANIZATION`, `ACTIVITY_TYPE_DELETE_POLICY`, `ACTIVITY_TYPE_CREATE_USER_TAG`, `ACTIVITY_TYPE_DELETE_USER_TAGS`, `ACTIVITY_TYPE_CREATE_ORGANIZATION`, `ACTIVITY_TYPE_SIGN_TRANSACTION`, `ACTIVITY_TYPE_APPROVE_ACTIVITY`, `ACTIVITY_TYPE_REJECT_ACTIVITY`, `ACTIVITY_TYPE_DELETE_AUTHENTICATORS`, `ACTIVITY_TYPE_CREATE_AUTHENTICATORS`, `ACTIVITY_TYPE_CREATE_PRIVATE_KEY_TAG`, `ACTIVITY_TYPE_DELETE_PRIVATE_KEY_TAGS`, `ACTIVITY_TYPE_SET_PAYMENT_METHOD`, `ACTIVITY_TYPE_ACTIVATE_BILLING_TIER`, `ACTIVITY_TYPE_DELETE_PAYMENT_METHOD`, `ACTIVITY_TYPE_CREATE_POLICY_V2`, `ACTIVITY_TYPE_CREATE_POLICY_V3`, `ACTIVITY_TYPE_CREATE_API_ONLY_USERS`, `ACTIVITY_TYPE_UPDATE_ROOT_QUORUM`, `ACTIVITY_TYPE_UPDATE_USER_TAG`, `ACTIVITY_TYPE_UPDATE_PRIVATE_KEY_TAG`, `ACTIVITY_TYPE_CREATE_AUTHENTICATORS_V2`, `ACTIVITY_TYPE_CREATE_ORGANIZATION_V2`, `ACTIVITY_TYPE_CREATE_USERS_V2`, `ACTIVITY_TYPE_ACCEPT_INVITATION_V2`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V2`, `ACTIVITY_TYPE_UPDATE_ALLOWED_ORIGINS`, `ACTIVITY_TYPE_CREATE_PRIVATE_KEYS_V2`, `ACTIVITY_TYPE_UPDATE_USER`, `ACTIVITY_TYPE_UPDATE_POLICY`, `ACTIVITY_TYPE_SET_PAYMENT_METHOD_V2`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V3`, `ACTIVITY_TYPE_CREATE_WALLET`, `ACTIVITY_TYPE_CREATE_WALLET_ACCOUNTS`, `ACTIVITY_TYPE_INIT_USER_EMAIL_RECOVERY`, `ACTIVITY_TYPE_RECOVER_USER`, `ACTIVITY_TYPE_SET_ORGANIZATION_FEATURE`, `ACTIVITY_TYPE_REMOVE_ORGANIZATION_FEATURE`, `ACTIVITY_TYPE_SIGN_RAW_PAYLOAD_V2`, `ACTIVITY_TYPE_SIGN_TRANSACTION_V2`, `ACTIVITY_TYPE_EXPORT_PRIVATE_KEY`, `ACTIVITY_TYPE_EXPORT_WALLET`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V4`, `ACTIVITY_TYPE_EMAIL_AUTH`, `ACTIVITY_TYPE_EXPORT_WALLET_ACCOUNT`, `ACTIVITY_TYPE_INIT_IMPORT_WALLET`, `ACTIVITY_TYPE_IMPORT_WALLET`, `ACTIVITY_TYPE_INIT_IMPORT_PRIVATE_KEY`, `ACTIVITY_TYPE_IMPORT_PRIVATE_KEY`, `ACTIVITY_TYPE_CREATE_POLICIES`, `ACTIVITY_TYPE_SIGN_RAW_PAYLOADS`, `ACTIVITY_TYPE_CREATE_READ_ONLY_SESSION`, `ACTIVITY_TYPE_CREATE_OAUTH_PROVIDERS`, `ACTIVITY_TYPE_DELETE_OAUTH_PROVIDERS`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V5`, `ACTIVITY_TYPE_OAUTH`, `ACTIVITY_TYPE_CREATE_API_KEYS_V2`, `ACTIVITY_TYPE_CREATE_READ_WRITE_SESSION`, `ACTIVITY_TYPE_EMAIL_AUTH_V2`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V6`, `ACTIVITY_TYPE_DELETE_PRIVATE_KEYS`, `ACTIVITY_TYPE_DELETE_WALLETS`, `ACTIVITY_TYPE_CREATE_READ_WRITE_SESSION_V2`, `ACTIVITY_TYPE_DELETE_SUB_ORGANIZATION`, `ACTIVITY_TYPE_INIT_OTP_AUTH`, `ACTIVITY_TYPE_OTP_AUTH`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V7`, `ACTIVITY_TYPE_UPDATE_WALLET`, `ACTIVITY_TYPE_UPDATE_POLICY_V2`, `ACTIVITY_TYPE_CREATE_USERS_V3`, `ACTIVITY_TYPE_INIT_OTP_AUTH_V2`, `ACTIVITY_TYPE_INIT_OTP`, `ACTIVITY_TYPE_VERIFY_OTP`, `ACTIVITY_TYPE_OTP_LOGIN`, `ACTIVITY_TYPE_STAMP_LOGIN`, `ACTIVITY_TYPE_OAUTH_LOGIN`, `ACTIVITY_TYPE_UPDATE_USER_NAME`, `ACTIVITY_TYPE_UPDATE_USER_EMAIL`, `ACTIVITY_TYPE_UPDATE_USER_PHONE_NUMBER`, `ACTIVITY_TYPE_INIT_FIAT_ON_RAMP`, `ACTIVITY_TYPE_CREATE_SMART_CONTRACT_INTERFACE`, `ACTIVITY_TYPE_DELETE_SMART_CONTRACT_INTERFACE`, `ACTIVITY_TYPE_ENABLE_AUTH_PROXY`, `ACTIVITY_TYPE_DISABLE_AUTH_PROXY`, `ACTIVITY_TYPE_UPDATE_AUTH_PROXY_CONFIG`, `ACTIVITY_TYPE_CREATE_OAUTH2_CREDENTIAL`, `ACTIVITY_TYPE_UPDATE_OAUTH2_CREDENTIAL`, `ACTIVITY_TYPE_DELETE_OAUTH2_CREDENTIAL`, `ACTIVITY_TYPE_OAUTH2_AUTHENTICATE`, `ACTIVITY_TYPE_DELETE_WALLET_ACCOUNTS`, `ACTIVITY_TYPE_DELETE_POLICIES`, `ACTIVITY_TYPE_ETH_SEND_RAW_TRANSACTION`, `ACTIVITY_TYPE_ETH_SEND_TRANSACTION`, `ACTIVITY_TYPE_CREATE_FIAT_ON_RAMP_CREDENTIAL`, `ACTIVITY_TYPE_UPDATE_FIAT_ON_RAMP_CREDENTIAL`, `ACTIVITY_TYPE_DELETE_FIAT_ON_RAMP_CREDENTIAL`, `ACTIVITY_TYPE_EMAIL_AUTH_V3`, `ACTIVITY_TYPE_INIT_USER_EMAIL_RECOVERY_V2`, `ACTIVITY_TYPE_INIT_OTP_AUTH_V3`, `ACTIVITY_TYPE_INIT_OTP_V2`, `ACTIVITY_TYPE_UPSERT_GAS_USAGE_CONFIG`, `ACTIVITY_TYPE_CREATE_TVC_APP`, `ACTIVITY_TYPE_CREATE_TVC_DEPLOYMENT`, `ACTIVITY_TYPE_CREATE_TVC_MANIFEST_APPROVALS`, `ACTIVITY_TYPE_SOL_SEND_TRANSACTION`, `ACTIVITY_TYPE_INIT_OTP_V3`, `ACTIVITY_TYPE_VERIFY_OTP_V2`, `ACTIVITY_TYPE_OTP_LOGIN_V2`, `ACTIVITY_TYPE_UPDATE_ORGANIZATION_NAME`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V8`, `ACTIVITY_TYPE_CREATE_OAUTH_PROVIDERS_V2`, `ACTIVITY_TYPE_CREATE_USERS_V4`, `ACTIVITY_TYPE_CREATE_WEBHOOK_ENDPOINT`, `ACTIVITY_TYPE_UPDATE_WEBHOOK_ENDPOINT`, `ACTIVITY_TYPE_DELETE_WEBHOOK_ENDPOINT`, `ACTIVITY_TYPE_SET_IP_ALLOWLIST`, `ACTIVITY_TYPE_REMOVE_IP_ALLOWLIST`, `ACTIVITY_TYPE_UPDATE_TVC_APP_LIVE_DEPLOYMENT`, `ACTIVITY_TYPE_DELETE_TVC_DEPLOYMENT`, `ACTIVITY_TYPE_DELETE_TVC_APP_AND_DEPLOYMENTS`, `ACTIVITY_TYPE_RESTORE_TVC_DEPLOYMENT`, `ACTIVITY_TYPE_SPARK_SIGN_FROST`, `ACTIVITY_TYPE_SPARK_PREPARE_TRANSFER`, `ACTIVITY_TYPE_SPARK_CLAIM_TRANSFER`, `ACTIVITY_TYPE_SPARK_PREPARE_LIGHTNING_RECEIVE`, `ACTIVITY_TYPE_POST_TVC_QUORUM_KEY_SHARE`, `ACTIVITY_TYPE_ETH_SEND_TRANSACTION_V2`, `ACTIVITY_TYPE_CREATE_MFA_POLICY`, `ACTIVITY_TYPE_UPDATE_MFA_POLICY`, `ACTIVITY_TYPE_DELETE_MFA_POLICY`, `ACTIVITY_TYPE_CREATE_SESSION_PROFILE`, `ACTIVITY_TYPE_EARN_DEPLOY_WRAPPER`, `ACTIVITY_TYPE_EARN_DEPOSIT`, `ACTIVITY_TYPE_EARN_WITHDRAW`, `ACTIVITY_TYPE_EXECUTE_SWAP`, `ACTIVITY_TYPE_UPSERT_SWAP_CONFIG`, `ACTIVITY_TYPE_CREATE_TVC_OPERATOR`, `ACTIVITY_TYPE_CREATE_TVC_QUORUM_KEY`, `ACTIVITY_TYPE_RE_ENCRYPT_TVC_QUORUM_KEY_SHARE`, `ACTIVITY_TYPE_INIT_IMPORT_SECRETS`, `ACTIVITY_TYPE_SOL_SEND_TRANSACTION_V2`, `ACTIVITY_TYPE_CLAIM_SWAP_FEES`, `ACTIVITY_TYPE_EARN_SET_WRAPPER_STATE`, `ACTIVITY_TYPE_CLAIM_EARN_FEES`, `ACTIVITY_TYPE_UPDATE_WALLET_ACCOUNT_NAME` +Enum options: `ACTIVITY_TYPE_CREATE_API_KEYS`, `ACTIVITY_TYPE_CREATE_USERS`, `ACTIVITY_TYPE_CREATE_PRIVATE_KEYS`, `ACTIVITY_TYPE_SIGN_RAW_PAYLOAD`, `ACTIVITY_TYPE_CREATE_INVITATIONS`, `ACTIVITY_TYPE_ACCEPT_INVITATION`, `ACTIVITY_TYPE_CREATE_POLICY`, `ACTIVITY_TYPE_DISABLE_PRIVATE_KEY`, `ACTIVITY_TYPE_DELETE_USERS`, `ACTIVITY_TYPE_DELETE_API_KEYS`, `ACTIVITY_TYPE_DELETE_INVITATION`, `ACTIVITY_TYPE_DELETE_ORGANIZATION`, `ACTIVITY_TYPE_DELETE_POLICY`, `ACTIVITY_TYPE_CREATE_USER_TAG`, `ACTIVITY_TYPE_DELETE_USER_TAGS`, `ACTIVITY_TYPE_CREATE_ORGANIZATION`, `ACTIVITY_TYPE_SIGN_TRANSACTION`, `ACTIVITY_TYPE_APPROVE_ACTIVITY`, `ACTIVITY_TYPE_REJECT_ACTIVITY`, `ACTIVITY_TYPE_DELETE_AUTHENTICATORS`, `ACTIVITY_TYPE_CREATE_AUTHENTICATORS`, `ACTIVITY_TYPE_CREATE_PRIVATE_KEY_TAG`, `ACTIVITY_TYPE_DELETE_PRIVATE_KEY_TAGS`, `ACTIVITY_TYPE_SET_PAYMENT_METHOD`, `ACTIVITY_TYPE_ACTIVATE_BILLING_TIER`, `ACTIVITY_TYPE_DELETE_PAYMENT_METHOD`, `ACTIVITY_TYPE_CREATE_POLICY_V2`, `ACTIVITY_TYPE_CREATE_POLICY_V3`, `ACTIVITY_TYPE_CREATE_API_ONLY_USERS`, `ACTIVITY_TYPE_UPDATE_ROOT_QUORUM`, `ACTIVITY_TYPE_UPDATE_USER_TAG`, `ACTIVITY_TYPE_UPDATE_PRIVATE_KEY_TAG`, `ACTIVITY_TYPE_CREATE_AUTHENTICATORS_V2`, `ACTIVITY_TYPE_CREATE_ORGANIZATION_V2`, `ACTIVITY_TYPE_CREATE_USERS_V2`, `ACTIVITY_TYPE_ACCEPT_INVITATION_V2`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V2`, `ACTIVITY_TYPE_UPDATE_ALLOWED_ORIGINS`, `ACTIVITY_TYPE_CREATE_PRIVATE_KEYS_V2`, `ACTIVITY_TYPE_UPDATE_USER`, `ACTIVITY_TYPE_UPDATE_POLICY`, `ACTIVITY_TYPE_SET_PAYMENT_METHOD_V2`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V3`, `ACTIVITY_TYPE_CREATE_WALLET`, `ACTIVITY_TYPE_CREATE_WALLET_ACCOUNTS`, `ACTIVITY_TYPE_INIT_USER_EMAIL_RECOVERY`, `ACTIVITY_TYPE_RECOVER_USER`, `ACTIVITY_TYPE_SET_ORGANIZATION_FEATURE`, `ACTIVITY_TYPE_REMOVE_ORGANIZATION_FEATURE`, `ACTIVITY_TYPE_SIGN_RAW_PAYLOAD_V2`, `ACTIVITY_TYPE_SIGN_TRANSACTION_V2`, `ACTIVITY_TYPE_EXPORT_PRIVATE_KEY`, `ACTIVITY_TYPE_EXPORT_WALLET`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V4`, `ACTIVITY_TYPE_EMAIL_AUTH`, `ACTIVITY_TYPE_EXPORT_WALLET_ACCOUNT`, `ACTIVITY_TYPE_INIT_IMPORT_WALLET`, `ACTIVITY_TYPE_IMPORT_WALLET`, `ACTIVITY_TYPE_INIT_IMPORT_PRIVATE_KEY`, `ACTIVITY_TYPE_IMPORT_PRIVATE_KEY`, `ACTIVITY_TYPE_CREATE_POLICIES`, `ACTIVITY_TYPE_SIGN_RAW_PAYLOADS`, `ACTIVITY_TYPE_CREATE_READ_ONLY_SESSION`, `ACTIVITY_TYPE_CREATE_OAUTH_PROVIDERS`, `ACTIVITY_TYPE_DELETE_OAUTH_PROVIDERS`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V5`, `ACTIVITY_TYPE_OAUTH`, `ACTIVITY_TYPE_CREATE_API_KEYS_V2`, `ACTIVITY_TYPE_CREATE_READ_WRITE_SESSION`, `ACTIVITY_TYPE_EMAIL_AUTH_V2`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V6`, `ACTIVITY_TYPE_DELETE_PRIVATE_KEYS`, `ACTIVITY_TYPE_DELETE_WALLETS`, `ACTIVITY_TYPE_CREATE_READ_WRITE_SESSION_V2`, `ACTIVITY_TYPE_DELETE_SUB_ORGANIZATION`, `ACTIVITY_TYPE_INIT_OTP_AUTH`, `ACTIVITY_TYPE_OTP_AUTH`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V7`, `ACTIVITY_TYPE_UPDATE_WALLET`, `ACTIVITY_TYPE_UPDATE_POLICY_V2`, `ACTIVITY_TYPE_CREATE_USERS_V3`, `ACTIVITY_TYPE_INIT_OTP_AUTH_V2`, `ACTIVITY_TYPE_INIT_OTP`, `ACTIVITY_TYPE_VERIFY_OTP`, `ACTIVITY_TYPE_OTP_LOGIN`, `ACTIVITY_TYPE_STAMP_LOGIN`, `ACTIVITY_TYPE_OAUTH_LOGIN`, `ACTIVITY_TYPE_UPDATE_USER_NAME`, `ACTIVITY_TYPE_UPDATE_USER_EMAIL`, `ACTIVITY_TYPE_UPDATE_USER_PHONE_NUMBER`, `ACTIVITY_TYPE_INIT_FIAT_ON_RAMP`, `ACTIVITY_TYPE_CREATE_SMART_CONTRACT_INTERFACE`, `ACTIVITY_TYPE_DELETE_SMART_CONTRACT_INTERFACE`, `ACTIVITY_TYPE_ENABLE_AUTH_PROXY`, `ACTIVITY_TYPE_DISABLE_AUTH_PROXY`, `ACTIVITY_TYPE_UPDATE_AUTH_PROXY_CONFIG`, `ACTIVITY_TYPE_CREATE_OAUTH2_CREDENTIAL`, `ACTIVITY_TYPE_UPDATE_OAUTH2_CREDENTIAL`, `ACTIVITY_TYPE_DELETE_OAUTH2_CREDENTIAL`, `ACTIVITY_TYPE_OAUTH2_AUTHENTICATE`, `ACTIVITY_TYPE_DELETE_WALLET_ACCOUNTS`, `ACTIVITY_TYPE_DELETE_POLICIES`, `ACTIVITY_TYPE_ETH_SEND_RAW_TRANSACTION`, `ACTIVITY_TYPE_ETH_SEND_TRANSACTION`, `ACTIVITY_TYPE_CREATE_FIAT_ON_RAMP_CREDENTIAL`, `ACTIVITY_TYPE_UPDATE_FIAT_ON_RAMP_CREDENTIAL`, `ACTIVITY_TYPE_DELETE_FIAT_ON_RAMP_CREDENTIAL`, `ACTIVITY_TYPE_EMAIL_AUTH_V3`, `ACTIVITY_TYPE_INIT_USER_EMAIL_RECOVERY_V2`, `ACTIVITY_TYPE_INIT_OTP_AUTH_V3`, `ACTIVITY_TYPE_INIT_OTP_V2`, `ACTIVITY_TYPE_UPSERT_GAS_USAGE_CONFIG`, `ACTIVITY_TYPE_CREATE_TVC_APP`, `ACTIVITY_TYPE_CREATE_TVC_DEPLOYMENT`, `ACTIVITY_TYPE_CREATE_TVC_MANIFEST_APPROVALS`, `ACTIVITY_TYPE_SOL_SEND_TRANSACTION`, `ACTIVITY_TYPE_INIT_OTP_V3`, `ACTIVITY_TYPE_VERIFY_OTP_V2`, `ACTIVITY_TYPE_OTP_LOGIN_V2`, `ACTIVITY_TYPE_UPDATE_ORGANIZATION_NAME`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V8`, `ACTIVITY_TYPE_CREATE_OAUTH_PROVIDERS_V2`, `ACTIVITY_TYPE_CREATE_USERS_V4`, `ACTIVITY_TYPE_CREATE_WEBHOOK_ENDPOINT`, `ACTIVITY_TYPE_UPDATE_WEBHOOK_ENDPOINT`, `ACTIVITY_TYPE_DELETE_WEBHOOK_ENDPOINT`, `ACTIVITY_TYPE_SET_IP_ALLOWLIST`, `ACTIVITY_TYPE_REMOVE_IP_ALLOWLIST`, `ACTIVITY_TYPE_UPDATE_TVC_APP_LIVE_DEPLOYMENT`, `ACTIVITY_TYPE_DELETE_TVC_DEPLOYMENT`, `ACTIVITY_TYPE_DELETE_TVC_APP_AND_DEPLOYMENTS`, `ACTIVITY_TYPE_RESTORE_TVC_DEPLOYMENT`, `ACTIVITY_TYPE_SPARK_SIGN_FROST`, `ACTIVITY_TYPE_SPARK_PREPARE_TRANSFER`, `ACTIVITY_TYPE_SPARK_CLAIM_TRANSFER`, `ACTIVITY_TYPE_SPARK_PREPARE_LIGHTNING_RECEIVE`, `ACTIVITY_TYPE_POST_TVC_QUORUM_KEY_SHARE`, `ACTIVITY_TYPE_ETH_SEND_TRANSACTION_V2`, `ACTIVITY_TYPE_CREATE_MFA_POLICY`, `ACTIVITY_TYPE_UPDATE_MFA_POLICY`, `ACTIVITY_TYPE_DELETE_MFA_POLICY`, `ACTIVITY_TYPE_CREATE_SESSION_PROFILE`, `ACTIVITY_TYPE_EARN_DEPLOY_WRAPPER`, `ACTIVITY_TYPE_EARN_DEPOSIT`, `ACTIVITY_TYPE_EARN_WITHDRAW`, `ACTIVITY_TYPE_EARN_SET_WRAPPER_STATE`, `ACTIVITY_TYPE_CLAIM_EARN_FEES` @@ -1861,7 +1861,7 @@ Unique identifier for the user performing recovery. name field -Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_SWAP_CONFIG`, `FEATURE_NAME_EARN_CONFIG` +Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED` @@ -1876,7 +1876,7 @@ Optional value for the feature. Will override existing values if feature is alre name field -Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_SWAP_CONFIG`, `FEATURE_NAME_EARN_CONFIG` +Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED` @@ -3676,9 +3676,6 @@ item field
- -Whether captcha verification is required on sign up & otp init. -
@@ -4296,9 +4293,6 @@ Port to use for health checks.
Port to use for public ingress. - - -Optional desired replica count for this deployment.
@@ -5485,162 +5479,6 @@ The amount of the underlying asset to withdraw, in raw on-chain units. Pass 'MAX
- - executeSwapIntent field - - -CAIP-19 asset ID for the input asset. The chain is derived from this value. - - -CAIP-19 asset ID for the output asset. May be on a different chain than `input_token` for cross-chain swaps. - - -Base-unit amount of the input asset. - - -Wallet account address to sign and submit the swap transaction from. Cross-wallet swaps are not supported. - - -Whether to sponsor the resulting swap transaction via Gas Station when supported by the chain. - - -Maximum allowed slippage in basis points. - - -Swap provider to execute with, as returned by get_swap_quote. When omitted, execution uses the default provider. - - -Minimum acceptable base-unit amount of the output asset. Execution fails if the swap provider's quoted minimum output falls below this floor at execution time. - - - - - - upsertSwapConfigIntent field - - -feeReceiverWalletAddress field - - -Client fee in basis points applied to swaps; used for all pairs unless stable_fee_bps is set. - - -provider field - - -Optional override applied when both swap assets are stablecoins; falls back to fee_bps when unset. - - - - - - createTvcOperatorIntent field - - -Human-readable name for a new wallet created for this TVC operator - - -Unique identifier for an existing wallet to reuse for this TVC operator - - -Base derivation path for creating TVC operator wallet accounts - - -Human-readable name for this new TVC operator - - - - - - createTvcQuorumKeyIntent field - - -The threshold of operators needed to reassemble this TVC quorum key - - - Operator public keys used to encrypt and later approve the generated TVC quorum key shares - - -item field - - - - - - - - - reEncryptTvcQuorumKeyShareIntent field - - -Base64-encoded attestation document for the TVC deployment provisioning enclave - - -Base64-encoded manifest for the TVC deployment - - -Operator encryption public key used to encrypt the hosted TVC quorum key share - - -Operator signing public key used to approve the TVC manifest - - -Unique identifier of the TVC deployment receiving the re-encrypted quorum key share - - -Quorum key for the TVC application - - - - - - initImportSecretsIntent field - - -encryptionSuite field - -Enum options: `TRANSPORT_ENCRYPTION_SUITE_ENCLAVE_ENCRYPT_V1` - - - -The number of secrets the user intends to import. - - - - - - solSendTransactionIntentV2 field - - -Hex-encoded serialized unsigned Solana transaction (full wire format with zeroed signature placeholders) - - - Ordered Solana signer addresses Turnkey signs with. Between 1 and 16 signers. For sponsored transactions this must list every required signer of the transaction in transaction order. - - -item field - - - - - -Whether to sponsor this transaction via Gas Station. - - -CAIP-2 chain ID (e.g., 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' for Solana mainnet). Human-readable Solana aliases ('solana:mainnet', 'solana:devnet') are also accepted and normalized to canonical CAIP-2 values. - -Enum options: `solana:mainnet`, `solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp`, `solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d`, `solana:devnet`, `solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1`, `solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1wcaWoxPkrZBG` - - - -User-provided blockhash for replay protection / deadline control. If provided, it is used as-is, including for sponsored transactions (the transaction is only broadcastable while the blockhash is current). If omitted and sponsor=true, a fresh blockhash is fetched during execution. - - - - - -claimSwapFeesIntent field - earnSetWrapperStateIntent field @@ -5658,18 +5496,6 @@ When true, deposits to this wrapper are rejected; withdrawals are unaffected. Se Address of the deployed Earn wrapper to claim fees for. Must be one of the org's deployed wrappers. - - - - - - updateWalletAccountNameIntent field - - -Unique identifier for a given Wallet Account. - - -Human-readable name for this Wallet Account. @@ -6220,7 +6046,7 @@ item field name field -Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_SWAP_CONFIG`, `FEATURE_NAME_EARN_CONFIG` +Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED` @@ -6241,7 +6067,7 @@ value field name field -Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_SWAP_CONFIG`, `FEATURE_NAME_EARN_CONFIG` +Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED` @@ -7452,117 +7278,6 @@ Identifier to poll deposit status and tx hash via GetEarnDepositStatus. Identifier to poll withdrawal status and tx hash via GetEarnWithdrawStatus. - - - - - - executeSwapResult field - - -The send_transaction_status ID associated with the swap transaction submission - - -Swap provider used to build the transaction. - - -Quote identifier used for execution, if any. - - - - - - upsertSwapConfigResult field - - -feeReceiverWalletAddress field - - -feeBps field - - -stableFeeBps field - - - - - - createTvcOperatorResult field - - -The unique identifier for the wallet containing TVC operator accounts - - -The unique identifier for the TVC operator - - -Public encryption key for this TVC operator - - -Public signing key for this TVC operator - - - - - - createTvcQuorumKeyResult field - - -The unique identifier for the TVC quorum key - - -Public key for the generated TVC quorum key - - - The unique identifier(s) for the generated TVC quorum key shares - - -item field - - - - - - - - - reEncryptTvcQuorumKeyShareResult field - - -The unique identifier for the provisioning quorum key share - - - - - - initImportSecretsResult field - - - Enclave ingress target keys along with metadata specific to the encryption suite. For enclave encrypt v1 this will be ServerTargetMsgV1. - - -item field - - - - - - - - - solSendTransactionResultV2 field - - -The send_transaction_status ID associated with the transaction submission - - - - - - claimSwapFeesResult field - - -Relay claim request ID submitted through the permit endpoint. @@ -7584,15 +7299,6 @@ The wrapper's deposit state after this activity. Identifier to poll claim status and tx hash via GetClaimEarnFeesStatus. - - - - - - updateWalletAccountNameResult field - - -Unique identifier for a given Wallet Account. @@ -8715,52 +8421,12 @@ const response = await turnkeyClient.apiClient().getActivity({ "earnWithdrawResult": { "withdrawRequestId": "" }, - "executeSwapResult": { - "sendTransactionStatusId": "", - "provider": "", - "quoteId": "" - }, - "upsertSwapConfigResult": { - "feeReceiverWalletAddress": "", - "feeBps": "", - "stableFeeBps": "" - }, - "createTvcOperatorResult": { - "walletId": "", - "operatorId": "", - "encryptPublicKey": "", - "signPublicKey": "" - }, - "createTvcQuorumKeyResult": { - "quorumKeyId": "", - "quorumPublicKey": "", - "shareIds": [ - "" - ] - }, - "reEncryptTvcQuorumKeyShareResult": { - "provisioningShareId": "" - }, - "initImportSecretsResult": { - "enclaveTargetMessages": [ - "" - ] - }, - "solSendTransactionResultV2": { - "sendTransactionStatusId": "" - }, - "claimSwapFeesResult": { - "requestId": "" - }, "earnSetWrapperStateResult": { "wrapperAddress": "", "depositsDisabled": "" }, "claimEarnFeesResult": { "claimRequestId": "" - }, - "updateWalletAccountNameResult": { - "walletAccountId": "" } }, "votes": [ diff --git a/api-reference/queries/get-configs.mdx b/api-reference/queries/get-configs.mdx index cf082601..e85998a0 100644 --- a/api-reference/queries/get-configs.mdx +++ b/api-reference/queries/get-configs.mdx @@ -32,7 +32,7 @@ A successful response returns the following fields: name field -Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_SWAP_CONFIG`, `FEATURE_NAME_EARN_CONFIG` +Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED` diff --git a/api-reference/queries/list-activities.mdx b/api-reference/queries/list-activities.mdx index da6bca0f..6b242298 100644 --- a/api-reference/queries/list-activities.mdx +++ b/api-reference/queries/list-activities.mdx @@ -42,7 +42,7 @@ Enum options: `ACTIVITY_STATUS_CREATED`, `ACTIVITY_STATUS_PENDING`, `ACTIVITY_ST -Enum options: `ACTIVITY_TYPE_CREATE_API_KEYS`, `ACTIVITY_TYPE_CREATE_USERS`, `ACTIVITY_TYPE_CREATE_PRIVATE_KEYS`, `ACTIVITY_TYPE_SIGN_RAW_PAYLOAD`, `ACTIVITY_TYPE_CREATE_INVITATIONS`, `ACTIVITY_TYPE_ACCEPT_INVITATION`, `ACTIVITY_TYPE_CREATE_POLICY`, `ACTIVITY_TYPE_DISABLE_PRIVATE_KEY`, `ACTIVITY_TYPE_DELETE_USERS`, `ACTIVITY_TYPE_DELETE_API_KEYS`, `ACTIVITY_TYPE_DELETE_INVITATION`, `ACTIVITY_TYPE_DELETE_ORGANIZATION`, `ACTIVITY_TYPE_DELETE_POLICY`, `ACTIVITY_TYPE_CREATE_USER_TAG`, `ACTIVITY_TYPE_DELETE_USER_TAGS`, `ACTIVITY_TYPE_CREATE_ORGANIZATION`, `ACTIVITY_TYPE_SIGN_TRANSACTION`, `ACTIVITY_TYPE_APPROVE_ACTIVITY`, `ACTIVITY_TYPE_REJECT_ACTIVITY`, `ACTIVITY_TYPE_DELETE_AUTHENTICATORS`, `ACTIVITY_TYPE_CREATE_AUTHENTICATORS`, `ACTIVITY_TYPE_CREATE_PRIVATE_KEY_TAG`, `ACTIVITY_TYPE_DELETE_PRIVATE_KEY_TAGS`, `ACTIVITY_TYPE_SET_PAYMENT_METHOD`, `ACTIVITY_TYPE_ACTIVATE_BILLING_TIER`, `ACTIVITY_TYPE_DELETE_PAYMENT_METHOD`, `ACTIVITY_TYPE_CREATE_POLICY_V2`, `ACTIVITY_TYPE_CREATE_POLICY_V3`, `ACTIVITY_TYPE_CREATE_API_ONLY_USERS`, `ACTIVITY_TYPE_UPDATE_ROOT_QUORUM`, `ACTIVITY_TYPE_UPDATE_USER_TAG`, `ACTIVITY_TYPE_UPDATE_PRIVATE_KEY_TAG`, `ACTIVITY_TYPE_CREATE_AUTHENTICATORS_V2`, `ACTIVITY_TYPE_CREATE_ORGANIZATION_V2`, `ACTIVITY_TYPE_CREATE_USERS_V2`, `ACTIVITY_TYPE_ACCEPT_INVITATION_V2`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V2`, `ACTIVITY_TYPE_UPDATE_ALLOWED_ORIGINS`, `ACTIVITY_TYPE_CREATE_PRIVATE_KEYS_V2`, `ACTIVITY_TYPE_UPDATE_USER`, `ACTIVITY_TYPE_UPDATE_POLICY`, `ACTIVITY_TYPE_SET_PAYMENT_METHOD_V2`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V3`, `ACTIVITY_TYPE_CREATE_WALLET`, `ACTIVITY_TYPE_CREATE_WALLET_ACCOUNTS`, `ACTIVITY_TYPE_INIT_USER_EMAIL_RECOVERY`, `ACTIVITY_TYPE_RECOVER_USER`, `ACTIVITY_TYPE_SET_ORGANIZATION_FEATURE`, `ACTIVITY_TYPE_REMOVE_ORGANIZATION_FEATURE`, `ACTIVITY_TYPE_SIGN_RAW_PAYLOAD_V2`, `ACTIVITY_TYPE_SIGN_TRANSACTION_V2`, `ACTIVITY_TYPE_EXPORT_PRIVATE_KEY`, `ACTIVITY_TYPE_EXPORT_WALLET`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V4`, `ACTIVITY_TYPE_EMAIL_AUTH`, `ACTIVITY_TYPE_EXPORT_WALLET_ACCOUNT`, `ACTIVITY_TYPE_INIT_IMPORT_WALLET`, `ACTIVITY_TYPE_IMPORT_WALLET`, `ACTIVITY_TYPE_INIT_IMPORT_PRIVATE_KEY`, `ACTIVITY_TYPE_IMPORT_PRIVATE_KEY`, `ACTIVITY_TYPE_CREATE_POLICIES`, `ACTIVITY_TYPE_SIGN_RAW_PAYLOADS`, `ACTIVITY_TYPE_CREATE_READ_ONLY_SESSION`, `ACTIVITY_TYPE_CREATE_OAUTH_PROVIDERS`, `ACTIVITY_TYPE_DELETE_OAUTH_PROVIDERS`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V5`, `ACTIVITY_TYPE_OAUTH`, `ACTIVITY_TYPE_CREATE_API_KEYS_V2`, `ACTIVITY_TYPE_CREATE_READ_WRITE_SESSION`, `ACTIVITY_TYPE_EMAIL_AUTH_V2`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V6`, `ACTIVITY_TYPE_DELETE_PRIVATE_KEYS`, `ACTIVITY_TYPE_DELETE_WALLETS`, `ACTIVITY_TYPE_CREATE_READ_WRITE_SESSION_V2`, `ACTIVITY_TYPE_DELETE_SUB_ORGANIZATION`, `ACTIVITY_TYPE_INIT_OTP_AUTH`, `ACTIVITY_TYPE_OTP_AUTH`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V7`, `ACTIVITY_TYPE_UPDATE_WALLET`, `ACTIVITY_TYPE_UPDATE_POLICY_V2`, `ACTIVITY_TYPE_CREATE_USERS_V3`, `ACTIVITY_TYPE_INIT_OTP_AUTH_V2`, `ACTIVITY_TYPE_INIT_OTP`, `ACTIVITY_TYPE_VERIFY_OTP`, `ACTIVITY_TYPE_OTP_LOGIN`, `ACTIVITY_TYPE_STAMP_LOGIN`, `ACTIVITY_TYPE_OAUTH_LOGIN`, `ACTIVITY_TYPE_UPDATE_USER_NAME`, `ACTIVITY_TYPE_UPDATE_USER_EMAIL`, `ACTIVITY_TYPE_UPDATE_USER_PHONE_NUMBER`, `ACTIVITY_TYPE_INIT_FIAT_ON_RAMP`, `ACTIVITY_TYPE_CREATE_SMART_CONTRACT_INTERFACE`, `ACTIVITY_TYPE_DELETE_SMART_CONTRACT_INTERFACE`, `ACTIVITY_TYPE_ENABLE_AUTH_PROXY`, `ACTIVITY_TYPE_DISABLE_AUTH_PROXY`, `ACTIVITY_TYPE_UPDATE_AUTH_PROXY_CONFIG`, `ACTIVITY_TYPE_CREATE_OAUTH2_CREDENTIAL`, `ACTIVITY_TYPE_UPDATE_OAUTH2_CREDENTIAL`, `ACTIVITY_TYPE_DELETE_OAUTH2_CREDENTIAL`, `ACTIVITY_TYPE_OAUTH2_AUTHENTICATE`, `ACTIVITY_TYPE_DELETE_WALLET_ACCOUNTS`, `ACTIVITY_TYPE_DELETE_POLICIES`, `ACTIVITY_TYPE_ETH_SEND_RAW_TRANSACTION`, `ACTIVITY_TYPE_ETH_SEND_TRANSACTION`, `ACTIVITY_TYPE_CREATE_FIAT_ON_RAMP_CREDENTIAL`, `ACTIVITY_TYPE_UPDATE_FIAT_ON_RAMP_CREDENTIAL`, `ACTIVITY_TYPE_DELETE_FIAT_ON_RAMP_CREDENTIAL`, `ACTIVITY_TYPE_EMAIL_AUTH_V3`, `ACTIVITY_TYPE_INIT_USER_EMAIL_RECOVERY_V2`, `ACTIVITY_TYPE_INIT_OTP_AUTH_V3`, `ACTIVITY_TYPE_INIT_OTP_V2`, `ACTIVITY_TYPE_UPSERT_GAS_USAGE_CONFIG`, `ACTIVITY_TYPE_CREATE_TVC_APP`, `ACTIVITY_TYPE_CREATE_TVC_DEPLOYMENT`, `ACTIVITY_TYPE_CREATE_TVC_MANIFEST_APPROVALS`, `ACTIVITY_TYPE_SOL_SEND_TRANSACTION`, `ACTIVITY_TYPE_INIT_OTP_V3`, `ACTIVITY_TYPE_VERIFY_OTP_V2`, `ACTIVITY_TYPE_OTP_LOGIN_V2`, `ACTIVITY_TYPE_UPDATE_ORGANIZATION_NAME`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V8`, `ACTIVITY_TYPE_CREATE_OAUTH_PROVIDERS_V2`, `ACTIVITY_TYPE_CREATE_USERS_V4`, `ACTIVITY_TYPE_CREATE_WEBHOOK_ENDPOINT`, `ACTIVITY_TYPE_UPDATE_WEBHOOK_ENDPOINT`, `ACTIVITY_TYPE_DELETE_WEBHOOK_ENDPOINT`, `ACTIVITY_TYPE_SET_IP_ALLOWLIST`, `ACTIVITY_TYPE_REMOVE_IP_ALLOWLIST`, `ACTIVITY_TYPE_UPDATE_TVC_APP_LIVE_DEPLOYMENT`, `ACTIVITY_TYPE_DELETE_TVC_DEPLOYMENT`, `ACTIVITY_TYPE_DELETE_TVC_APP_AND_DEPLOYMENTS`, `ACTIVITY_TYPE_RESTORE_TVC_DEPLOYMENT`, `ACTIVITY_TYPE_SPARK_SIGN_FROST`, `ACTIVITY_TYPE_SPARK_PREPARE_TRANSFER`, `ACTIVITY_TYPE_SPARK_CLAIM_TRANSFER`, `ACTIVITY_TYPE_SPARK_PREPARE_LIGHTNING_RECEIVE`, `ACTIVITY_TYPE_POST_TVC_QUORUM_KEY_SHARE`, `ACTIVITY_TYPE_ETH_SEND_TRANSACTION_V2`, `ACTIVITY_TYPE_CREATE_MFA_POLICY`, `ACTIVITY_TYPE_UPDATE_MFA_POLICY`, `ACTIVITY_TYPE_DELETE_MFA_POLICY`, `ACTIVITY_TYPE_CREATE_SESSION_PROFILE`, `ACTIVITY_TYPE_EARN_DEPLOY_WRAPPER`, `ACTIVITY_TYPE_EARN_DEPOSIT`, `ACTIVITY_TYPE_EARN_WITHDRAW`, `ACTIVITY_TYPE_EXECUTE_SWAP`, `ACTIVITY_TYPE_UPSERT_SWAP_CONFIG`, `ACTIVITY_TYPE_CREATE_TVC_OPERATOR`, `ACTIVITY_TYPE_CREATE_TVC_QUORUM_KEY`, `ACTIVITY_TYPE_RE_ENCRYPT_TVC_QUORUM_KEY_SHARE`, `ACTIVITY_TYPE_INIT_IMPORT_SECRETS`, `ACTIVITY_TYPE_SOL_SEND_TRANSACTION_V2`, `ACTIVITY_TYPE_CLAIM_SWAP_FEES`, `ACTIVITY_TYPE_EARN_SET_WRAPPER_STATE`, `ACTIVITY_TYPE_CLAIM_EARN_FEES`, `ACTIVITY_TYPE_UPDATE_WALLET_ACCOUNT_NAME` +Enum options: `ACTIVITY_TYPE_CREATE_API_KEYS`, `ACTIVITY_TYPE_CREATE_USERS`, `ACTIVITY_TYPE_CREATE_PRIVATE_KEYS`, `ACTIVITY_TYPE_SIGN_RAW_PAYLOAD`, `ACTIVITY_TYPE_CREATE_INVITATIONS`, `ACTIVITY_TYPE_ACCEPT_INVITATION`, `ACTIVITY_TYPE_CREATE_POLICY`, `ACTIVITY_TYPE_DISABLE_PRIVATE_KEY`, `ACTIVITY_TYPE_DELETE_USERS`, `ACTIVITY_TYPE_DELETE_API_KEYS`, `ACTIVITY_TYPE_DELETE_INVITATION`, `ACTIVITY_TYPE_DELETE_ORGANIZATION`, `ACTIVITY_TYPE_DELETE_POLICY`, `ACTIVITY_TYPE_CREATE_USER_TAG`, `ACTIVITY_TYPE_DELETE_USER_TAGS`, `ACTIVITY_TYPE_CREATE_ORGANIZATION`, `ACTIVITY_TYPE_SIGN_TRANSACTION`, `ACTIVITY_TYPE_APPROVE_ACTIVITY`, `ACTIVITY_TYPE_REJECT_ACTIVITY`, `ACTIVITY_TYPE_DELETE_AUTHENTICATORS`, `ACTIVITY_TYPE_CREATE_AUTHENTICATORS`, `ACTIVITY_TYPE_CREATE_PRIVATE_KEY_TAG`, `ACTIVITY_TYPE_DELETE_PRIVATE_KEY_TAGS`, `ACTIVITY_TYPE_SET_PAYMENT_METHOD`, `ACTIVITY_TYPE_ACTIVATE_BILLING_TIER`, `ACTIVITY_TYPE_DELETE_PAYMENT_METHOD`, `ACTIVITY_TYPE_CREATE_POLICY_V2`, `ACTIVITY_TYPE_CREATE_POLICY_V3`, `ACTIVITY_TYPE_CREATE_API_ONLY_USERS`, `ACTIVITY_TYPE_UPDATE_ROOT_QUORUM`, `ACTIVITY_TYPE_UPDATE_USER_TAG`, `ACTIVITY_TYPE_UPDATE_PRIVATE_KEY_TAG`, `ACTIVITY_TYPE_CREATE_AUTHENTICATORS_V2`, `ACTIVITY_TYPE_CREATE_ORGANIZATION_V2`, `ACTIVITY_TYPE_CREATE_USERS_V2`, `ACTIVITY_TYPE_ACCEPT_INVITATION_V2`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V2`, `ACTIVITY_TYPE_UPDATE_ALLOWED_ORIGINS`, `ACTIVITY_TYPE_CREATE_PRIVATE_KEYS_V2`, `ACTIVITY_TYPE_UPDATE_USER`, `ACTIVITY_TYPE_UPDATE_POLICY`, `ACTIVITY_TYPE_SET_PAYMENT_METHOD_V2`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V3`, `ACTIVITY_TYPE_CREATE_WALLET`, `ACTIVITY_TYPE_CREATE_WALLET_ACCOUNTS`, `ACTIVITY_TYPE_INIT_USER_EMAIL_RECOVERY`, `ACTIVITY_TYPE_RECOVER_USER`, `ACTIVITY_TYPE_SET_ORGANIZATION_FEATURE`, `ACTIVITY_TYPE_REMOVE_ORGANIZATION_FEATURE`, `ACTIVITY_TYPE_SIGN_RAW_PAYLOAD_V2`, `ACTIVITY_TYPE_SIGN_TRANSACTION_V2`, `ACTIVITY_TYPE_EXPORT_PRIVATE_KEY`, `ACTIVITY_TYPE_EXPORT_WALLET`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V4`, `ACTIVITY_TYPE_EMAIL_AUTH`, `ACTIVITY_TYPE_EXPORT_WALLET_ACCOUNT`, `ACTIVITY_TYPE_INIT_IMPORT_WALLET`, `ACTIVITY_TYPE_IMPORT_WALLET`, `ACTIVITY_TYPE_INIT_IMPORT_PRIVATE_KEY`, `ACTIVITY_TYPE_IMPORT_PRIVATE_KEY`, `ACTIVITY_TYPE_CREATE_POLICIES`, `ACTIVITY_TYPE_SIGN_RAW_PAYLOADS`, `ACTIVITY_TYPE_CREATE_READ_ONLY_SESSION`, `ACTIVITY_TYPE_CREATE_OAUTH_PROVIDERS`, `ACTIVITY_TYPE_DELETE_OAUTH_PROVIDERS`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V5`, `ACTIVITY_TYPE_OAUTH`, `ACTIVITY_TYPE_CREATE_API_KEYS_V2`, `ACTIVITY_TYPE_CREATE_READ_WRITE_SESSION`, `ACTIVITY_TYPE_EMAIL_AUTH_V2`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V6`, `ACTIVITY_TYPE_DELETE_PRIVATE_KEYS`, `ACTIVITY_TYPE_DELETE_WALLETS`, `ACTIVITY_TYPE_CREATE_READ_WRITE_SESSION_V2`, `ACTIVITY_TYPE_DELETE_SUB_ORGANIZATION`, `ACTIVITY_TYPE_INIT_OTP_AUTH`, `ACTIVITY_TYPE_OTP_AUTH`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V7`, `ACTIVITY_TYPE_UPDATE_WALLET`, `ACTIVITY_TYPE_UPDATE_POLICY_V2`, `ACTIVITY_TYPE_CREATE_USERS_V3`, `ACTIVITY_TYPE_INIT_OTP_AUTH_V2`, `ACTIVITY_TYPE_INIT_OTP`, `ACTIVITY_TYPE_VERIFY_OTP`, `ACTIVITY_TYPE_OTP_LOGIN`, `ACTIVITY_TYPE_STAMP_LOGIN`, `ACTIVITY_TYPE_OAUTH_LOGIN`, `ACTIVITY_TYPE_UPDATE_USER_NAME`, `ACTIVITY_TYPE_UPDATE_USER_EMAIL`, `ACTIVITY_TYPE_UPDATE_USER_PHONE_NUMBER`, `ACTIVITY_TYPE_INIT_FIAT_ON_RAMP`, `ACTIVITY_TYPE_CREATE_SMART_CONTRACT_INTERFACE`, `ACTIVITY_TYPE_DELETE_SMART_CONTRACT_INTERFACE`, `ACTIVITY_TYPE_ENABLE_AUTH_PROXY`, `ACTIVITY_TYPE_DISABLE_AUTH_PROXY`, `ACTIVITY_TYPE_UPDATE_AUTH_PROXY_CONFIG`, `ACTIVITY_TYPE_CREATE_OAUTH2_CREDENTIAL`, `ACTIVITY_TYPE_UPDATE_OAUTH2_CREDENTIAL`, `ACTIVITY_TYPE_DELETE_OAUTH2_CREDENTIAL`, `ACTIVITY_TYPE_OAUTH2_AUTHENTICATE`, `ACTIVITY_TYPE_DELETE_WALLET_ACCOUNTS`, `ACTIVITY_TYPE_DELETE_POLICIES`, `ACTIVITY_TYPE_ETH_SEND_RAW_TRANSACTION`, `ACTIVITY_TYPE_ETH_SEND_TRANSACTION`, `ACTIVITY_TYPE_CREATE_FIAT_ON_RAMP_CREDENTIAL`, `ACTIVITY_TYPE_UPDATE_FIAT_ON_RAMP_CREDENTIAL`, `ACTIVITY_TYPE_DELETE_FIAT_ON_RAMP_CREDENTIAL`, `ACTIVITY_TYPE_EMAIL_AUTH_V3`, `ACTIVITY_TYPE_INIT_USER_EMAIL_RECOVERY_V2`, `ACTIVITY_TYPE_INIT_OTP_AUTH_V3`, `ACTIVITY_TYPE_INIT_OTP_V2`, `ACTIVITY_TYPE_UPSERT_GAS_USAGE_CONFIG`, `ACTIVITY_TYPE_CREATE_TVC_APP`, `ACTIVITY_TYPE_CREATE_TVC_DEPLOYMENT`, `ACTIVITY_TYPE_CREATE_TVC_MANIFEST_APPROVALS`, `ACTIVITY_TYPE_SOL_SEND_TRANSACTION`, `ACTIVITY_TYPE_INIT_OTP_V3`, `ACTIVITY_TYPE_VERIFY_OTP_V2`, `ACTIVITY_TYPE_OTP_LOGIN_V2`, `ACTIVITY_TYPE_UPDATE_ORGANIZATION_NAME`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V8`, `ACTIVITY_TYPE_CREATE_OAUTH_PROVIDERS_V2`, `ACTIVITY_TYPE_CREATE_USERS_V4`, `ACTIVITY_TYPE_CREATE_WEBHOOK_ENDPOINT`, `ACTIVITY_TYPE_UPDATE_WEBHOOK_ENDPOINT`, `ACTIVITY_TYPE_DELETE_WEBHOOK_ENDPOINT`, `ACTIVITY_TYPE_SET_IP_ALLOWLIST`, `ACTIVITY_TYPE_REMOVE_IP_ALLOWLIST`, `ACTIVITY_TYPE_UPDATE_TVC_APP_LIVE_DEPLOYMENT`, `ACTIVITY_TYPE_DELETE_TVC_DEPLOYMENT`, `ACTIVITY_TYPE_DELETE_TVC_APP_AND_DEPLOYMENTS`, `ACTIVITY_TYPE_RESTORE_TVC_DEPLOYMENT`, `ACTIVITY_TYPE_SPARK_SIGN_FROST`, `ACTIVITY_TYPE_SPARK_PREPARE_TRANSFER`, `ACTIVITY_TYPE_SPARK_CLAIM_TRANSFER`, `ACTIVITY_TYPE_SPARK_PREPARE_LIGHTNING_RECEIVE`, `ACTIVITY_TYPE_POST_TVC_QUORUM_KEY_SHARE`, `ACTIVITY_TYPE_ETH_SEND_TRANSACTION_V2`, `ACTIVITY_TYPE_CREATE_MFA_POLICY`, `ACTIVITY_TYPE_UPDATE_MFA_POLICY`, `ACTIVITY_TYPE_DELETE_MFA_POLICY`, `ACTIVITY_TYPE_CREATE_SESSION_PROFILE`, `ACTIVITY_TYPE_EARN_DEPLOY_WRAPPER`, `ACTIVITY_TYPE_EARN_DEPOSIT`, `ACTIVITY_TYPE_EARN_WITHDRAW`, `ACTIVITY_TYPE_EARN_SET_WRAPPER_STATE`, `ACTIVITY_TYPE_CLAIM_EARN_FEES` @@ -67,7 +67,7 @@ Enum options: `ACTIVITY_STATUS_CREATED`, `ACTIVITY_STATUS_PENDING`, `ACTIVITY_ST type field -Enum options: `ACTIVITY_TYPE_CREATE_API_KEYS`, `ACTIVITY_TYPE_CREATE_USERS`, `ACTIVITY_TYPE_CREATE_PRIVATE_KEYS`, `ACTIVITY_TYPE_SIGN_RAW_PAYLOAD`, `ACTIVITY_TYPE_CREATE_INVITATIONS`, `ACTIVITY_TYPE_ACCEPT_INVITATION`, `ACTIVITY_TYPE_CREATE_POLICY`, `ACTIVITY_TYPE_DISABLE_PRIVATE_KEY`, `ACTIVITY_TYPE_DELETE_USERS`, `ACTIVITY_TYPE_DELETE_API_KEYS`, `ACTIVITY_TYPE_DELETE_INVITATION`, `ACTIVITY_TYPE_DELETE_ORGANIZATION`, `ACTIVITY_TYPE_DELETE_POLICY`, `ACTIVITY_TYPE_CREATE_USER_TAG`, `ACTIVITY_TYPE_DELETE_USER_TAGS`, `ACTIVITY_TYPE_CREATE_ORGANIZATION`, `ACTIVITY_TYPE_SIGN_TRANSACTION`, `ACTIVITY_TYPE_APPROVE_ACTIVITY`, `ACTIVITY_TYPE_REJECT_ACTIVITY`, `ACTIVITY_TYPE_DELETE_AUTHENTICATORS`, `ACTIVITY_TYPE_CREATE_AUTHENTICATORS`, `ACTIVITY_TYPE_CREATE_PRIVATE_KEY_TAG`, `ACTIVITY_TYPE_DELETE_PRIVATE_KEY_TAGS`, `ACTIVITY_TYPE_SET_PAYMENT_METHOD`, `ACTIVITY_TYPE_ACTIVATE_BILLING_TIER`, `ACTIVITY_TYPE_DELETE_PAYMENT_METHOD`, `ACTIVITY_TYPE_CREATE_POLICY_V2`, `ACTIVITY_TYPE_CREATE_POLICY_V3`, `ACTIVITY_TYPE_CREATE_API_ONLY_USERS`, `ACTIVITY_TYPE_UPDATE_ROOT_QUORUM`, `ACTIVITY_TYPE_UPDATE_USER_TAG`, `ACTIVITY_TYPE_UPDATE_PRIVATE_KEY_TAG`, `ACTIVITY_TYPE_CREATE_AUTHENTICATORS_V2`, `ACTIVITY_TYPE_CREATE_ORGANIZATION_V2`, `ACTIVITY_TYPE_CREATE_USERS_V2`, `ACTIVITY_TYPE_ACCEPT_INVITATION_V2`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V2`, `ACTIVITY_TYPE_UPDATE_ALLOWED_ORIGINS`, `ACTIVITY_TYPE_CREATE_PRIVATE_KEYS_V2`, `ACTIVITY_TYPE_UPDATE_USER`, `ACTIVITY_TYPE_UPDATE_POLICY`, `ACTIVITY_TYPE_SET_PAYMENT_METHOD_V2`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V3`, `ACTIVITY_TYPE_CREATE_WALLET`, `ACTIVITY_TYPE_CREATE_WALLET_ACCOUNTS`, `ACTIVITY_TYPE_INIT_USER_EMAIL_RECOVERY`, `ACTIVITY_TYPE_RECOVER_USER`, `ACTIVITY_TYPE_SET_ORGANIZATION_FEATURE`, `ACTIVITY_TYPE_REMOVE_ORGANIZATION_FEATURE`, `ACTIVITY_TYPE_SIGN_RAW_PAYLOAD_V2`, `ACTIVITY_TYPE_SIGN_TRANSACTION_V2`, `ACTIVITY_TYPE_EXPORT_PRIVATE_KEY`, `ACTIVITY_TYPE_EXPORT_WALLET`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V4`, `ACTIVITY_TYPE_EMAIL_AUTH`, `ACTIVITY_TYPE_EXPORT_WALLET_ACCOUNT`, `ACTIVITY_TYPE_INIT_IMPORT_WALLET`, `ACTIVITY_TYPE_IMPORT_WALLET`, `ACTIVITY_TYPE_INIT_IMPORT_PRIVATE_KEY`, `ACTIVITY_TYPE_IMPORT_PRIVATE_KEY`, `ACTIVITY_TYPE_CREATE_POLICIES`, `ACTIVITY_TYPE_SIGN_RAW_PAYLOADS`, `ACTIVITY_TYPE_CREATE_READ_ONLY_SESSION`, `ACTIVITY_TYPE_CREATE_OAUTH_PROVIDERS`, `ACTIVITY_TYPE_DELETE_OAUTH_PROVIDERS`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V5`, `ACTIVITY_TYPE_OAUTH`, `ACTIVITY_TYPE_CREATE_API_KEYS_V2`, `ACTIVITY_TYPE_CREATE_READ_WRITE_SESSION`, `ACTIVITY_TYPE_EMAIL_AUTH_V2`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V6`, `ACTIVITY_TYPE_DELETE_PRIVATE_KEYS`, `ACTIVITY_TYPE_DELETE_WALLETS`, `ACTIVITY_TYPE_CREATE_READ_WRITE_SESSION_V2`, `ACTIVITY_TYPE_DELETE_SUB_ORGANIZATION`, `ACTIVITY_TYPE_INIT_OTP_AUTH`, `ACTIVITY_TYPE_OTP_AUTH`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V7`, `ACTIVITY_TYPE_UPDATE_WALLET`, `ACTIVITY_TYPE_UPDATE_POLICY_V2`, `ACTIVITY_TYPE_CREATE_USERS_V3`, `ACTIVITY_TYPE_INIT_OTP_AUTH_V2`, `ACTIVITY_TYPE_INIT_OTP`, `ACTIVITY_TYPE_VERIFY_OTP`, `ACTIVITY_TYPE_OTP_LOGIN`, `ACTIVITY_TYPE_STAMP_LOGIN`, `ACTIVITY_TYPE_OAUTH_LOGIN`, `ACTIVITY_TYPE_UPDATE_USER_NAME`, `ACTIVITY_TYPE_UPDATE_USER_EMAIL`, `ACTIVITY_TYPE_UPDATE_USER_PHONE_NUMBER`, `ACTIVITY_TYPE_INIT_FIAT_ON_RAMP`, `ACTIVITY_TYPE_CREATE_SMART_CONTRACT_INTERFACE`, `ACTIVITY_TYPE_DELETE_SMART_CONTRACT_INTERFACE`, `ACTIVITY_TYPE_ENABLE_AUTH_PROXY`, `ACTIVITY_TYPE_DISABLE_AUTH_PROXY`, `ACTIVITY_TYPE_UPDATE_AUTH_PROXY_CONFIG`, `ACTIVITY_TYPE_CREATE_OAUTH2_CREDENTIAL`, `ACTIVITY_TYPE_UPDATE_OAUTH2_CREDENTIAL`, `ACTIVITY_TYPE_DELETE_OAUTH2_CREDENTIAL`, `ACTIVITY_TYPE_OAUTH2_AUTHENTICATE`, `ACTIVITY_TYPE_DELETE_WALLET_ACCOUNTS`, `ACTIVITY_TYPE_DELETE_POLICIES`, `ACTIVITY_TYPE_ETH_SEND_RAW_TRANSACTION`, `ACTIVITY_TYPE_ETH_SEND_TRANSACTION`, `ACTIVITY_TYPE_CREATE_FIAT_ON_RAMP_CREDENTIAL`, `ACTIVITY_TYPE_UPDATE_FIAT_ON_RAMP_CREDENTIAL`, `ACTIVITY_TYPE_DELETE_FIAT_ON_RAMP_CREDENTIAL`, `ACTIVITY_TYPE_EMAIL_AUTH_V3`, `ACTIVITY_TYPE_INIT_USER_EMAIL_RECOVERY_V2`, `ACTIVITY_TYPE_INIT_OTP_AUTH_V3`, `ACTIVITY_TYPE_INIT_OTP_V2`, `ACTIVITY_TYPE_UPSERT_GAS_USAGE_CONFIG`, `ACTIVITY_TYPE_CREATE_TVC_APP`, `ACTIVITY_TYPE_CREATE_TVC_DEPLOYMENT`, `ACTIVITY_TYPE_CREATE_TVC_MANIFEST_APPROVALS`, `ACTIVITY_TYPE_SOL_SEND_TRANSACTION`, `ACTIVITY_TYPE_INIT_OTP_V3`, `ACTIVITY_TYPE_VERIFY_OTP_V2`, `ACTIVITY_TYPE_OTP_LOGIN_V2`, `ACTIVITY_TYPE_UPDATE_ORGANIZATION_NAME`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V8`, `ACTIVITY_TYPE_CREATE_OAUTH_PROVIDERS_V2`, `ACTIVITY_TYPE_CREATE_USERS_V4`, `ACTIVITY_TYPE_CREATE_WEBHOOK_ENDPOINT`, `ACTIVITY_TYPE_UPDATE_WEBHOOK_ENDPOINT`, `ACTIVITY_TYPE_DELETE_WEBHOOK_ENDPOINT`, `ACTIVITY_TYPE_SET_IP_ALLOWLIST`, `ACTIVITY_TYPE_REMOVE_IP_ALLOWLIST`, `ACTIVITY_TYPE_UPDATE_TVC_APP_LIVE_DEPLOYMENT`, `ACTIVITY_TYPE_DELETE_TVC_DEPLOYMENT`, `ACTIVITY_TYPE_DELETE_TVC_APP_AND_DEPLOYMENTS`, `ACTIVITY_TYPE_RESTORE_TVC_DEPLOYMENT`, `ACTIVITY_TYPE_SPARK_SIGN_FROST`, `ACTIVITY_TYPE_SPARK_PREPARE_TRANSFER`, `ACTIVITY_TYPE_SPARK_CLAIM_TRANSFER`, `ACTIVITY_TYPE_SPARK_PREPARE_LIGHTNING_RECEIVE`, `ACTIVITY_TYPE_POST_TVC_QUORUM_KEY_SHARE`, `ACTIVITY_TYPE_ETH_SEND_TRANSACTION_V2`, `ACTIVITY_TYPE_CREATE_MFA_POLICY`, `ACTIVITY_TYPE_UPDATE_MFA_POLICY`, `ACTIVITY_TYPE_DELETE_MFA_POLICY`, `ACTIVITY_TYPE_CREATE_SESSION_PROFILE`, `ACTIVITY_TYPE_EARN_DEPLOY_WRAPPER`, `ACTIVITY_TYPE_EARN_DEPOSIT`, `ACTIVITY_TYPE_EARN_WITHDRAW`, `ACTIVITY_TYPE_EXECUTE_SWAP`, `ACTIVITY_TYPE_UPSERT_SWAP_CONFIG`, `ACTIVITY_TYPE_CREATE_TVC_OPERATOR`, `ACTIVITY_TYPE_CREATE_TVC_QUORUM_KEY`, `ACTIVITY_TYPE_RE_ENCRYPT_TVC_QUORUM_KEY_SHARE`, `ACTIVITY_TYPE_INIT_IMPORT_SECRETS`, `ACTIVITY_TYPE_SOL_SEND_TRANSACTION_V2`, `ACTIVITY_TYPE_CLAIM_SWAP_FEES`, `ACTIVITY_TYPE_EARN_SET_WRAPPER_STATE`, `ACTIVITY_TYPE_CLAIM_EARN_FEES`, `ACTIVITY_TYPE_UPDATE_WALLET_ACCOUNT_NAME` +Enum options: `ACTIVITY_TYPE_CREATE_API_KEYS`, `ACTIVITY_TYPE_CREATE_USERS`, `ACTIVITY_TYPE_CREATE_PRIVATE_KEYS`, `ACTIVITY_TYPE_SIGN_RAW_PAYLOAD`, `ACTIVITY_TYPE_CREATE_INVITATIONS`, `ACTIVITY_TYPE_ACCEPT_INVITATION`, `ACTIVITY_TYPE_CREATE_POLICY`, `ACTIVITY_TYPE_DISABLE_PRIVATE_KEY`, `ACTIVITY_TYPE_DELETE_USERS`, `ACTIVITY_TYPE_DELETE_API_KEYS`, `ACTIVITY_TYPE_DELETE_INVITATION`, `ACTIVITY_TYPE_DELETE_ORGANIZATION`, `ACTIVITY_TYPE_DELETE_POLICY`, `ACTIVITY_TYPE_CREATE_USER_TAG`, `ACTIVITY_TYPE_DELETE_USER_TAGS`, `ACTIVITY_TYPE_CREATE_ORGANIZATION`, `ACTIVITY_TYPE_SIGN_TRANSACTION`, `ACTIVITY_TYPE_APPROVE_ACTIVITY`, `ACTIVITY_TYPE_REJECT_ACTIVITY`, `ACTIVITY_TYPE_DELETE_AUTHENTICATORS`, `ACTIVITY_TYPE_CREATE_AUTHENTICATORS`, `ACTIVITY_TYPE_CREATE_PRIVATE_KEY_TAG`, `ACTIVITY_TYPE_DELETE_PRIVATE_KEY_TAGS`, `ACTIVITY_TYPE_SET_PAYMENT_METHOD`, `ACTIVITY_TYPE_ACTIVATE_BILLING_TIER`, `ACTIVITY_TYPE_DELETE_PAYMENT_METHOD`, `ACTIVITY_TYPE_CREATE_POLICY_V2`, `ACTIVITY_TYPE_CREATE_POLICY_V3`, `ACTIVITY_TYPE_CREATE_API_ONLY_USERS`, `ACTIVITY_TYPE_UPDATE_ROOT_QUORUM`, `ACTIVITY_TYPE_UPDATE_USER_TAG`, `ACTIVITY_TYPE_UPDATE_PRIVATE_KEY_TAG`, `ACTIVITY_TYPE_CREATE_AUTHENTICATORS_V2`, `ACTIVITY_TYPE_CREATE_ORGANIZATION_V2`, `ACTIVITY_TYPE_CREATE_USERS_V2`, `ACTIVITY_TYPE_ACCEPT_INVITATION_V2`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V2`, `ACTIVITY_TYPE_UPDATE_ALLOWED_ORIGINS`, `ACTIVITY_TYPE_CREATE_PRIVATE_KEYS_V2`, `ACTIVITY_TYPE_UPDATE_USER`, `ACTIVITY_TYPE_UPDATE_POLICY`, `ACTIVITY_TYPE_SET_PAYMENT_METHOD_V2`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V3`, `ACTIVITY_TYPE_CREATE_WALLET`, `ACTIVITY_TYPE_CREATE_WALLET_ACCOUNTS`, `ACTIVITY_TYPE_INIT_USER_EMAIL_RECOVERY`, `ACTIVITY_TYPE_RECOVER_USER`, `ACTIVITY_TYPE_SET_ORGANIZATION_FEATURE`, `ACTIVITY_TYPE_REMOVE_ORGANIZATION_FEATURE`, `ACTIVITY_TYPE_SIGN_RAW_PAYLOAD_V2`, `ACTIVITY_TYPE_SIGN_TRANSACTION_V2`, `ACTIVITY_TYPE_EXPORT_PRIVATE_KEY`, `ACTIVITY_TYPE_EXPORT_WALLET`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V4`, `ACTIVITY_TYPE_EMAIL_AUTH`, `ACTIVITY_TYPE_EXPORT_WALLET_ACCOUNT`, `ACTIVITY_TYPE_INIT_IMPORT_WALLET`, `ACTIVITY_TYPE_IMPORT_WALLET`, `ACTIVITY_TYPE_INIT_IMPORT_PRIVATE_KEY`, `ACTIVITY_TYPE_IMPORT_PRIVATE_KEY`, `ACTIVITY_TYPE_CREATE_POLICIES`, `ACTIVITY_TYPE_SIGN_RAW_PAYLOADS`, `ACTIVITY_TYPE_CREATE_READ_ONLY_SESSION`, `ACTIVITY_TYPE_CREATE_OAUTH_PROVIDERS`, `ACTIVITY_TYPE_DELETE_OAUTH_PROVIDERS`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V5`, `ACTIVITY_TYPE_OAUTH`, `ACTIVITY_TYPE_CREATE_API_KEYS_V2`, `ACTIVITY_TYPE_CREATE_READ_WRITE_SESSION`, `ACTIVITY_TYPE_EMAIL_AUTH_V2`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V6`, `ACTIVITY_TYPE_DELETE_PRIVATE_KEYS`, `ACTIVITY_TYPE_DELETE_WALLETS`, `ACTIVITY_TYPE_CREATE_READ_WRITE_SESSION_V2`, `ACTIVITY_TYPE_DELETE_SUB_ORGANIZATION`, `ACTIVITY_TYPE_INIT_OTP_AUTH`, `ACTIVITY_TYPE_OTP_AUTH`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V7`, `ACTIVITY_TYPE_UPDATE_WALLET`, `ACTIVITY_TYPE_UPDATE_POLICY_V2`, `ACTIVITY_TYPE_CREATE_USERS_V3`, `ACTIVITY_TYPE_INIT_OTP_AUTH_V2`, `ACTIVITY_TYPE_INIT_OTP`, `ACTIVITY_TYPE_VERIFY_OTP`, `ACTIVITY_TYPE_OTP_LOGIN`, `ACTIVITY_TYPE_STAMP_LOGIN`, `ACTIVITY_TYPE_OAUTH_LOGIN`, `ACTIVITY_TYPE_UPDATE_USER_NAME`, `ACTIVITY_TYPE_UPDATE_USER_EMAIL`, `ACTIVITY_TYPE_UPDATE_USER_PHONE_NUMBER`, `ACTIVITY_TYPE_INIT_FIAT_ON_RAMP`, `ACTIVITY_TYPE_CREATE_SMART_CONTRACT_INTERFACE`, `ACTIVITY_TYPE_DELETE_SMART_CONTRACT_INTERFACE`, `ACTIVITY_TYPE_ENABLE_AUTH_PROXY`, `ACTIVITY_TYPE_DISABLE_AUTH_PROXY`, `ACTIVITY_TYPE_UPDATE_AUTH_PROXY_CONFIG`, `ACTIVITY_TYPE_CREATE_OAUTH2_CREDENTIAL`, `ACTIVITY_TYPE_UPDATE_OAUTH2_CREDENTIAL`, `ACTIVITY_TYPE_DELETE_OAUTH2_CREDENTIAL`, `ACTIVITY_TYPE_OAUTH2_AUTHENTICATE`, `ACTIVITY_TYPE_DELETE_WALLET_ACCOUNTS`, `ACTIVITY_TYPE_DELETE_POLICIES`, `ACTIVITY_TYPE_ETH_SEND_RAW_TRANSACTION`, `ACTIVITY_TYPE_ETH_SEND_TRANSACTION`, `ACTIVITY_TYPE_CREATE_FIAT_ON_RAMP_CREDENTIAL`, `ACTIVITY_TYPE_UPDATE_FIAT_ON_RAMP_CREDENTIAL`, `ACTIVITY_TYPE_DELETE_FIAT_ON_RAMP_CREDENTIAL`, `ACTIVITY_TYPE_EMAIL_AUTH_V3`, `ACTIVITY_TYPE_INIT_USER_EMAIL_RECOVERY_V2`, `ACTIVITY_TYPE_INIT_OTP_AUTH_V3`, `ACTIVITY_TYPE_INIT_OTP_V2`, `ACTIVITY_TYPE_UPSERT_GAS_USAGE_CONFIG`, `ACTIVITY_TYPE_CREATE_TVC_APP`, `ACTIVITY_TYPE_CREATE_TVC_DEPLOYMENT`, `ACTIVITY_TYPE_CREATE_TVC_MANIFEST_APPROVALS`, `ACTIVITY_TYPE_SOL_SEND_TRANSACTION`, `ACTIVITY_TYPE_INIT_OTP_V3`, `ACTIVITY_TYPE_VERIFY_OTP_V2`, `ACTIVITY_TYPE_OTP_LOGIN_V2`, `ACTIVITY_TYPE_UPDATE_ORGANIZATION_NAME`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V8`, `ACTIVITY_TYPE_CREATE_OAUTH_PROVIDERS_V2`, `ACTIVITY_TYPE_CREATE_USERS_V4`, `ACTIVITY_TYPE_CREATE_WEBHOOK_ENDPOINT`, `ACTIVITY_TYPE_UPDATE_WEBHOOK_ENDPOINT`, `ACTIVITY_TYPE_DELETE_WEBHOOK_ENDPOINT`, `ACTIVITY_TYPE_SET_IP_ALLOWLIST`, `ACTIVITY_TYPE_REMOVE_IP_ALLOWLIST`, `ACTIVITY_TYPE_UPDATE_TVC_APP_LIVE_DEPLOYMENT`, `ACTIVITY_TYPE_DELETE_TVC_DEPLOYMENT`, `ACTIVITY_TYPE_DELETE_TVC_APP_AND_DEPLOYMENTS`, `ACTIVITY_TYPE_RESTORE_TVC_DEPLOYMENT`, `ACTIVITY_TYPE_SPARK_SIGN_FROST`, `ACTIVITY_TYPE_SPARK_PREPARE_TRANSFER`, `ACTIVITY_TYPE_SPARK_CLAIM_TRANSFER`, `ACTIVITY_TYPE_SPARK_PREPARE_LIGHTNING_RECEIVE`, `ACTIVITY_TYPE_POST_TVC_QUORUM_KEY_SHARE`, `ACTIVITY_TYPE_ETH_SEND_TRANSACTION_V2`, `ACTIVITY_TYPE_CREATE_MFA_POLICY`, `ACTIVITY_TYPE_UPDATE_MFA_POLICY`, `ACTIVITY_TYPE_DELETE_MFA_POLICY`, `ACTIVITY_TYPE_CREATE_SESSION_PROFILE`, `ACTIVITY_TYPE_EARN_DEPLOY_WRAPPER`, `ACTIVITY_TYPE_EARN_DEPOSIT`, `ACTIVITY_TYPE_EARN_WITHDRAW`, `ACTIVITY_TYPE_EARN_SET_WRAPPER_STATE`, `ACTIVITY_TYPE_CLAIM_EARN_FEES` @@ -1882,7 +1882,7 @@ Unique identifier for the user performing recovery. name field -Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_SWAP_CONFIG`, `FEATURE_NAME_EARN_CONFIG` +Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED` @@ -1897,7 +1897,7 @@ Optional value for the feature. Will override existing values if feature is alre name field -Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_SWAP_CONFIG`, `FEATURE_NAME_EARN_CONFIG` +Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED` @@ -3697,9 +3697,6 @@ item field - -Whether captcha verification is required on sign up & otp init. - @@ -4317,9 +4314,6 @@ Port to use for health checks. Port to use for public ingress. - - -Optional desired replica count for this deployment. @@ -5506,162 +5500,6 @@ The amount of the underlying asset to withdraw, in raw on-chain units. Pass 'MAX - - executeSwapIntent field - - -CAIP-19 asset ID for the input asset. The chain is derived from this value. - - -CAIP-19 asset ID for the output asset. May be on a different chain than `input_token` for cross-chain swaps. - - -Base-unit amount of the input asset. - - -Wallet account address to sign and submit the swap transaction from. Cross-wallet swaps are not supported. - - -Whether to sponsor the resulting swap transaction via Gas Station when supported by the chain. - - -Maximum allowed slippage in basis points. - - -Swap provider to execute with, as returned by get_swap_quote. When omitted, execution uses the default provider. - - -Minimum acceptable base-unit amount of the output asset. Execution fails if the swap provider's quoted minimum output falls below this floor at execution time. - - - - - - upsertSwapConfigIntent field - - -feeReceiverWalletAddress field - - -Client fee in basis points applied to swaps; used for all pairs unless stable_fee_bps is set. - - -provider field - - -Optional override applied when both swap assets are stablecoins; falls back to fee_bps when unset. - - - - - - createTvcOperatorIntent field - - -Human-readable name for a new wallet created for this TVC operator - - -Unique identifier for an existing wallet to reuse for this TVC operator - - -Base derivation path for creating TVC operator wallet accounts - - -Human-readable name for this new TVC operator - - - - - - createTvcQuorumKeyIntent field - - -The threshold of operators needed to reassemble this TVC quorum key - - - Operator public keys used to encrypt and later approve the generated TVC quorum key shares - - -item field - - - - - - - - - reEncryptTvcQuorumKeyShareIntent field - - -Base64-encoded attestation document for the TVC deployment provisioning enclave - - -Base64-encoded manifest for the TVC deployment - - -Operator encryption public key used to encrypt the hosted TVC quorum key share - - -Operator signing public key used to approve the TVC manifest - - -Unique identifier of the TVC deployment receiving the re-encrypted quorum key share - - -Quorum key for the TVC application - - - - - - initImportSecretsIntent field - - -encryptionSuite field - -Enum options: `TRANSPORT_ENCRYPTION_SUITE_ENCLAVE_ENCRYPT_V1` - - - -The number of secrets the user intends to import. - - - - - - solSendTransactionIntentV2 field - - -Hex-encoded serialized unsigned Solana transaction (full wire format with zeroed signature placeholders) - - - Ordered Solana signer addresses Turnkey signs with. Between 1 and 16 signers. For sponsored transactions this must list every required signer of the transaction in transaction order. - - -item field - - - - - -Whether to sponsor this transaction via Gas Station. - - -CAIP-2 chain ID (e.g., 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' for Solana mainnet). Human-readable Solana aliases ('solana:mainnet', 'solana:devnet') are also accepted and normalized to canonical CAIP-2 values. - -Enum options: `solana:mainnet`, `solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp`, `solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d`, `solana:devnet`, `solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1`, `solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1wcaWoxPkrZBG` - - - -User-provided blockhash for replay protection / deadline control. If provided, it is used as-is, including for sponsored transactions (the transaction is only broadcastable while the blockhash is current). If omitted and sponsor=true, a fresh blockhash is fetched during execution. - - - - - -claimSwapFeesIntent field - earnSetWrapperStateIntent field @@ -5679,18 +5517,6 @@ When true, deposits to this wrapper are rejected; withdrawals are unaffected. Se Address of the deployed Earn wrapper to claim fees for. Must be one of the org's deployed wrappers. - - - - - - updateWalletAccountNameIntent field - - -Unique identifier for a given Wallet Account. - - -Human-readable name for this Wallet Account. @@ -6241,7 +6067,7 @@ item field name field -Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_SWAP_CONFIG`, `FEATURE_NAME_EARN_CONFIG` +Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED` @@ -6262,7 +6088,7 @@ value field name field -Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_SWAP_CONFIG`, `FEATURE_NAME_EARN_CONFIG` +Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED` @@ -7473,117 +7299,6 @@ Identifier to poll deposit status and tx hash via GetEarnDepositStatus. Identifier to poll withdrawal status and tx hash via GetEarnWithdrawStatus. - - - - - - executeSwapResult field - - -The send_transaction_status ID associated with the swap transaction submission - - -Swap provider used to build the transaction. - - -Quote identifier used for execution, if any. - - - - - - upsertSwapConfigResult field - - -feeReceiverWalletAddress field - - -feeBps field - - -stableFeeBps field - - - - - - createTvcOperatorResult field - - -The unique identifier for the wallet containing TVC operator accounts - - -The unique identifier for the TVC operator - - -Public encryption key for this TVC operator - - -Public signing key for this TVC operator - - - - - - createTvcQuorumKeyResult field - - -The unique identifier for the TVC quorum key - - -Public key for the generated TVC quorum key - - - The unique identifier(s) for the generated TVC quorum key shares - - -item field - - - - - - - - - reEncryptTvcQuorumKeyShareResult field - - -The unique identifier for the provisioning quorum key share - - - - - - initImportSecretsResult field - - - Enclave ingress target keys along with metadata specific to the encryption suite. For enclave encrypt v1 this will be ServerTargetMsgV1. - - -item field - - - - - - - - - solSendTransactionResultV2 field - - -The send_transaction_status ID associated with the transaction submission - - - - - - claimSwapFeesResult field - - -Relay claim request ID submitted through the permit endpoint. @@ -7605,15 +7320,6 @@ The wrapper's deposit state after this activity. Identifier to poll claim status and tx hash via GetClaimEarnFeesStatus. - - - - - - updateWalletAccountNameResult field - - -Unique identifier for a given Wallet Account. @@ -9321,8 +9027,7 @@ const response = await turnkeyClient.apiClient().getActivities({ "verificationTokenRequiredForGetAccountPii": "", "socialLinkingClientIds": [ "" - ], - "captchaEnabled": "" + ] }, "createOauth2CredentialIntent": { "provider": "", @@ -9525,8 +9230,7 @@ const response = await turnkeyClient.apiClient().getActivities({ "debugMode": "", "healthCheckType": "", "healthCheckPort": "", - "publicIngressPort": "", - "replicas": "" + "publicIngressPort": "" }, "createTvcManifestApprovalsIntent": { "manifestId": "", @@ -9956,66 +9660,12 @@ const response = await turnkeyClient.apiClient().getActivities({ "sponsor": "", "amountValue": "" }, - "executeSwapIntent": { - "inputToken": "", - "outputToken": "", - "inputAmount": "", - "walletAccount": "", - "sponsor": "", - "slippage": "", - "provider": "", - "minOutputAmount": "" - }, - "upsertSwapConfigIntent": { - "feeReceiverWalletAddress": "", - "feeBps": "", - "provider": "", - "stableFeeBps": "" - }, - "createTvcOperatorIntent": { - "walletName": "", - "walletId": "", - "path": "", - "operatorName": "" - }, - "createTvcQuorumKeyIntent": { - "threshold": "", - "operatorEncryptKeys": [ - "" - ] - }, - "reEncryptTvcQuorumKeyShareIntent": { - "attestationDocB64": "", - "manifestB64": "", - "operatorEncryptKey": "", - "operatorSignKey": "", - "deploymentId": "", - "appQuorumKey": "" - }, - "initImportSecretsIntent": { - "encryptionSuite": "", - "numSecrets": "" - }, - "solSendTransactionIntentV2": { - "unsignedTransaction": "", - "signWiths": [ - "" - ], - "sponsor": "", - "caip2": "", - "recentBlockhash": "" - }, - "claimSwapFeesIntent": "", "earnSetWrapperStateIntent": { "wrapperAddress": "", "depositsDisabled": "" }, "claimEarnFeesIntent": { "wrapperAddress": "" - }, - "updateWalletAccountNameIntent": { - "walletAccountId": "", - "name": "" } }, "result": { @@ -10638,52 +10288,12 @@ const response = await turnkeyClient.apiClient().getActivities({ "earnWithdrawResult": { "withdrawRequestId": "" }, - "executeSwapResult": { - "sendTransactionStatusId": "", - "provider": "", - "quoteId": "" - }, - "upsertSwapConfigResult": { - "feeReceiverWalletAddress": "", - "feeBps": "", - "stableFeeBps": "" - }, - "createTvcOperatorResult": { - "walletId": "", - "operatorId": "", - "encryptPublicKey": "", - "signPublicKey": "" - }, - "createTvcQuorumKeyResult": { - "quorumKeyId": "", - "quorumPublicKey": "", - "shareIds": [ - "" - ] - }, - "reEncryptTvcQuorumKeyShareResult": { - "provisioningShareId": "" - }, - "initImportSecretsResult": { - "enclaveTargetMessages": [ - "" - ] - }, - "solSendTransactionResultV2": { - "sendTransactionStatusId": "" - }, - "claimSwapFeesResult": { - "requestId": "" - }, "earnSetWrapperStateResult": { "wrapperAddress": "", "depositsDisabled": "" }, "claimEarnFeesResult": { "claimRequestId": "" - }, - "updateWalletAccountNameResult": { - "walletAccountId": "" } }, "votes": [ diff --git a/public_api.swagger.json b/public_api.swagger.json index 6b90b391..ce025345 100644 --- a/public_api.swagger.json +++ b/public_api.swagger.json @@ -65,15 +65,9 @@ } ], "host": "api.turnkey.com", - "schemes": [ - "https" - ], - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], + "schemes": ["https"], + "consumes": ["application/json"], + "produces": ["application/json"], "paths": { "/public/v1/query/get_activity": { "post": { @@ -98,9 +92,7 @@ } } ], - "tags": [ - "Activities" - ] + "tags": ["Activities"] } }, "/public/v1/query/get_api_key": { @@ -126,9 +118,7 @@ } } ], - "tags": [ - "API keys" - ] + "tags": ["API keys"] } }, "/public/v1/query/get_api_keys": { @@ -154,9 +144,7 @@ } } ], - "tags": [ - "API keys" - ] + "tags": ["API keys"] } }, "/public/v1/query/get_app_status": { @@ -182,9 +170,7 @@ } } ], - "tags": [ - "TVC" - ] + "tags": ["TVC"] } }, "/public/v1/query/get_authenticator": { @@ -210,9 +196,7 @@ } } ], - "tags": [ - "Authenticators" - ] + "tags": ["Authenticators"] } }, "/public/v1/query/get_authenticators": { @@ -238,9 +222,7 @@ } } ], - "tags": [ - "Authenticators" - ] + "tags": ["Authenticators"] } }, "/public/v1/query/get_boot_proof": { @@ -266,93 +248,7 @@ } } ], - "tags": [ - "Boot Proof" - ] - } - }, - "/public/v1/query/get_earn_deploy_status": { - "post": { - "summary": "Get Earn deploy status", - "description": "Poll the status of a wrapper deployment by its deploy_request_id.", - "operationId": "GetEarnDeployStatus", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/GetEarnDeployStatusResponse" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/GetEarnDeployStatusRequest" - } - } - ], - "tags": [ - "Earn" - ] - } - }, - "/public/v1/query/get_earn_deposit_status": { - "post": { - "summary": "Get Earn deposit status", - "description": "Poll the status of a deposit by its deposit_request_id (for the async/sponsored deposit path).", - "operationId": "GetEarnDepositStatus", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/GetEarnDepositStatusResponse" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/GetEarnDepositStatusRequest" - } - } - ], - "tags": [ - "Earn" - ] - } - }, - "/public/v1/query/get_earn_withdraw_status": { - "post": { - "summary": "Get Earn withdraw status", - "description": "Poll the status of a withdrawal by its withdraw_request_id.", - "operationId": "GetEarnWithdrawStatus", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/GetEarnWithdrawStatusResponse" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/GetEarnWithdrawStatusRequest" - } - } - ], - "tags": [ - "Earn" - ] + "tags": ["Boot Proof"] } }, "/public/v1/query/get_gas_usage": { @@ -378,9 +274,7 @@ } } ], - "tags": [ - "Broadcasting" - ] + "tags": ["Broadcasting"] } }, "/public/v1/query/get_ip_allowlist": { @@ -406,9 +300,7 @@ } } ], - "tags": [ - "IP Allowlist" - ] + "tags": ["IP Allowlist"] } }, "/public/v1/query/get_latest_boot_proof": { @@ -434,9 +326,7 @@ } } ], - "tags": [ - "Boot Proof" - ] + "tags": ["Boot Proof"] } }, "/public/v1/query/get_mfa_policies": { @@ -462,9 +352,7 @@ } } ], - "tags": [ - "MFA Policies" - ] + "tags": ["MFA Policies"] } }, "/public/v1/query/get_mfa_policy": { @@ -490,9 +378,7 @@ } } ], - "tags": [ - "MFA Policies" - ] + "tags": ["MFA Policies"] } }, "/public/v1/query/get_mfa_status": { @@ -518,9 +404,7 @@ } } ], - "tags": [ - "MFA Policies" - ] + "tags": ["MFA Policies"] } }, "/public/v1/query/get_nonces": { @@ -546,9 +430,7 @@ } } ], - "tags": [ - "Broadcasting" - ] + "tags": ["Broadcasting"] } }, "/public/v1/query/get_oauth2_credential": { @@ -599,9 +481,7 @@ } } ], - "tags": [ - "User Auth" - ] + "tags": ["User Auth"] } }, "/public/v1/query/get_onramp_transaction_status": { @@ -627,9 +507,7 @@ } } ], - "tags": [ - "On Ramp" - ] + "tags": ["On Ramp"] } }, "/public/v1/query/get_organization_configs": { @@ -655,9 +533,7 @@ } } ], - "tags": [ - "Organizations" - ] + "tags": ["Organizations"] } }, "/public/v1/query/get_policy": { @@ -683,9 +559,7 @@ } } ], - "tags": [ - "Policies" - ] + "tags": ["Policies"] } }, "/public/v1/query/get_policy_evaluations": { @@ -711,9 +585,7 @@ } } ], - "tags": [ - "Activities" - ] + "tags": ["Activities"] } }, "/public/v1/query/get_private_key": { @@ -739,9 +611,7 @@ } } ], - "tags": [ - "Private Keys" - ] + "tags": ["Private Keys"] } }, "/public/v1/query/get_send_transaction_status": { @@ -767,9 +637,7 @@ } } ], - "tags": [ - "Send Transactions" - ] + "tags": ["Send Transactions"] } }, "/public/v1/query/get_session_profile": { @@ -795,9 +663,7 @@ } } ], - "tags": [ - "Session Profiles" - ] + "tags": ["Session Profiles"] } }, "/public/v1/query/get_session_profiles": { @@ -823,9 +689,7 @@ } } ], - "tags": [ - "Session Profiles" - ] + "tags": ["Session Profiles"] } }, "/public/v1/query/get_smart_contract_interface": { @@ -851,9 +715,7 @@ } } ], - "tags": [ - "Policies" - ] + "tags": ["Policies"] } }, "/public/v1/query/get_tvc_app": { @@ -879,9 +741,7 @@ } } ], - "tags": [ - "TVC" - ] + "tags": ["TVC"] } }, "/public/v1/query/get_tvc_deployment": { @@ -907,9 +767,7 @@ } } ], - "tags": [ - "TVC" - ] + "tags": ["TVC"] } }, "/public/v1/query/get_tvc_deployment_debug_logs": { @@ -935,9 +793,7 @@ } } ], - "tags": [ - "TVC" - ] + "tags": ["TVC"] } }, "/public/v1/query/get_user": { @@ -963,9 +819,7 @@ } } ], - "tags": [ - "Users" - ] + "tags": ["Users"] } }, "/public/v1/query/get_wallet": { @@ -991,9 +845,7 @@ } } ], - "tags": [ - "Wallets" - ] + "tags": ["Wallets"] } }, "/public/v1/query/get_wallet_account": { @@ -1019,9 +871,7 @@ } } ], - "tags": [ - "Wallets" - ] + "tags": ["Wallets"] } }, "/public/v1/query/get_wallet_address_balances": { @@ -1047,9 +897,7 @@ } } ], - "tags": [ - "Wallets" - ] + "tags": ["Wallets"] } }, "/public/v1/query/list_activities": { @@ -1075,9 +923,7 @@ } } ], - "tags": [ - "Activities" - ] + "tags": ["Activities"] } }, "/public/v1/query/list_app_proofs": { @@ -1103,93 +949,7 @@ } } ], - "tags": [ - "App Proof" - ] - } - }, - "/public/v1/query/list_earn_enabled_vaults": { - "post": { - "summary": "Get Earn enabled vaults", - "description": "Get the organization's deployed wrappers with on-chain total deposited and live APY. The management view, distinct from per-wallet positions.", - "operationId": "ListEarnEnabledVaults", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/ListEarnEnabledVaultsResponse" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/ListEarnEnabledVaultsRequest" - } - } - ], - "tags": [ - "Earn" - ] - } - }, - "/public/v1/query/list_earn_positions": { - "post": { - "summary": "Get Earn positions", - "description": "Get the active Earn positions for a specific wallet, including current value, cost basis, yield, and projected fees.", - "operationId": "ListEarnPositions", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/ListEarnPositionsResponse" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/ListEarnPositionsRequest" - } - } - ], - "tags": [ - "Earn" - ] - } - }, - "/public/v1/query/list_earn_vaults": { - "post": { - "summary": "Get Earn vault catalog", - "description": "Get the catalog of all wrappable yield vaults across supported chains, enriched with live TVL and APY. Annotates which vaults the organization has already enabled.", - "operationId": "ListEarnVaults", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/ListEarnVaultsResponse" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/ListEarnVaultsRequest" - } - } - ], - "tags": [ - "Earn" - ] + "tags": ["App Proof"] } }, "/public/v1/query/list_fiat_on_ramp_credentials": { @@ -1215,9 +975,7 @@ } } ], - "tags": [ - "On Ramp" - ] + "tags": ["On Ramp"] } }, "/public/v1/query/list_oauth2_credentials": { @@ -1243,9 +1001,7 @@ } } ], - "tags": [ - "User Auth" - ] + "tags": ["User Auth"] } }, "/public/v1/query/list_policies": { @@ -1271,9 +1027,7 @@ } } ], - "tags": [ - "Policies" - ] + "tags": ["Policies"] } }, "/public/v1/query/list_private_key_tags": { @@ -1299,9 +1053,7 @@ } } ], - "tags": [ - "Private Key Tags" - ] + "tags": ["Private Key Tags"] } }, "/public/v1/query/list_private_keys": { @@ -1327,9 +1079,7 @@ } } ], - "tags": [ - "Private Keys" - ] + "tags": ["Private Keys"] } }, "/public/v1/query/list_smart_contract_interfaces": { @@ -1355,9 +1105,7 @@ } } ], - "tags": [ - "Policies" - ] + "tags": ["Policies"] } }, "/public/v1/query/list_suborgs": { @@ -1383,9 +1131,7 @@ } } ], - "tags": [ - "Organizations" - ] + "tags": ["Organizations"] } }, "/public/v1/query/list_supported_assets": { @@ -1411,9 +1157,7 @@ } } ], - "tags": [ - "Wallets" - ] + "tags": ["Wallets"] } }, "/public/v1/query/list_tvc_app_deployments": { @@ -1439,9 +1183,7 @@ } } ], - "tags": [ - "TVC" - ] + "tags": ["TVC"] } }, "/public/v1/query/list_tvc_apps": { @@ -1467,9 +1209,7 @@ } } ], - "tags": [ - "TVC" - ] + "tags": ["TVC"] } }, "/public/v1/query/list_user_tags": { @@ -1495,9 +1235,7 @@ } } ], - "tags": [ - "User Tags" - ] + "tags": ["User Tags"] } }, "/public/v1/query/list_users": { @@ -1523,9 +1261,7 @@ } } ], - "tags": [ - "Users" - ] + "tags": ["Users"] } }, "/public/v1/query/list_verified_suborgs": { @@ -1551,9 +1287,7 @@ } } ], - "tags": [ - "Organizations" - ] + "tags": ["Organizations"] } }, "/public/v1/query/list_wallet_accounts": { @@ -1579,9 +1313,7 @@ } } ], - "tags": [ - "Wallets" - ] + "tags": ["Wallets"] } }, "/public/v1/query/list_wallets": { @@ -1607,9 +1339,7 @@ } } ], - "tags": [ - "Wallets" - ] + "tags": ["Wallets"] } }, "/public/v1/query/list_webhook_endpoints": { @@ -1635,9 +1365,7 @@ } } ], - "tags": [ - "Organizations" - ] + "tags": ["Organizations"] } }, "/public/v1/query/validate_tvc_image": { @@ -1663,9 +1391,7 @@ } } ], - "tags": [ - "TVC" - ] + "tags": ["TVC"] } }, "/public/v1/query/whoami": { @@ -1691,9 +1417,7 @@ } } ], - "tags": [ - "Sessions" - ] + "tags": ["Sessions"] } }, "/public/v1/submit/approve_activity": { @@ -1719,37 +1443,7 @@ } } ], - "tags": [ - "Consensus" - ] - } - }, - "/public/v1/submit/claim_earn_fees": { - "post": { - "summary": "Claim earn fees", - "description": "Claim earn fees through the activity pipeline.", - "operationId": "ClaimEarnFees", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/ActivityResponse" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/ClaimEarnFeesRequest" - } - } - ], - "tags": [ - "Earn" - ] + "tags": ["Consensus"] } }, "/public/v1/submit/create_api_keys": { @@ -1775,9 +1469,7 @@ } } ], - "tags": [ - "API Keys" - ] + "tags": ["API Keys"] } }, "/public/v1/submit/create_authenticators": { @@ -1803,9 +1495,7 @@ } } ], - "tags": [ - "Authenticators" - ] + "tags": ["Authenticators"] } }, "/public/v1/submit/create_fiat_on_ramp_credential": { @@ -1831,9 +1521,7 @@ } } ], - "tags": [ - "On Ramp" - ] + "tags": ["On Ramp"] } }, "/public/v1/submit/create_invitations": { @@ -1859,9 +1547,7 @@ } } ], - "tags": [ - "Invitations" - ] + "tags": ["Invitations"] } }, "/public/v1/submit/create_mfa_policy": { @@ -1887,9 +1573,7 @@ } } ], - "tags": [ - "MFA Policies" - ] + "tags": ["MFA Policies"] } }, "/public/v1/submit/create_oauth2_credential": { @@ -1915,9 +1599,7 @@ } } ], - "tags": [ - "User Auth" - ] + "tags": ["User Auth"] } }, "/public/v1/submit/create_oauth_providers": { @@ -1943,9 +1625,7 @@ } } ], - "tags": [ - "User Auth" - ] + "tags": ["User Auth"] } }, "/public/v1/submit/create_policies": { @@ -1971,9 +1651,7 @@ } } ], - "tags": [ - "Policies" - ] + "tags": ["Policies"] } }, "/public/v1/submit/create_policy": { @@ -1999,9 +1677,7 @@ } } ], - "tags": [ - "Policies" - ] + "tags": ["Policies"] } }, "/public/v1/submit/create_private_key_tag": { @@ -2027,9 +1703,7 @@ } } ], - "tags": [ - "Private Key Tags" - ] + "tags": ["Private Key Tags"] } }, "/public/v1/submit/create_private_keys": { @@ -2055,9 +1729,7 @@ } } ], - "tags": [ - "Private Keys" - ] + "tags": ["Private Keys"] } }, "/public/v1/submit/create_read_only_session": { @@ -2083,9 +1755,7 @@ } } ], - "tags": [ - "Sessions" - ] + "tags": ["Sessions"] } }, "/public/v1/submit/create_read_write_session": { @@ -2111,9 +1781,7 @@ } } ], - "tags": [ - "Sessions" - ] + "tags": ["Sessions"] } }, "/public/v1/submit/create_session_profile": { @@ -2139,9 +1807,7 @@ } } ], - "tags": [ - "Session Profiles" - ] + "tags": ["Session Profiles"] } }, "/public/v1/submit/create_smart_contract_interface": { @@ -2167,9 +1833,7 @@ } } ], - "tags": [ - "Policies" - ] + "tags": ["Policies"] } }, "/public/v1/submit/create_sub_organization": { @@ -2195,9 +1859,7 @@ } } ], - "tags": [ - "Organizations" - ] + "tags": ["Organizations"] } }, "/public/v1/submit/create_tvc_app": { @@ -2223,9 +1885,7 @@ } } ], - "tags": [ - "TVC" - ] + "tags": ["TVC"] } }, "/public/v1/submit/create_tvc_deployment": { @@ -2251,9 +1911,7 @@ } } ], - "tags": [ - "TVC" - ] + "tags": ["TVC"] } }, "/public/v1/submit/create_tvc_manifest_approvals": { @@ -2279,9 +1937,7 @@ } } ], - "tags": [ - "TVC" - ] + "tags": ["TVC"] } }, "/public/v1/submit/create_user_tag": { @@ -2307,9 +1963,7 @@ } } ], - "tags": [ - "User Tags" - ] + "tags": ["User Tags"] } }, "/public/v1/submit/create_users": { @@ -2335,9 +1989,7 @@ } } ], - "tags": [ - "Users" - ] + "tags": ["Users"] } }, "/public/v1/submit/create_wallet": { @@ -2363,9 +2015,7 @@ } } ], - "tags": [ - "Wallets" - ] + "tags": ["Wallets"] } }, "/public/v1/submit/create_wallet_accounts": { @@ -2391,9 +2041,7 @@ } } ], - "tags": [ - "Wallets" - ] + "tags": ["Wallets"] } }, "/public/v1/submit/create_webhook_endpoint": { @@ -2419,9 +2067,7 @@ } } ], - "tags": [ - "Organizations" - ] + "tags": ["Organizations"] } }, "/public/v1/submit/delete_api_keys": { @@ -2447,9 +2093,7 @@ } } ], - "tags": [ - "API Keys" - ] + "tags": ["API Keys"] } }, "/public/v1/submit/delete_authenticators": { @@ -2475,9 +2119,7 @@ } } ], - "tags": [ - "Authenticators" - ] + "tags": ["Authenticators"] } }, "/public/v1/submit/delete_fiat_on_ramp_credential": { @@ -2503,9 +2145,7 @@ } } ], - "tags": [ - "On Ramp" - ] + "tags": ["On Ramp"] } }, "/public/v1/submit/delete_invitation": { @@ -2531,9 +2171,7 @@ } } ], - "tags": [ - "Invitations" - ] + "tags": ["Invitations"] } }, "/public/v1/submit/delete_mfa_policy": { @@ -2559,9 +2197,7 @@ } } ], - "tags": [ - "MFA Policies" - ] + "tags": ["MFA Policies"] } }, "/public/v1/submit/delete_oauth2_credential": { @@ -2587,9 +2223,7 @@ } } ], - "tags": [ - "User Auth" - ] + "tags": ["User Auth"] } }, "/public/v1/submit/delete_oauth_providers": { @@ -2615,9 +2249,7 @@ } } ], - "tags": [ - "User Auth" - ] + "tags": ["User Auth"] } }, "/public/v1/submit/delete_policies": { @@ -2643,9 +2275,7 @@ } } ], - "tags": [ - "Policies" - ] + "tags": ["Policies"] } }, "/public/v1/submit/delete_policy": { @@ -2671,9 +2301,7 @@ } } ], - "tags": [ - "Policies" - ] + "tags": ["Policies"] } }, "/public/v1/submit/delete_private_key_tags": { @@ -2699,9 +2327,7 @@ } } ], - "tags": [ - "Private Key Tags" - ] + "tags": ["Private Key Tags"] } }, "/public/v1/submit/delete_private_keys": { @@ -2727,9 +2353,7 @@ } } ], - "tags": [ - "Private Keys" - ] + "tags": ["Private Keys"] } }, "/public/v1/submit/delete_smart_contract_interface": { @@ -2755,9 +2379,7 @@ } } ], - "tags": [ - "Policies" - ] + "tags": ["Policies"] } }, "/public/v1/submit/delete_sub_organization": { @@ -2783,9 +2405,7 @@ } } ], - "tags": [ - "Organizations" - ] + "tags": ["Organizations"] } }, "/public/v1/submit/delete_tvc_app_and_deployments": { @@ -2811,9 +2431,7 @@ } } ], - "tags": [ - "TVC" - ] + "tags": ["TVC"] } }, "/public/v1/submit/delete_tvc_deployment": { @@ -2839,9 +2457,7 @@ } } ], - "tags": [ - "TVC" - ] + "tags": ["TVC"] } }, "/public/v1/submit/delete_user_tags": { @@ -2867,9 +2483,7 @@ } } ], - "tags": [ - "User Tags" - ] + "tags": ["User Tags"] } }, "/public/v1/submit/delete_users": { @@ -2895,9 +2509,7 @@ } } ], - "tags": [ - "Users" - ] + "tags": ["Users"] } }, "/public/v1/submit/delete_wallet_accounts": { @@ -2923,9 +2535,7 @@ } } ], - "tags": [ - "Wallets" - ] + "tags": ["Wallets"] } }, "/public/v1/submit/delete_wallets": { @@ -2951,9 +2561,7 @@ } } ], - "tags": [ - "Wallets" - ] + "tags": ["Wallets"] } }, "/public/v1/submit/delete_webhook_endpoint": { @@ -2979,121 +2587,7 @@ } } ], - "tags": [ - "Organizations" - ] - } - }, - "/public/v1/submit/earn_deploy_wrapper": { - "post": { - "summary": "Deploy Earn wrapper", - "description": "Enable a yield vault for an organization by deploying its fee wrapper. Must be called before any deposits into the vault.", - "operationId": "EarnDeployWrapper", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/ActivityResponse" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/EarnDeployWrapperRequest" - } - } - ], - "tags": [ - "Earn" - ] - } - }, - "/public/v1/submit/earn_deposit": { - "post": { - "summary": "Deposit into Earn vault", - "description": "Deposit assets from a wallet into an enabled yield vault.", - "operationId": "EarnDeposit", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/ActivityResponse" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/EarnDepositRequest" - } - } - ], - "tags": [ - "Earn" - ] - } - }, - "/public/v1/submit/earn_set_wrapper_state": { - "post": { - "summary": "Set Earn wrapper state", - "description": "Enable or disable deposits to a deployed Earn wrapper. Withdrawals are always allowed.", - "operationId": "EarnSetWrapperState", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/ActivityResponse" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/EarnSetWrapperStateRequest" - } - } - ], - "tags": [ - "Earn" - ] - } - }, - "/public/v1/submit/earn_withdraw": { - "post": { - "summary": "Withdraw from Earn vault", - "description": "Withdraw assets or redeem shares from an enabled yield vault.", - "operationId": "EarnWithdraw", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/ActivityResponse" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/EarnWithdrawRequest" - } - } - ], - "tags": [ - "Earn" - ] + "tags": ["Organizations"] } }, "/public/v1/submit/email_auth": { @@ -3119,9 +2613,7 @@ } } ], - "tags": [ - "User Auth" - ] + "tags": ["User Auth"] } }, "/public/v1/submit/eth_send_transaction": { @@ -3147,9 +2639,7 @@ } } ], - "tags": [ - "Broadcasting" - ] + "tags": ["Broadcasting"] } }, "/public/v1/submit/export_private_key": { @@ -3175,9 +2665,7 @@ } } ], - "tags": [ - "Private Keys" - ] + "tags": ["Private Keys"] } }, "/public/v1/submit/export_wallet": { @@ -3203,9 +2691,7 @@ } } ], - "tags": [ - "Wallets" - ] + "tags": ["Wallets"] } }, "/public/v1/submit/export_wallet_account": { @@ -3231,9 +2717,7 @@ } } ], - "tags": [ - "Wallets" - ] + "tags": ["Wallets"] } }, "/public/v1/submit/import_private_key": { @@ -3259,9 +2743,7 @@ } } ], - "tags": [ - "Private Keys" - ] + "tags": ["Private Keys"] } }, "/public/v1/submit/import_wallet": { @@ -3287,9 +2769,7 @@ } } ], - "tags": [ - "Wallets" - ] + "tags": ["Wallets"] } }, "/public/v1/submit/init_fiat_on_ramp": { @@ -3315,9 +2795,7 @@ } } ], - "tags": [ - "On Ramp" - ] + "tags": ["On Ramp"] } }, "/public/v1/submit/init_import_private_key": { @@ -3343,9 +2821,7 @@ } } ], - "tags": [ - "Private Keys" - ] + "tags": ["Private Keys"] } }, "/public/v1/submit/init_import_wallet": { @@ -3371,9 +2847,7 @@ } } ], - "tags": [ - "Wallets" - ] + "tags": ["Wallets"] } }, "/public/v1/submit/init_otp": { @@ -3399,9 +2873,7 @@ } } ], - "tags": [ - "User Verification" - ] + "tags": ["User Verification"] } }, "/public/v1/submit/init_otp_auth": { @@ -3427,9 +2899,7 @@ } } ], - "tags": [ - "User Auth" - ] + "tags": ["User Auth"] } }, "/public/v1/submit/init_user_email_recovery": { @@ -3455,9 +2925,7 @@ } } ], - "tags": [ - "User Recovery" - ] + "tags": ["User Recovery"] } }, "/public/v1/submit/oauth": { @@ -3483,9 +2951,7 @@ } } ], - "tags": [ - "User Auth" - ] + "tags": ["User Auth"] } }, "/public/v1/submit/oauth2_authenticate": { @@ -3511,9 +2977,7 @@ } } ], - "tags": [ - "User Auth" - ] + "tags": ["User Auth"] } }, "/public/v1/submit/oauth_login": { @@ -3539,9 +3003,7 @@ } } ], - "tags": [ - "Sessions" - ] + "tags": ["Sessions"] } }, "/public/v1/submit/otp_auth": { @@ -3567,9 +3029,7 @@ } } ], - "tags": [ - "User Auth" - ] + "tags": ["User Auth"] } }, "/public/v1/submit/otp_login": { @@ -3595,9 +3055,7 @@ } } ], - "tags": [ - "Sessions" - ] + "tags": ["Sessions"] } }, "/public/v1/submit/recover_user": { @@ -3623,9 +3081,7 @@ } } ], - "tags": [ - "User Recovery" - ] + "tags": ["User Recovery"] } }, "/public/v1/submit/reject_activity": { @@ -3651,9 +3107,7 @@ } } ], - "tags": [ - "Consensus" - ] + "tags": ["Consensus"] } }, "/public/v1/submit/remove_ip_allowlist": { @@ -3679,9 +3133,7 @@ } } ], - "tags": [ - "IP Allowlist" - ] + "tags": ["IP Allowlist"] } }, "/public/v1/submit/remove_organization_feature": { @@ -3707,9 +3159,7 @@ } } ], - "tags": [ - "Features" - ] + "tags": ["Features"] } }, "/public/v1/submit/restore_tvc_deployment": { @@ -3735,9 +3185,7 @@ } } ], - "tags": [ - "TVC" - ] + "tags": ["TVC"] } }, "/public/v1/submit/set_ip_allowlist": { @@ -3763,9 +3211,7 @@ } } ], - "tags": [ - "IP Allowlist" - ] + "tags": ["IP Allowlist"] } }, "/public/v1/submit/set_organization_feature": { @@ -3791,9 +3237,7 @@ } } ], - "tags": [ - "Features" - ] + "tags": ["Features"] } }, "/public/v1/submit/set_tvc_app_live_deployment": { @@ -3819,9 +3263,7 @@ } } ], - "tags": [ - "TVC" - ] + "tags": ["TVC"] } }, "/public/v1/submit/sign_raw_payload": { @@ -3847,9 +3289,7 @@ } } ], - "tags": [ - "Signing" - ] + "tags": ["Signing"] } }, "/public/v1/submit/sign_raw_payloads": { @@ -3875,9 +3315,7 @@ } } ], - "tags": [ - "Signing" - ] + "tags": ["Signing"] } }, "/public/v1/submit/sign_transaction": { @@ -3903,9 +3341,7 @@ } } ], - "tags": [ - "Signing" - ] + "tags": ["Signing"] } }, "/public/v1/submit/sol_send_transaction": { @@ -3931,9 +3367,7 @@ } } ], - "tags": [ - "Broadcasting" - ] + "tags": ["Broadcasting"] } }, "/public/v1/submit/spark_claim_transfer": { @@ -3959,9 +3393,7 @@ } } ], - "tags": [ - "Signing" - ] + "tags": ["Signing"] } }, "/public/v1/submit/spark_prepare_lightning_receive": { @@ -3987,9 +3419,7 @@ } } ], - "tags": [ - "Signing" - ] + "tags": ["Signing"] } }, "/public/v1/submit/spark_prepare_transfer": { @@ -4015,9 +3445,7 @@ } } ], - "tags": [ - "Signing" - ] + "tags": ["Signing"] } }, "/public/v1/submit/spark_sign_frost": { @@ -4043,9 +3471,7 @@ } } ], - "tags": [ - "Signing" - ] + "tags": ["Signing"] } }, "/public/v1/submit/stamp_login": { @@ -4071,9 +3497,7 @@ } } ], - "tags": [ - "Sessions" - ] + "tags": ["Sessions"] } }, "/public/v1/submit/update_fiat_on_ramp_credential": { @@ -4099,9 +3523,7 @@ } } ], - "tags": [ - "On Ramp" - ] + "tags": ["On Ramp"] } }, "/public/v1/submit/update_mfa_policy": { @@ -4127,9 +3549,7 @@ } } ], - "tags": [ - "MFA Policies" - ] + "tags": ["MFA Policies"] } }, "/public/v1/submit/update_oauth2_credential": { @@ -4155,9 +3575,7 @@ } } ], - "tags": [ - "User Auth" - ] + "tags": ["User Auth"] } }, "/public/v1/submit/update_organization_name": { @@ -4183,9 +3601,7 @@ } } ], - "tags": [ - "Organizations" - ] + "tags": ["Organizations"] } }, "/public/v1/submit/update_policy": { @@ -4211,9 +3627,7 @@ } } ], - "tags": [ - "Policies" - ] + "tags": ["Policies"] } }, "/public/v1/submit/update_private_key_tag": { @@ -4239,9 +3653,7 @@ } } ], - "tags": [ - "Private Key Tags" - ] + "tags": ["Private Key Tags"] } }, "/public/v1/submit/update_root_quorum": { @@ -4267,9 +3679,7 @@ } } ], - "tags": [ - "Organizations" - ] + "tags": ["Organizations"] } }, "/public/v1/submit/update_user": { @@ -4295,9 +3705,7 @@ } } ], - "tags": [ - "Users" - ] + "tags": ["Users"] } }, "/public/v1/submit/update_user_email": { @@ -4323,9 +3731,7 @@ } } ], - "tags": [ - "Users" - ] + "tags": ["Users"] } }, "/public/v1/submit/update_user_name": { @@ -4351,9 +3757,7 @@ } } ], - "tags": [ - "Users" - ] + "tags": ["Users"] } }, "/public/v1/submit/update_user_phone_number": { @@ -4379,9 +3783,7 @@ } } ], - "tags": [ - "Users" - ] + "tags": ["Users"] } }, "/public/v1/submit/update_user_tag": { @@ -4407,9 +3809,7 @@ } } ], - "tags": [ - "User Tags" - ] + "tags": ["User Tags"] } }, "/public/v1/submit/update_wallet": { @@ -4435,9 +3835,7 @@ } } ], - "tags": [ - "Wallets" - ] + "tags": ["Wallets"] } }, "/public/v1/submit/update_webhook_endpoint": { @@ -4463,9 +3861,7 @@ } } ], - "tags": [ - "Organizations" - ] + "tags": ["Organizations"] } }, "/public/v1/submit/verify_otp": { @@ -4491,9 +3887,7 @@ } } ], - "tags": [ - "User Verification" - ] + "tags": ["User Verification"] } }, "/tkhq/api/v1/noop-codegen-anchor": { @@ -4508,1666 +3902,855 @@ } } } - } - }, - "definitions": { - "AcceptInvitationIntent": { - "type": "object", - "properties": { - "invitationId": { - "type": "string", - "description": "Unique identifier for a given Invitation object." - }, - "userId": { - "type": "string", - "description": "Unique identifier for a given User." - }, - "authenticator": { - "$ref": "#/definitions/AuthenticatorParams", - "description": "WebAuthN hardware devices that can be used to log in to the Turnkey web app." - } - }, - "required": [ - "invitationId", - "userId", - "authenticator" - ] }, - "AcceptInvitationIntentV2": { - "type": "object", - "properties": { - "invitationId": { - "type": "string", - "description": "Unique identifier for a given Invitation object." - }, - "userId": { - "type": "string", - "description": "Unique identifier for a given User." + "/public/v1/query/get_earn_deploy_status": { + "post": { + "summary": "Get Earn deploy status", + "description": "Poll the status of a wrapper deployment by its deploy_request_id.", + "operationId": "GetEarnDeployStatus", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetEarnDeployStatusResponse" + } + } }, - "authenticator": { - "$ref": "#/definitions/AuthenticatorParamsV2", - "description": "WebAuthN hardware devices that can be used to log in to the Turnkey web app." - } - }, - "required": [ - "invitationId", - "userId", - "authenticator" - ] + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetEarnDeployStatusRequest" + } + } + ], + "tags": ["Earn"] + } }, - "AcceptInvitationResult": { - "type": "object", - "properties": { - "invitationId": { - "type": "string", - "description": "Unique identifier for a given Invitation." - }, - "userId": { - "type": "string", - "description": "Unique identifier for a given User." - } - }, - "required": [ - "invitationId", - "userId" - ] - }, - "AccessType": { - "type": "string", - "enum": [ - "ACCESS_TYPE_WEB", - "ACCESS_TYPE_API", - "ACCESS_TYPE_ALL" - ] - }, - "ActivateBillingTierIntent": { - "type": "object", - "properties": { - "productId": { - "type": "string", - "description": "The product that the customer wants to subscribe to." - }, - "orbPlanId": { - "type": "string", - "x-nullable": true - } - }, - "required": [ - "productId" - ] - }, - "ActivateBillingTierResult": { - "type": "object", - "properties": { - "productId": { - "type": "string", - "description": "The id of the product being subscribed to." - } - }, - "required": [ - "productId" - ] - }, - "Activity": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "Unique identifier for a given Activity object." - }, - "organizationId": { - "type": "string", - "description": "Unique identifier for a given Organization." - }, - "status": { - "$ref": "#/definitions/ActivityStatus", - "description": "The current processing status of a specified Activity." - }, - "type": { - "$ref": "#/definitions/ActivityType", - "description": "Type of Activity, such as Add User, or Sign Transaction." - }, - "intent": { - "$ref": "#/definitions/Intent", - "description": "Intent object crafted by Turnkey based on the user request, used to assess the permissibility of an action." - }, - "result": { - "$ref": "#/definitions/Result", - "description": "Result of the intended action." - }, - "votes": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/Vote" - }, - "description": "A list of objects representing a particular User's approval or rejection of a Consensus request, including all relevant metadata." - }, - "appProofs": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/AppProof" - }, - "description": "A list of App Proofs generated by enclaves during activity execution, providing verifiable attestations of performed operations." - }, - "fingerprint": { - "type": "string", - "description": "An artifact verifying a User's action." - }, - "canApprove": { - "type": "boolean" - }, - "canReject": { - "type": "boolean" - }, - "createdAt": { - "$ref": "#/definitions/external.data.v1.Timestamp" - }, - "updatedAt": { - "$ref": "#/definitions/external.data.v1.Timestamp" - }, - "failure": { - "$ref": "#/definitions/Status", - "description": "Failure reason of the intended action." - } - }, - "required": [ - "id", - "organizationId", - "status", - "type", - "intent", - "result", - "votes", - "fingerprint", - "canApprove", - "canReject", - "createdAt", - "updatedAt" - ] - }, - "ActivityResponse": { - "type": "object", - "properties": { - "activity": { - "$ref": "#/definitions/Activity", - "description": "An action that can be taken within the Turnkey infrastructure." - } - }, - "required": [ - "activity" - ] - }, - "ActivityStatus": { - "type": "string", - "enum": [ - "ACTIVITY_STATUS_CREATED", - "ACTIVITY_STATUS_PENDING", - "ACTIVITY_STATUS_COMPLETED", - "ACTIVITY_STATUS_FAILED", - "ACTIVITY_STATUS_CONSENSUS_NEEDED", - "ACTIVITY_STATUS_REJECTED", - "ACTIVITY_STATUS_AUTHENTICATORS_NEEDED" - ] - }, - "ActivityType": { - "type": "string", - "enum": [ - "ACTIVITY_TYPE_CREATE_API_KEYS", - "ACTIVITY_TYPE_CREATE_USERS", - "ACTIVITY_TYPE_CREATE_PRIVATE_KEYS", - "ACTIVITY_TYPE_SIGN_RAW_PAYLOAD", - "ACTIVITY_TYPE_CREATE_INVITATIONS", - "ACTIVITY_TYPE_ACCEPT_INVITATION", - "ACTIVITY_TYPE_CREATE_POLICY", - "ACTIVITY_TYPE_DISABLE_PRIVATE_KEY", - "ACTIVITY_TYPE_DELETE_USERS", - "ACTIVITY_TYPE_DELETE_API_KEYS", - "ACTIVITY_TYPE_DELETE_INVITATION", - "ACTIVITY_TYPE_DELETE_ORGANIZATION", - "ACTIVITY_TYPE_DELETE_POLICY", - "ACTIVITY_TYPE_CREATE_USER_TAG", - "ACTIVITY_TYPE_DELETE_USER_TAGS", - "ACTIVITY_TYPE_CREATE_ORGANIZATION", - "ACTIVITY_TYPE_SIGN_TRANSACTION", - "ACTIVITY_TYPE_APPROVE_ACTIVITY", - "ACTIVITY_TYPE_REJECT_ACTIVITY", - "ACTIVITY_TYPE_DELETE_AUTHENTICATORS", - "ACTIVITY_TYPE_CREATE_AUTHENTICATORS", - "ACTIVITY_TYPE_CREATE_PRIVATE_KEY_TAG", - "ACTIVITY_TYPE_DELETE_PRIVATE_KEY_TAGS", - "ACTIVITY_TYPE_SET_PAYMENT_METHOD", - "ACTIVITY_TYPE_ACTIVATE_BILLING_TIER", - "ACTIVITY_TYPE_DELETE_PAYMENT_METHOD", - "ACTIVITY_TYPE_CREATE_POLICY_V2", - "ACTIVITY_TYPE_CREATE_POLICY_V3", - "ACTIVITY_TYPE_CREATE_API_ONLY_USERS", - "ACTIVITY_TYPE_UPDATE_ROOT_QUORUM", - "ACTIVITY_TYPE_UPDATE_USER_TAG", - "ACTIVITY_TYPE_UPDATE_PRIVATE_KEY_TAG", - "ACTIVITY_TYPE_CREATE_AUTHENTICATORS_V2", - "ACTIVITY_TYPE_CREATE_ORGANIZATION_V2", - "ACTIVITY_TYPE_CREATE_USERS_V2", - "ACTIVITY_TYPE_ACCEPT_INVITATION_V2", - "ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION", - "ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V2", - "ACTIVITY_TYPE_UPDATE_ALLOWED_ORIGINS", - "ACTIVITY_TYPE_CREATE_PRIVATE_KEYS_V2", - "ACTIVITY_TYPE_UPDATE_USER", - "ACTIVITY_TYPE_UPDATE_POLICY", - "ACTIVITY_TYPE_SET_PAYMENT_METHOD_V2", - "ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V3", - "ACTIVITY_TYPE_CREATE_WALLET", - "ACTIVITY_TYPE_CREATE_WALLET_ACCOUNTS", - "ACTIVITY_TYPE_INIT_USER_EMAIL_RECOVERY", - "ACTIVITY_TYPE_RECOVER_USER", - "ACTIVITY_TYPE_SET_ORGANIZATION_FEATURE", - "ACTIVITY_TYPE_REMOVE_ORGANIZATION_FEATURE", - "ACTIVITY_TYPE_SIGN_RAW_PAYLOAD_V2", - "ACTIVITY_TYPE_SIGN_TRANSACTION_V2", - "ACTIVITY_TYPE_EXPORT_PRIVATE_KEY", - "ACTIVITY_TYPE_EXPORT_WALLET", - "ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V4", - "ACTIVITY_TYPE_EMAIL_AUTH", - "ACTIVITY_TYPE_EXPORT_WALLET_ACCOUNT", - "ACTIVITY_TYPE_INIT_IMPORT_WALLET", - "ACTIVITY_TYPE_IMPORT_WALLET", - "ACTIVITY_TYPE_INIT_IMPORT_PRIVATE_KEY", - "ACTIVITY_TYPE_IMPORT_PRIVATE_KEY", - "ACTIVITY_TYPE_CREATE_POLICIES", - "ACTIVITY_TYPE_SIGN_RAW_PAYLOADS", - "ACTIVITY_TYPE_CREATE_READ_ONLY_SESSION", - "ACTIVITY_TYPE_CREATE_OAUTH_PROVIDERS", - "ACTIVITY_TYPE_DELETE_OAUTH_PROVIDERS", - "ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V5", - "ACTIVITY_TYPE_OAUTH", - "ACTIVITY_TYPE_CREATE_API_KEYS_V2", - "ACTIVITY_TYPE_CREATE_READ_WRITE_SESSION", - "ACTIVITY_TYPE_EMAIL_AUTH_V2", - "ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V6", - "ACTIVITY_TYPE_DELETE_PRIVATE_KEYS", - "ACTIVITY_TYPE_DELETE_WALLETS", - "ACTIVITY_TYPE_CREATE_READ_WRITE_SESSION_V2", - "ACTIVITY_TYPE_DELETE_SUB_ORGANIZATION", - "ACTIVITY_TYPE_INIT_OTP_AUTH", - "ACTIVITY_TYPE_OTP_AUTH", - "ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V7", - "ACTIVITY_TYPE_UPDATE_WALLET", - "ACTIVITY_TYPE_UPDATE_POLICY_V2", - "ACTIVITY_TYPE_CREATE_USERS_V3", - "ACTIVITY_TYPE_INIT_OTP_AUTH_V2", - "ACTIVITY_TYPE_INIT_OTP", - "ACTIVITY_TYPE_VERIFY_OTP", - "ACTIVITY_TYPE_OTP_LOGIN", - "ACTIVITY_TYPE_STAMP_LOGIN", - "ACTIVITY_TYPE_OAUTH_LOGIN", - "ACTIVITY_TYPE_UPDATE_USER_NAME", - "ACTIVITY_TYPE_UPDATE_USER_EMAIL", - "ACTIVITY_TYPE_UPDATE_USER_PHONE_NUMBER", - "ACTIVITY_TYPE_INIT_FIAT_ON_RAMP", - "ACTIVITY_TYPE_CREATE_SMART_CONTRACT_INTERFACE", - "ACTIVITY_TYPE_DELETE_SMART_CONTRACT_INTERFACE", - "ACTIVITY_TYPE_ENABLE_AUTH_PROXY", - "ACTIVITY_TYPE_DISABLE_AUTH_PROXY", - "ACTIVITY_TYPE_UPDATE_AUTH_PROXY_CONFIG", - "ACTIVITY_TYPE_CREATE_OAUTH2_CREDENTIAL", - "ACTIVITY_TYPE_UPDATE_OAUTH2_CREDENTIAL", - "ACTIVITY_TYPE_DELETE_OAUTH2_CREDENTIAL", - "ACTIVITY_TYPE_OAUTH2_AUTHENTICATE", - "ACTIVITY_TYPE_DELETE_WALLET_ACCOUNTS", - "ACTIVITY_TYPE_DELETE_POLICIES", - "ACTIVITY_TYPE_ETH_SEND_RAW_TRANSACTION", - "ACTIVITY_TYPE_ETH_SEND_TRANSACTION", - "ACTIVITY_TYPE_CREATE_FIAT_ON_RAMP_CREDENTIAL", - "ACTIVITY_TYPE_UPDATE_FIAT_ON_RAMP_CREDENTIAL", - "ACTIVITY_TYPE_DELETE_FIAT_ON_RAMP_CREDENTIAL", - "ACTIVITY_TYPE_EMAIL_AUTH_V3", - "ACTIVITY_TYPE_INIT_USER_EMAIL_RECOVERY_V2", - "ACTIVITY_TYPE_INIT_OTP_AUTH_V3", - "ACTIVITY_TYPE_INIT_OTP_V2", - "ACTIVITY_TYPE_UPSERT_GAS_USAGE_CONFIG", - "ACTIVITY_TYPE_CREATE_TVC_APP", - "ACTIVITY_TYPE_CREATE_TVC_DEPLOYMENT", - "ACTIVITY_TYPE_CREATE_TVC_MANIFEST_APPROVALS", - "ACTIVITY_TYPE_SOL_SEND_TRANSACTION", - "ACTIVITY_TYPE_INIT_OTP_V3", - "ACTIVITY_TYPE_VERIFY_OTP_V2", - "ACTIVITY_TYPE_OTP_LOGIN_V2", - "ACTIVITY_TYPE_UPDATE_ORGANIZATION_NAME", - "ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V8", - "ACTIVITY_TYPE_CREATE_OAUTH_PROVIDERS_V2", - "ACTIVITY_TYPE_CREATE_USERS_V4", - "ACTIVITY_TYPE_CREATE_WEBHOOK_ENDPOINT", - "ACTIVITY_TYPE_UPDATE_WEBHOOK_ENDPOINT", - "ACTIVITY_TYPE_DELETE_WEBHOOK_ENDPOINT", - "ACTIVITY_TYPE_SET_IP_ALLOWLIST", - "ACTIVITY_TYPE_REMOVE_IP_ALLOWLIST", - "ACTIVITY_TYPE_UPDATE_TVC_APP_LIVE_DEPLOYMENT", - "ACTIVITY_TYPE_DELETE_TVC_DEPLOYMENT", - "ACTIVITY_TYPE_DELETE_TVC_APP_AND_DEPLOYMENTS", - "ACTIVITY_TYPE_RESTORE_TVC_DEPLOYMENT", - "ACTIVITY_TYPE_SPARK_SIGN_FROST", - "ACTIVITY_TYPE_SPARK_PREPARE_TRANSFER", - "ACTIVITY_TYPE_SPARK_CLAIM_TRANSFER", - "ACTIVITY_TYPE_SPARK_PREPARE_LIGHTNING_RECEIVE", - "ACTIVITY_TYPE_POST_TVC_QUORUM_KEY_SHARE", - "ACTIVITY_TYPE_ETH_SEND_TRANSACTION_V2", - "ACTIVITY_TYPE_CREATE_MFA_POLICY", - "ACTIVITY_TYPE_UPDATE_MFA_POLICY", - "ACTIVITY_TYPE_DELETE_MFA_POLICY", - "ACTIVITY_TYPE_CREATE_SESSION_PROFILE", - "ACTIVITY_TYPE_EARN_DEPLOY_WRAPPER", - "ACTIVITY_TYPE_EARN_DEPOSIT", - "ACTIVITY_TYPE_EARN_WITHDRAW", - "ACTIVITY_TYPE_EXECUTE_SWAP", - "ACTIVITY_TYPE_UPSERT_SWAP_CONFIG", - "ACTIVITY_TYPE_CREATE_TVC_OPERATOR", - "ACTIVITY_TYPE_CREATE_TVC_QUORUM_KEY", - "ACTIVITY_TYPE_RE_ENCRYPT_TVC_QUORUM_KEY_SHARE", - "ACTIVITY_TYPE_INIT_IMPORT_SECRETS", - "ACTIVITY_TYPE_SOL_SEND_TRANSACTION_V2", - "ACTIVITY_TYPE_CLAIM_SWAP_FEES", - "ACTIVITY_TYPE_EARN_SET_WRAPPER_STATE", - "ACTIVITY_TYPE_CLAIM_EARN_FEES", - "ACTIVITY_TYPE_UPDATE_WALLET_ACCOUNT_NAME" - ] - }, - "AddressFormat": { - "type": "string", - "enum": [ - "ADDRESS_FORMAT_UNCOMPRESSED", - "ADDRESS_FORMAT_COMPRESSED", - "ADDRESS_FORMAT_ETHEREUM", - "ADDRESS_FORMAT_SOLANA", - "ADDRESS_FORMAT_COSMOS", - "ADDRESS_FORMAT_TRON", - "ADDRESS_FORMAT_SUI", - "ADDRESS_FORMAT_APTOS", - "ADDRESS_FORMAT_BITCOIN_MAINNET_P2PKH", - "ADDRESS_FORMAT_BITCOIN_MAINNET_P2SH", - "ADDRESS_FORMAT_BITCOIN_MAINNET_P2WPKH", - "ADDRESS_FORMAT_BITCOIN_MAINNET_P2WSH", - "ADDRESS_FORMAT_BITCOIN_MAINNET_P2TR", - "ADDRESS_FORMAT_BITCOIN_TESTNET_P2PKH", - "ADDRESS_FORMAT_BITCOIN_TESTNET_P2SH", - "ADDRESS_FORMAT_BITCOIN_TESTNET_P2WPKH", - "ADDRESS_FORMAT_BITCOIN_TESTNET_P2WSH", - "ADDRESS_FORMAT_BITCOIN_TESTNET_P2TR", - "ADDRESS_FORMAT_BITCOIN_SIGNET_P2PKH", - "ADDRESS_FORMAT_BITCOIN_SIGNET_P2SH", - "ADDRESS_FORMAT_BITCOIN_SIGNET_P2WPKH", - "ADDRESS_FORMAT_BITCOIN_SIGNET_P2WSH", - "ADDRESS_FORMAT_BITCOIN_SIGNET_P2TR", - "ADDRESS_FORMAT_BITCOIN_REGTEST_P2PKH", - "ADDRESS_FORMAT_BITCOIN_REGTEST_P2SH", - "ADDRESS_FORMAT_BITCOIN_REGTEST_P2WPKH", - "ADDRESS_FORMAT_BITCOIN_REGTEST_P2WSH", - "ADDRESS_FORMAT_BITCOIN_REGTEST_P2TR", - "ADDRESS_FORMAT_SEI", - "ADDRESS_FORMAT_XLM", - "ADDRESS_FORMAT_DOGE_MAINNET", - "ADDRESS_FORMAT_DOGE_TESTNET", - "ADDRESS_FORMAT_TON_V3R2", - "ADDRESS_FORMAT_TON_V4R2", - "ADDRESS_FORMAT_TON_V5R1", - "ADDRESS_FORMAT_XRP", - "ADDRESS_FORMAT_SPARK_MAINNET", - "ADDRESS_FORMAT_SPARK_REGTEST" - ] - }, - "Any": { - "type": "object", - "properties": { - "@type": { - "type": "string" - } - }, - "additionalProperties": {} - }, - "ApiKey": { - "type": "object", - "properties": { - "credential": { - "$ref": "#/definitions/external.data.v1.Credential", - "description": "A User credential that can be used to authenticate to Turnkey." - }, - "apiKeyId": { - "type": "string", - "description": "Unique identifier for a given API Key." - }, - "apiKeyName": { - "type": "string", - "description": "Human-readable name for an API Key." - }, - "createdAt": { - "$ref": "#/definitions/external.data.v1.Timestamp" - }, - "updatedAt": { - "$ref": "#/definitions/external.data.v1.Timestamp" - }, - "expirationSeconds": { - "type": "string", - "format": "uint64", - "x-nullable": true, - "description": "Optional window (in seconds) indicating how long the API Key should last." - } - }, - "required": [ - "credential", - "apiKeyId", - "apiKeyName", - "createdAt", - "updatedAt" - ] - }, - "ApiKeyCurve": { - "type": "string", - "enum": [ - "API_KEY_CURVE_P256", - "API_KEY_CURVE_SECP256K1", - "API_KEY_CURVE_ED25519" - ] - }, - "ApiKeyParams": { - "type": "object", - "properties": { - "apiKeyName": { - "type": "string", - "description": "Human-readable name for an API Key." - }, - "publicKey": { - "type": "string", - "description": "The public component of a cryptographic key pair used to sign messages and transactions." - }, - "expirationSeconds": { - "type": "string", - "x-nullable": true, - "description": "Optional window (in seconds) indicating how long the API Key should last." - } - }, - "required": [ - "apiKeyName", - "publicKey" - ] - }, - "ApiKeyParamsV2": { - "type": "object", - "properties": { - "apiKeyName": { - "type": "string", - "description": "Human-readable name for an API Key." - }, - "publicKey": { - "type": "string", - "description": "The public component of a cryptographic key pair used to sign messages and transactions." - }, - "curveType": { - "$ref": "#/definitions/ApiKeyCurve", - "description": "The curve type to be used for processing API key signatures." - }, - "expirationSeconds": { - "type": "string", - "x-nullable": true, - "description": "Optional window (in seconds) indicating how long the API Key should last." - } - }, - "required": [ - "apiKeyName", - "publicKey", - "curveType" - ] - }, - "ApiOnlyUserParams": { - "type": "object", - "properties": { - "userName": { - "type": "string", - "description": "The name of the new API-only User." - }, - "userEmail": { - "type": "string", - "x-nullable": true, - "description": "The email address for this API-only User (optional)." - }, - "userTags": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of tags assigned to the new API-only User. This field, if not needed, should be an empty array in your request body." - }, - "apiKeys": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/ApiKeyParams" - }, - "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." - } - }, - "required": [ - "userName", - "userTags", - "apiKeys" - ] - }, - "AppProof": { - "type": "object", - "properties": { - "scheme": { - "$ref": "#/definitions/data.v1.SignatureScheme", - "description": "Scheme of signing key." - }, - "publicKey": { - "type": "string", - "description": "Ephemeral public key." - }, - "proofPayload": { - "type": "string", - "description": "JSON serialized AppProofPayload." - }, - "signature": { - "type": "string", - "description": "Signature over hashed proof_payload." - } - }, - "required": [ - "scheme", - "publicKey", - "proofPayload", - "signature" - ] - }, - "AppStatus": { - "type": "object", - "properties": { - "appId": { - "type": "string", - "description": "Unique identifier for this TVC App" - }, - "deployments": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/DeploymentStatus" - }, - "description": "List of deployment statuses for this app" - }, - "targetedDeploymentId": { - "type": "string", - "description": "The deployment ID currently serving traffic for this app" - } - }, - "required": [ - "appId", - "deployments", - "targetedDeploymentId" - ] - }, - "ApproveActivityIntent": { - "type": "object", - "properties": { - "fingerprint": { - "type": "string", - "description": "An artifact verifying a User's action." - } - }, - "required": [ - "fingerprint" - ] - }, - "ApproveActivityRequest": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "ACTIVITY_TYPE_APPROVE_ACTIVITY" - ] - }, - "timestampMs": { - "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." - }, - "organizationId": { - "type": "string", - "description": "Unique identifier for a given Organization." - }, - "parameters": { - "$ref": "#/definitions/ApproveActivityIntent" - }, - "generateAppProofs": { - "type": "boolean", - "x-nullable": true - } - }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] - }, - "AssetBalance": { - "type": "object", - "properties": { - "caip19": { - "type": "string", - "description": "The caip-19 asset identifier" - }, - "symbol": { - "type": "string", - "description": "The asset symbol" - }, - "balance": { - "type": "string", - "description": "The balance in atomic units" - }, - "decimals": { - "type": "integer", - "format": "int32", - "description": "The number of decimals this asset uses" - }, - "display": { - "$ref": "#/definitions/AssetBalanceDisplay", - "description": "Normalized balance values for display purposes only. Do not do any arithmetic or calculations with these, as the results could be imprecise. Use the balance field instead." - }, - "name": { - "type": "string", - "description": "The asset name" - } - } - }, - "AssetBalanceDisplay": { - "type": "object", - "properties": { - "usd": { - "type": "string", - "description": "USD value for display purposes only. Do not do any arithmetic or calculations with these, as the results could be imprecise." - }, - "crypto": { - "type": "string", - "description": "Normalized crypto value for display purposes only. Do not do any arithmetic or calculations with these, as the results could be imprecise." - } - } - }, - "AssetMetadata": { - "type": "object", - "properties": { - "caip19": { - "type": "string", - "description": "The caip-19 asset identifier" - }, - "symbol": { - "type": "string", - "description": "The asset symbol" - }, - "decimals": { - "type": "integer", - "format": "int32", - "description": "The number of decimals this asset uses" - }, - "logoUrl": { - "type": "string", - "description": "The url of the asset logo" - }, - "name": { - "type": "string", - "description": "The asset name" - } - } - }, - "Attestation": { - "type": "object", - "properties": { - "credentialId": { - "type": "string", - "description": "The cbor encoded then base64 url encoded id of the credential." - }, - "clientDataJson": { - "type": "string", - "description": "A base64 url encoded payload containing metadata about the signing context and the challenge." - }, - "attestationObject": { - "type": "string", - "description": "A base64 url encoded payload containing authenticator data and any attestation the webauthn provider chooses." - }, - "transports": { - "type": "array", - "items": { - "$ref": "#/definitions/AuthenticatorTransport" - }, - "description": "The type of authenticator transports." - } - }, - "required": [ - "credentialId", - "clientDataJson", - "attestationObject", - "transports" - ] - }, - "AuthenticationMethod": { - "type": "object", - "properties": { - "type": { - "$ref": "#/definitions/AuthenticationType", - "description": "The type of authenticator (e.g., AUTHENTICATION_TYPE_EMAIL, AUTHENTICATION_TYPE_SESSION) required for this MFA step." - }, - "id": { - "type": "string", - "x-nullable": true, - "description": "Optional specific authenticator ID required (e.g., for requiring a specific session profile id)" - } - }, - "required": [ - "type" - ] - }, - "AuthenticationMethodParams": { - "type": "object", - "properties": { - "type": { - "$ref": "#/definitions/AuthenticationType", - "description": "The type of authenticator (e.g., AUTHENTICATION_TYPE_PASSKEY for passkey authentication)." - }, - "id": { - "type": "string", - "x-nullable": true, - "description": "Optional specific authenticator ID required (e.g., UUID of a passkey authenticator). If not provided, any authenticator of the specified type can be used." - } - }, - "required": [ - "type" - ] - }, - "AuthenticationType": { - "type": "string", - "enum": [ - "AUTHENTICATION_TYPE_EMAIL_OTP", - "AUTHENTICATION_TYPE_SMS_OTP", - "AUTHENTICATION_TYPE_PASSKEY", - "AUTHENTICATION_TYPE_API_KEY", - "AUTHENTICATION_TYPE_OAUTH", - "AUTHENTICATION_TYPE_SESSION" - ] - }, - "Authenticator": { - "type": "object", - "properties": { - "transports": { - "type": "array", - "items": { - "$ref": "#/definitions/AuthenticatorTransport" - }, - "description": "Types of transports that may be used by an Authenticator (e.g., USB, NFC, BLE)." - }, - "attestationType": { - "type": "string" - }, - "aaguid": { - "type": "string", - "description": "Identifier indicating the type of the Security Key." - }, - "credentialId": { - "type": "string", - "description": "Unique identifier for a WebAuthn credential." - }, - "model": { - "type": "string", - "description": "The type of Authenticator device." - }, - "credential": { - "$ref": "#/definitions/external.data.v1.Credential", - "description": "A User credential that can be used to authenticate to Turnkey." - }, - "authenticatorId": { - "type": "string", - "description": "Unique identifier for a given Authenticator." - }, - "authenticatorName": { - "type": "string", - "description": "Human-readable name for an Authenticator." - }, - "createdAt": { - "$ref": "#/definitions/external.data.v1.Timestamp" - }, - "updatedAt": { - "$ref": "#/definitions/external.data.v1.Timestamp" - } - }, - "required": [ - "transports", - "attestationType", - "aaguid", - "credentialId", - "model", - "credential", - "authenticatorId", - "authenticatorName", - "createdAt", - "updatedAt" - ] - }, - "AuthenticatorAttestationResponse": { - "type": "object", - "properties": { - "clientDataJson": { - "type": "string" - }, - "attestationObject": { - "type": "string" - }, - "transports": { - "type": "array", - "items": { - "$ref": "#/definitions/AuthenticatorTransport" - } - }, - "authenticatorAttachment": { - "type": "string", - "enum": [ - "cross-platform", - "platform" - ], - "x-nullable": true - } - }, - "required": [ - "clientDataJson", - "attestationObject" - ] - }, - "AuthenticatorParams": { - "type": "object", - "properties": { - "authenticatorName": { - "type": "string", - "description": "Human-readable name for an Authenticator." - }, - "userId": { - "type": "string", - "description": "Unique identifier for a given User." - }, - "attestation": { - "$ref": "#/definitions/PublicKeyCredentialWithAttestation" - }, - "challenge": { - "type": "string", - "description": "Challenge presented for authentication purposes." - } - }, - "required": [ - "authenticatorName", - "userId", - "attestation", - "challenge" - ] - }, - "AuthenticatorParamsV2": { - "type": "object", - "properties": { - "authenticatorName": { - "type": "string", - "description": "Human-readable name for an Authenticator." - }, - "challenge": { - "type": "string", - "description": "Challenge presented for authentication purposes." - }, - "attestation": { - "$ref": "#/definitions/Attestation", - "description": "The attestation that proves custody of the authenticator and provides metadata about it." - } - }, - "required": [ - "authenticatorName", - "challenge", - "attestation" - ] - }, - "AuthenticatorTransport": { - "type": "string", - "enum": [ - "AUTHENTICATOR_TRANSPORT_BLE", - "AUTHENTICATOR_TRANSPORT_INTERNAL", - "AUTHENTICATOR_TRANSPORT_NFC", - "AUTHENTICATOR_TRANSPORT_USB", - "AUTHENTICATOR_TRANSPORT_HYBRID" - ] - }, - "BootProof": { - "type": "object", - "properties": { - "ephemeralPublicKeyHex": { - "type": "string", - "description": "The hex encoded Ephemeral Public Key." - }, - "awsAttestationDocB64": { - "type": "string", - "description": "The DER encoded COSE Sign1 struct Attestation doc." - }, - "qosManifestB64": { - "type": "string", - "description": "The base64 encoded QOS manifest. Encoding depends on qos_manifest_version." - }, - "qosManifestEnvelopeB64": { - "type": "string", - "description": "The base64 encoded QOS manifest envelope. Encoding depends on qos_manifest_version." - }, - "deploymentLabel": { - "type": "string", - "description": "The label under which the enclave app was deployed." - }, - "enclaveApp": { - "type": "string", - "description": "Name of the enclave app" - }, - "owner": { - "type": "string", - "description": "Owner of the app i.e. 'tkhq'" - }, - "createdAt": { - "$ref": "#/definitions/external.data.v1.Timestamp" - }, - "qosManifestVersion": { - "type": "string", - "x-nullable": true, - "description": "QOS manifest schema version." - } - }, - "required": [ - "ephemeralPublicKeyHex", - "awsAttestationDocB64", - "qosManifestB64", - "qosManifestEnvelopeB64", - "deploymentLabel", - "enclaveApp", - "owner", - "createdAt" - ] - }, - "BootProofResponse": { - "type": "object", - "properties": { - "bootProof": { - "$ref": "#/definitions/BootProof" - } - }, - "required": [ - "bootProof" - ] - }, - "ClaimEarnFeesIntent": { - "type": "object", - "properties": { - "wrapperAddress": { - "type": "string", - "description": "Address of the deployed Earn wrapper to claim fees for. Must be one of the org's deployed wrappers." - } - }, - "required": [ - "wrapperAddress" - ] - }, - "ClaimEarnFeesRequest": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "ACTIVITY_TYPE_CLAIM_EARN_FEES" - ] - }, - "timestampMs": { - "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." - }, - "organizationId": { - "type": "string", - "description": "Unique identifier for a given Organization." - }, - "parameters": { - "$ref": "#/definitions/ClaimEarnFeesIntent" + "/public/v1/query/get_earn_deposit_status": { + "post": { + "summary": "Get Earn deposit status", + "description": "Poll the status of a deposit by its deposit_request_id (for the async/sponsored deposit path).", + "operationId": "GetEarnDepositStatus", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetEarnDepositStatusResponse" + } + } }, - "generateAppProofs": { - "type": "boolean", - "x-nullable": true - } - }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] - }, - "ClaimEarnFeesResult": { - "type": "object", - "properties": { - "claimRequestId": { - "type": "string", - "description": "Identifier to poll claim status and tx hash via GetClaimEarnFeesStatus." - } - }, - "required": [ - "claimRequestId" - ] - }, - "ClaimSwapFeesIntent": { - "type": "object" - }, - "ClaimSwapFeesResult": { - "type": "object", - "properties": { - "requestId": { - "type": "string", - "description": "Relay claim request ID submitted through the permit endpoint." - } - }, - "required": [ - "requestId" - ] + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetEarnDepositStatusRequest" + } + } + ], + "tags": ["Earn"] + } }, - "ClientSignature": { - "type": "object", - "properties": { - "publicKey": { - "type": "string", - "description": "The public component of a cryptographic key pair used to create the signature." - }, - "scheme": { - "$ref": "#/definitions/ClientSignatureScheme", - "description": "The signature scheme used to generate the client signature." - }, - "message": { - "type": "string", - "description": "The message that was signed." + "/public/v1/query/get_earn_withdraw_status": { + "post": { + "summary": "Get Earn withdraw status", + "description": "Poll the status of a withdrawal by its withdraw_request_id.", + "operationId": "GetEarnWithdrawStatus", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetEarnWithdrawStatusResponse" + } + } }, - "signature": { - "type": "string", - "description": "The cryptographic signature over the message." - } - }, - "required": [ - "publicKey", - "scheme", - "message", - "signature" - ] - }, - "ClientSignatureScheme": { - "type": "string", - "enum": [ - "CLIENT_SIGNATURE_SCHEME_API_P256" - ] + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetEarnWithdrawStatusRequest" + } + } + ], + "tags": ["Earn"] + } }, - "Config": { - "type": "object", - "properties": { - "features": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/Feature" + "/public/v1/query/list_earn_enabled_vaults": { + "post": { + "summary": "Get Earn enabled vaults", + "description": "Get the organization's deployed wrappers with on-chain total deposited and live APY. The management view, distinct from per-wallet positions.", + "operationId": "ListEarnEnabledVaults", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ListEarnEnabledVaultsResponse" + } } }, - "quorum": { - "$ref": "#/definitions/external.data.v1.Quorum" - } + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/ListEarnEnabledVaultsRequest" + } + } + ], + "tags": ["Earn"] } }, - "CreateApiKeysIntent": { - "type": "object", - "properties": { - "apiKeys": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/ApiKeyParams" - }, - "description": "A list of API Keys." + "/public/v1/query/list_earn_positions": { + "post": { + "summary": "Get Earn positions", + "description": "Get the active Earn positions for a specific wallet, including current value, cost basis, yield, and projected fees.", + "operationId": "ListEarnPositions", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ListEarnPositionsResponse" + } + } }, - "userId": { - "type": "string", - "description": "Unique identifier for a given User." - } - }, - "required": [ - "apiKeys", - "userId" - ] + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/ListEarnPositionsRequest" + } + } + ], + "tags": ["Earn"] + } }, - "CreateApiKeysIntentV2": { - "type": "object", - "properties": { - "apiKeys": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/ApiKeyParamsV2" - }, - "description": "A list of API Keys." + "/public/v1/query/list_earn_vaults": { + "post": { + "summary": "Get Earn vault catalog", + "description": "Get the catalog of all wrappable yield vaults across supported chains, enriched with live TVL and APY. Annotates which vaults the organization has already enabled.", + "operationId": "ListEarnVaults", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ListEarnVaultsResponse" + } + } }, - "userId": { - "type": "string", - "description": "Unique identifier for a given User." - } - }, - "required": [ - "apiKeys", - "userId" - ] + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/ListEarnVaultsRequest" + } + } + ], + "tags": ["Earn"] + } }, - "CreateApiKeysRequest": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "ACTIVITY_TYPE_CREATE_API_KEYS_V2" - ] - }, - "timestampMs": { - "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." - }, - "organizationId": { - "type": "string", - "description": "Unique identifier for a given Organization." + "/public/v1/submit/claim_earn_fees": { + "post": { + "summary": "Claim earn fees", + "description": "Claim earn fees through the activity pipeline.", + "operationId": "ClaimEarnFees", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } }, - "parameters": { - "$ref": "#/definitions/CreateApiKeysIntentV2" + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/ClaimEarnFeesRequest" + } + } + ], + "tags": ["Earn"] + } + }, + "/public/v1/submit/earn_deploy_wrapper": { + "post": { + "summary": "Deploy Earn wrapper", + "description": "Enable a yield vault for an organization by deploying its fee wrapper. Must be called before any deposits into the vault.", + "operationId": "EarnDeployWrapper", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } }, - "generateAppProofs": { - "type": "boolean", - "x-nullable": true - } - }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/EarnDeployWrapperRequest" + } + } + ], + "tags": ["Earn"] + } }, - "CreateApiKeysResult": { - "type": "object", - "properties": { - "apiKeyIds": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of API Key IDs." - } - }, - "required": [ - "apiKeyIds" - ] + "/public/v1/submit/earn_deposit": { + "post": { + "summary": "Deposit into Earn vault", + "description": "Deposit assets from a wallet into an enabled yield vault.", + "operationId": "EarnDeposit", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/EarnDepositRequest" + } + } + ], + "tags": ["Earn"] + } }, - "CreateApiOnlyUsersIntent": { - "type": "object", - "properties": { - "apiOnlyUsers": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/ApiOnlyUserParams" - }, - "description": "A list of API-only Users to create." - } - }, - "required": [ - "apiOnlyUsers" - ] + "/public/v1/submit/earn_set_wrapper_state": { + "post": { + "summary": "Set Earn wrapper state", + "description": "Enable or disable deposits to a deployed Earn wrapper. Withdrawals are always allowed.", + "operationId": "EarnSetWrapperState", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/EarnSetWrapperStateRequest" + } + } + ], + "tags": ["Earn"] + } }, - "CreateApiOnlyUsersResult": { + "/public/v1/submit/earn_withdraw": { + "post": { + "summary": "Withdraw from Earn vault", + "description": "Withdraw assets or redeem shares from an enabled yield vault.", + "operationId": "EarnWithdraw", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/EarnWithdrawRequest" + } + } + ], + "tags": ["Earn"] + } + } + }, + "definitions": { + "AcceptInvitationIntent": { "type": "object", "properties": { - "userIds": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of API-only User IDs." + "invitationId": { + "type": "string", + "description": "Unique identifier for a given Invitation object." + }, + "userId": { + "type": "string", + "description": "Unique identifier for a given User." + }, + "authenticator": { + "$ref": "#/definitions/AuthenticatorParams", + "description": "WebAuthN hardware devices that can be used to log in to the Turnkey web app." } }, - "required": [ - "userIds" - ] + "required": ["invitationId", "userId", "authenticator"] }, - "CreateAuthenticatorsIntent": { + "AcceptInvitationIntentV2": { "type": "object", "properties": { - "authenticators": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/AuthenticatorParams" - }, - "description": "A list of Authenticators." + "invitationId": { + "type": "string", + "description": "Unique identifier for a given Invitation object." }, "userId": { "type": "string", "description": "Unique identifier for a given User." + }, + "authenticator": { + "$ref": "#/definitions/AuthenticatorParamsV2", + "description": "WebAuthN hardware devices that can be used to log in to the Turnkey web app." } }, - "required": [ - "authenticators", - "userId" - ] + "required": ["invitationId", "userId", "authenticator"] }, - "CreateAuthenticatorsIntentV2": { + "AcceptInvitationResult": { "type": "object", "properties": { - "authenticators": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/AuthenticatorParamsV2" - }, - "description": "A list of Authenticators." + "invitationId": { + "type": "string", + "description": "Unique identifier for a given Invitation." }, "userId": { "type": "string", "description": "Unique identifier for a given User." } }, - "required": [ - "authenticators", - "userId" - ] + "required": ["invitationId", "userId"] }, - "CreateAuthenticatorsRequest": { + "AccessType": { + "type": "string", + "enum": ["ACCESS_TYPE_WEB", "ACCESS_TYPE_API", "ACCESS_TYPE_ALL"] + }, + "ActivateBillingTierIntent": { "type": "object", "properties": { - "type": { - "type": "string", - "enum": [ - "ACTIVITY_TYPE_CREATE_AUTHENTICATORS_V2" - ] - }, - "timestampMs": { + "productId": { "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + "description": "The product that the customer wants to subscribe to." }, - "organizationId": { + "orbPlanId": { "type": "string", - "description": "Unique identifier for a given Organization." - }, - "parameters": { - "$ref": "#/definitions/CreateAuthenticatorsIntentV2" - }, - "generateAppProofs": { - "type": "boolean", "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["productId"] }, - "CreateAuthenticatorsResult": { + "ActivateBillingTierResult": { "type": "object", "properties": { - "authenticatorIds": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of Authenticator IDs." + "productId": { + "type": "string", + "description": "The id of the product being subscribed to." } }, - "required": [ - "authenticatorIds" - ] + "required": ["productId"] }, - "CreateFiatOnRampCredentialIntent": { + "Activity": { "type": "object", "properties": { - "onrampProvider": { - "$ref": "#/definitions/FiatOnRampProvider", - "description": "The fiat on-ramp provider" - }, - "projectId": { - "type": "string", - "x-nullable": true, - "description": "Project ID for the on-ramp provider. Some providers, like Coinbase, require this additional identifier" - }, - "publishableApiKey": { + "id": { "type": "string", - "description": "Publishable API key for the on-ramp provider" + "description": "Unique identifier for a given Activity object." }, - "encryptedSecretApiKey": { + "organizationId": { "type": "string", - "description": "Secret API key for the on-ramp provider encrypted to our on-ramp encryption public key" + "description": "Unique identifier for a given Organization." }, - "encryptedPrivateApiKey": { - "type": "string", - "x-nullable": true, - "description": "Private API key for the on-ramp provider encrypted to our on-ramp encryption public key. Some providers, like Coinbase, require this additional key." + "status": { + "$ref": "#/definitions/ActivityStatus", + "description": "The current processing status of a specified Activity." }, - "sandboxMode": { - "type": "boolean", - "description": "If the on-ramp credential is a sandbox credential" - } - }, - "required": [ - "onrampProvider", - "publishableApiKey", - "encryptedSecretApiKey" - ] - }, - "CreateFiatOnRampCredentialRequest": { - "type": "object", - "properties": { "type": { - "type": "string", - "enum": [ - "ACTIVITY_TYPE_CREATE_FIAT_ON_RAMP_CREDENTIAL" - ] + "$ref": "#/definitions/ActivityType", + "description": "Type of Activity, such as Add User, or Sign Transaction." }, - "timestampMs": { - "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + "intent": { + "$ref": "#/definitions/Intent", + "description": "Intent object crafted by Turnkey based on the user request, used to assess the permissibility of an action." }, - "organizationId": { + "result": { + "$ref": "#/definitions/Result", + "description": "Result of the intended action." + }, + "votes": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/Vote" + }, + "description": "A list of objects representing a particular User's approval or rejection of a Consensus request, including all relevant metadata." + }, + "appProofs": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/AppProof" + }, + "description": "A list of App Proofs generated by enclaves during activity execution, providing verifiable attestations of performed operations." + }, + "fingerprint": { "type": "string", - "description": "Unique identifier for a given Organization." + "description": "An artifact verifying a User's action." }, - "parameters": { - "$ref": "#/definitions/CreateFiatOnRampCredentialIntent" + "canApprove": { + "type": "boolean" }, - "generateAppProofs": { - "type": "boolean", - "x-nullable": true + "canReject": { + "type": "boolean" + }, + "createdAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + }, + "failure": { + "$ref": "#/definitions/Status", + "description": "Failure reason of the intended action." } }, "required": [ - "type", - "timestampMs", + "id", "organizationId", - "parameters" + "status", + "type", + "intent", + "result", + "votes", + "fingerprint", + "canApprove", + "canReject", + "createdAt", + "updatedAt" ] }, - "CreateFiatOnRampCredentialResult": { + "ActivityResponse": { "type": "object", "properties": { - "fiatOnRampCredentialId": { - "type": "string", - "description": "Unique identifier of the Fiat On-Ramp credential that was created" + "activity": { + "$ref": "#/definitions/Activity", + "description": "An action that can be taken within the Turnkey infrastructure." } }, - "required": [ - "fiatOnRampCredentialId" + "required": ["activity"] + }, + "ActivityStatus": { + "type": "string", + "enum": [ + "ACTIVITY_STATUS_CREATED", + "ACTIVITY_STATUS_PENDING", + "ACTIVITY_STATUS_COMPLETED", + "ACTIVITY_STATUS_FAILED", + "ACTIVITY_STATUS_CONSENSUS_NEEDED", + "ACTIVITY_STATUS_REJECTED", + "ACTIVITY_STATUS_AUTHENTICATORS_NEEDED" ] }, - "CreateInvitationsIntent": { - "type": "object", - "properties": { - "invitations": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/InvitationParams" - }, - "description": "A list of Invitations." - } - }, - "required": [ - "invitations" + "ActivityType": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_CREATE_API_KEYS", + "ACTIVITY_TYPE_CREATE_USERS", + "ACTIVITY_TYPE_CREATE_PRIVATE_KEYS", + "ACTIVITY_TYPE_SIGN_RAW_PAYLOAD", + "ACTIVITY_TYPE_CREATE_INVITATIONS", + "ACTIVITY_TYPE_ACCEPT_INVITATION", + "ACTIVITY_TYPE_CREATE_POLICY", + "ACTIVITY_TYPE_DISABLE_PRIVATE_KEY", + "ACTIVITY_TYPE_DELETE_USERS", + "ACTIVITY_TYPE_DELETE_API_KEYS", + "ACTIVITY_TYPE_DELETE_INVITATION", + "ACTIVITY_TYPE_DELETE_ORGANIZATION", + "ACTIVITY_TYPE_DELETE_POLICY", + "ACTIVITY_TYPE_CREATE_USER_TAG", + "ACTIVITY_TYPE_DELETE_USER_TAGS", + "ACTIVITY_TYPE_CREATE_ORGANIZATION", + "ACTIVITY_TYPE_SIGN_TRANSACTION", + "ACTIVITY_TYPE_APPROVE_ACTIVITY", + "ACTIVITY_TYPE_REJECT_ACTIVITY", + "ACTIVITY_TYPE_DELETE_AUTHENTICATORS", + "ACTIVITY_TYPE_CREATE_AUTHENTICATORS", + "ACTIVITY_TYPE_CREATE_PRIVATE_KEY_TAG", + "ACTIVITY_TYPE_DELETE_PRIVATE_KEY_TAGS", + "ACTIVITY_TYPE_SET_PAYMENT_METHOD", + "ACTIVITY_TYPE_ACTIVATE_BILLING_TIER", + "ACTIVITY_TYPE_DELETE_PAYMENT_METHOD", + "ACTIVITY_TYPE_CREATE_POLICY_V2", + "ACTIVITY_TYPE_CREATE_POLICY_V3", + "ACTIVITY_TYPE_CREATE_API_ONLY_USERS", + "ACTIVITY_TYPE_UPDATE_ROOT_QUORUM", + "ACTIVITY_TYPE_UPDATE_USER_TAG", + "ACTIVITY_TYPE_UPDATE_PRIVATE_KEY_TAG", + "ACTIVITY_TYPE_CREATE_AUTHENTICATORS_V2", + "ACTIVITY_TYPE_CREATE_ORGANIZATION_V2", + "ACTIVITY_TYPE_CREATE_USERS_V2", + "ACTIVITY_TYPE_ACCEPT_INVITATION_V2", + "ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION", + "ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V2", + "ACTIVITY_TYPE_UPDATE_ALLOWED_ORIGINS", + "ACTIVITY_TYPE_CREATE_PRIVATE_KEYS_V2", + "ACTIVITY_TYPE_UPDATE_USER", + "ACTIVITY_TYPE_UPDATE_POLICY", + "ACTIVITY_TYPE_SET_PAYMENT_METHOD_V2", + "ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V3", + "ACTIVITY_TYPE_CREATE_WALLET", + "ACTIVITY_TYPE_CREATE_WALLET_ACCOUNTS", + "ACTIVITY_TYPE_INIT_USER_EMAIL_RECOVERY", + "ACTIVITY_TYPE_RECOVER_USER", + "ACTIVITY_TYPE_SET_ORGANIZATION_FEATURE", + "ACTIVITY_TYPE_REMOVE_ORGANIZATION_FEATURE", + "ACTIVITY_TYPE_SIGN_RAW_PAYLOAD_V2", + "ACTIVITY_TYPE_SIGN_TRANSACTION_V2", + "ACTIVITY_TYPE_EXPORT_PRIVATE_KEY", + "ACTIVITY_TYPE_EXPORT_WALLET", + "ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V4", + "ACTIVITY_TYPE_EMAIL_AUTH", + "ACTIVITY_TYPE_EXPORT_WALLET_ACCOUNT", + "ACTIVITY_TYPE_INIT_IMPORT_WALLET", + "ACTIVITY_TYPE_IMPORT_WALLET", + "ACTIVITY_TYPE_INIT_IMPORT_PRIVATE_KEY", + "ACTIVITY_TYPE_IMPORT_PRIVATE_KEY", + "ACTIVITY_TYPE_CREATE_POLICIES", + "ACTIVITY_TYPE_SIGN_RAW_PAYLOADS", + "ACTIVITY_TYPE_CREATE_READ_ONLY_SESSION", + "ACTIVITY_TYPE_CREATE_OAUTH_PROVIDERS", + "ACTIVITY_TYPE_DELETE_OAUTH_PROVIDERS", + "ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V5", + "ACTIVITY_TYPE_OAUTH", + "ACTIVITY_TYPE_CREATE_API_KEYS_V2", + "ACTIVITY_TYPE_CREATE_READ_WRITE_SESSION", + "ACTIVITY_TYPE_EMAIL_AUTH_V2", + "ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V6", + "ACTIVITY_TYPE_DELETE_PRIVATE_KEYS", + "ACTIVITY_TYPE_DELETE_WALLETS", + "ACTIVITY_TYPE_CREATE_READ_WRITE_SESSION_V2", + "ACTIVITY_TYPE_DELETE_SUB_ORGANIZATION", + "ACTIVITY_TYPE_INIT_OTP_AUTH", + "ACTIVITY_TYPE_OTP_AUTH", + "ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V7", + "ACTIVITY_TYPE_UPDATE_WALLET", + "ACTIVITY_TYPE_UPDATE_POLICY_V2", + "ACTIVITY_TYPE_CREATE_USERS_V3", + "ACTIVITY_TYPE_INIT_OTP_AUTH_V2", + "ACTIVITY_TYPE_INIT_OTP", + "ACTIVITY_TYPE_VERIFY_OTP", + "ACTIVITY_TYPE_OTP_LOGIN", + "ACTIVITY_TYPE_STAMP_LOGIN", + "ACTIVITY_TYPE_OAUTH_LOGIN", + "ACTIVITY_TYPE_UPDATE_USER_NAME", + "ACTIVITY_TYPE_UPDATE_USER_EMAIL", + "ACTIVITY_TYPE_UPDATE_USER_PHONE_NUMBER", + "ACTIVITY_TYPE_INIT_FIAT_ON_RAMP", + "ACTIVITY_TYPE_CREATE_SMART_CONTRACT_INTERFACE", + "ACTIVITY_TYPE_DELETE_SMART_CONTRACT_INTERFACE", + "ACTIVITY_TYPE_ENABLE_AUTH_PROXY", + "ACTIVITY_TYPE_DISABLE_AUTH_PROXY", + "ACTIVITY_TYPE_UPDATE_AUTH_PROXY_CONFIG", + "ACTIVITY_TYPE_CREATE_OAUTH2_CREDENTIAL", + "ACTIVITY_TYPE_UPDATE_OAUTH2_CREDENTIAL", + "ACTIVITY_TYPE_DELETE_OAUTH2_CREDENTIAL", + "ACTIVITY_TYPE_OAUTH2_AUTHENTICATE", + "ACTIVITY_TYPE_DELETE_WALLET_ACCOUNTS", + "ACTIVITY_TYPE_DELETE_POLICIES", + "ACTIVITY_TYPE_ETH_SEND_RAW_TRANSACTION", + "ACTIVITY_TYPE_ETH_SEND_TRANSACTION", + "ACTIVITY_TYPE_CREATE_FIAT_ON_RAMP_CREDENTIAL", + "ACTIVITY_TYPE_UPDATE_FIAT_ON_RAMP_CREDENTIAL", + "ACTIVITY_TYPE_DELETE_FIAT_ON_RAMP_CREDENTIAL", + "ACTIVITY_TYPE_EMAIL_AUTH_V3", + "ACTIVITY_TYPE_INIT_USER_EMAIL_RECOVERY_V2", + "ACTIVITY_TYPE_INIT_OTP_AUTH_V3", + "ACTIVITY_TYPE_INIT_OTP_V2", + "ACTIVITY_TYPE_UPSERT_GAS_USAGE_CONFIG", + "ACTIVITY_TYPE_CREATE_TVC_APP", + "ACTIVITY_TYPE_CREATE_TVC_DEPLOYMENT", + "ACTIVITY_TYPE_CREATE_TVC_MANIFEST_APPROVALS", + "ACTIVITY_TYPE_SOL_SEND_TRANSACTION", + "ACTIVITY_TYPE_INIT_OTP_V3", + "ACTIVITY_TYPE_VERIFY_OTP_V2", + "ACTIVITY_TYPE_OTP_LOGIN_V2", + "ACTIVITY_TYPE_UPDATE_ORGANIZATION_NAME", + "ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V8", + "ACTIVITY_TYPE_CREATE_OAUTH_PROVIDERS_V2", + "ACTIVITY_TYPE_CREATE_USERS_V4", + "ACTIVITY_TYPE_CREATE_WEBHOOK_ENDPOINT", + "ACTIVITY_TYPE_UPDATE_WEBHOOK_ENDPOINT", + "ACTIVITY_TYPE_DELETE_WEBHOOK_ENDPOINT", + "ACTIVITY_TYPE_SET_IP_ALLOWLIST", + "ACTIVITY_TYPE_REMOVE_IP_ALLOWLIST", + "ACTIVITY_TYPE_UPDATE_TVC_APP_LIVE_DEPLOYMENT", + "ACTIVITY_TYPE_DELETE_TVC_DEPLOYMENT", + "ACTIVITY_TYPE_DELETE_TVC_APP_AND_DEPLOYMENTS", + "ACTIVITY_TYPE_RESTORE_TVC_DEPLOYMENT", + "ACTIVITY_TYPE_SPARK_SIGN_FROST", + "ACTIVITY_TYPE_SPARK_PREPARE_TRANSFER", + "ACTIVITY_TYPE_SPARK_CLAIM_TRANSFER", + "ACTIVITY_TYPE_SPARK_PREPARE_LIGHTNING_RECEIVE", + "ACTIVITY_TYPE_POST_TVC_QUORUM_KEY_SHARE", + "ACTIVITY_TYPE_ETH_SEND_TRANSACTION_V2", + "ACTIVITY_TYPE_CREATE_MFA_POLICY", + "ACTIVITY_TYPE_UPDATE_MFA_POLICY", + "ACTIVITY_TYPE_DELETE_MFA_POLICY", + "ACTIVITY_TYPE_CREATE_SESSION_PROFILE", + "ACTIVITY_TYPE_EARN_DEPLOY_WRAPPER", + "ACTIVITY_TYPE_EARN_DEPOSIT", + "ACTIVITY_TYPE_EARN_WITHDRAW", + "ACTIVITY_TYPE_EARN_SET_WRAPPER_STATE", + "ACTIVITY_TYPE_CLAIM_EARN_FEES" ] }, - "CreateInvitationsRequest": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "ACTIVITY_TYPE_CREATE_INVITATIONS" - ] - }, - "timestampMs": { - "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." - }, - "organizationId": { - "type": "string", - "description": "Unique identifier for a given Organization." - }, - "parameters": { - "$ref": "#/definitions/CreateInvitationsIntent" - }, - "generateAppProofs": { - "type": "boolean", - "x-nullable": true - } - }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" + "AddressFormat": { + "type": "string", + "enum": [ + "ADDRESS_FORMAT_UNCOMPRESSED", + "ADDRESS_FORMAT_COMPRESSED", + "ADDRESS_FORMAT_ETHEREUM", + "ADDRESS_FORMAT_SOLANA", + "ADDRESS_FORMAT_COSMOS", + "ADDRESS_FORMAT_TRON", + "ADDRESS_FORMAT_SUI", + "ADDRESS_FORMAT_APTOS", + "ADDRESS_FORMAT_BITCOIN_MAINNET_P2PKH", + "ADDRESS_FORMAT_BITCOIN_MAINNET_P2SH", + "ADDRESS_FORMAT_BITCOIN_MAINNET_P2WPKH", + "ADDRESS_FORMAT_BITCOIN_MAINNET_P2WSH", + "ADDRESS_FORMAT_BITCOIN_MAINNET_P2TR", + "ADDRESS_FORMAT_BITCOIN_TESTNET_P2PKH", + "ADDRESS_FORMAT_BITCOIN_TESTNET_P2SH", + "ADDRESS_FORMAT_BITCOIN_TESTNET_P2WPKH", + "ADDRESS_FORMAT_BITCOIN_TESTNET_P2WSH", + "ADDRESS_FORMAT_BITCOIN_TESTNET_P2TR", + "ADDRESS_FORMAT_BITCOIN_SIGNET_P2PKH", + "ADDRESS_FORMAT_BITCOIN_SIGNET_P2SH", + "ADDRESS_FORMAT_BITCOIN_SIGNET_P2WPKH", + "ADDRESS_FORMAT_BITCOIN_SIGNET_P2WSH", + "ADDRESS_FORMAT_BITCOIN_SIGNET_P2TR", + "ADDRESS_FORMAT_BITCOIN_REGTEST_P2PKH", + "ADDRESS_FORMAT_BITCOIN_REGTEST_P2SH", + "ADDRESS_FORMAT_BITCOIN_REGTEST_P2WPKH", + "ADDRESS_FORMAT_BITCOIN_REGTEST_P2WSH", + "ADDRESS_FORMAT_BITCOIN_REGTEST_P2TR", + "ADDRESS_FORMAT_SEI", + "ADDRESS_FORMAT_XLM", + "ADDRESS_FORMAT_DOGE_MAINNET", + "ADDRESS_FORMAT_DOGE_TESTNET", + "ADDRESS_FORMAT_TON_V3R2", + "ADDRESS_FORMAT_TON_V4R2", + "ADDRESS_FORMAT_TON_V5R1", + "ADDRESS_FORMAT_XRP", + "ADDRESS_FORMAT_SPARK_MAINNET", + "ADDRESS_FORMAT_SPARK_REGTEST" ] }, - "CreateInvitationsResult": { + "Any": { "type": "object", "properties": { - "invitationIds": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of Invitation IDs" + "@type": { + "type": "string" } }, - "required": [ - "invitationIds" - ] + "additionalProperties": {} }, - "CreateMfaPolicyIntent": { + "ApiKey": { "type": "object", "properties": { - "userId": { - "type": "string", - "description": "The ID of the User to add the MFA Policy to." + "credential": { + "$ref": "#/definitions/external.data.v1.Credential", + "description": "A User credential that can be used to authenticate to Turnkey." }, - "mfaPolicyName": { + "apiKeyId": { "type": "string", - "description": "Human-readable name for a Policy." + "description": "Unique identifier for a given API Key." }, - "condition": { + "apiKeyName": { "type": "string", - "description": "A condition expression that evaluates to true or false, determining when this MFA policy applies." + "description": "Human-readable name for an API Key." }, - "requiredAuthenticationMethods": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/RequiredAuthenticationMethodParams" - }, - "description": "An ordered list of authentication requirements. Each requirement must be satisfied sequentially to complete MFA." + "createdAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" }, - "order": { - "type": "integer", - "format": "int64", - "description": "The order in which this MFA policy is evaluated, starting from 0, relative to other MFA policies. Lower order values are evaluated first." + "updatedAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" }, - "notes": { + "expirationSeconds": { "type": "string", + "format": "uint64", "x-nullable": true, - "description": "Notes for an MFA Policy." + "description": "Optional window (in seconds) indicating how long the API Key should last." } }, "required": [ - "userId", - "mfaPolicyName", - "condition", - "requiredAuthenticationMethods", - "order" + "credential", + "apiKeyId", + "apiKeyName", + "createdAt", + "updatedAt" ] }, - "CreateMfaPolicyRequest": { + "ApiKeyCurve": { + "type": "string", + "enum": [ + "API_KEY_CURVE_P256", + "API_KEY_CURVE_SECP256K1", + "API_KEY_CURVE_ED25519" + ] + }, + "ApiKeyParams": { "type": "object", "properties": { - "type": { + "apiKeyName": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_CREATE_MFA_POLICY" - ] + "description": "Human-readable name for an API Key." }, - "timestampMs": { + "publicKey": { "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + "description": "The public component of a cryptographic key pair used to sign messages and transactions." }, - "organizationId": { + "expirationSeconds": { "type": "string", - "description": "Unique identifier for a given Organization." - }, - "parameters": { - "$ref": "#/definitions/CreateMfaPolicyIntent" + "x-nullable": true, + "description": "Optional window (in seconds) indicating how long the API Key should last." } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["apiKeyName", "publicKey"] }, - "CreateMfaPolicyResult": { + "ApiKeyParamsV2": { "type": "object", "properties": { - "mfaPolicyId": { + "apiKeyName": { "type": "string", - "description": "Unique identifier for a given MFA Policy." - } - }, - "required": [ - "mfaPolicyId" - ] - }, - "CreateOauth2CredentialIntent": { - "type": "object", - "properties": { - "provider": { - "$ref": "#/definitions/Oauth2Provider", - "description": "The OAuth 2.0 provider" + "description": "Human-readable name for an API Key." }, - "clientId": { + "publicKey": { "type": "string", - "description": "The Client ID issued by the OAuth 2.0 provider" + "description": "The public component of a cryptographic key pair used to sign messages and transactions." }, - "encryptedClientSecret": { + "curveType": { + "$ref": "#/definitions/ApiKeyCurve", + "description": "The curve type to be used for processing API key signatures." + }, + "expirationSeconds": { "type": "string", - "description": "The client secret issued by the OAuth 2.0 provider encrypted to the TLS Fetcher quorum key" + "x-nullable": true, + "description": "Optional window (in seconds) indicating how long the API Key should last." } }, - "required": [ - "provider", - "clientId", - "encryptedClientSecret" - ] + "required": ["apiKeyName", "publicKey", "curveType"] }, - "CreateOauth2CredentialRequest": { + "ApiOnlyUserParams": { "type": "object", "properties": { - "type": { - "type": "string", - "enum": [ - "ACTIVITY_TYPE_CREATE_OAUTH2_CREDENTIAL" - ] - }, - "timestampMs": { + "userName": { "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + "description": "The name of the new API-only User." }, - "organizationId": { + "userEmail": { "type": "string", - "description": "Unique identifier for a given Organization." + "x-nullable": true, + "description": "The email address for this API-only User (optional)." }, - "parameters": { - "$ref": "#/definitions/CreateOauth2CredentialIntent" + "userTags": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of tags assigned to the new API-only User. This field, if not needed, should be an empty array in your request body." }, - "generateAppProofs": { - "type": "boolean", - "x-nullable": true + "apiKeys": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/ApiKeyParams" + }, + "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["userName", "userTags", "apiKeys"] }, - "CreateOauth2CredentialResult": { + "AppProof": { "type": "object", "properties": { - "oauth2CredentialId": { + "scheme": { + "$ref": "#/definitions/data.v1.SignatureScheme", + "description": "Scheme of signing key." + }, + "publicKey": { "type": "string", - "description": "Unique identifier of the OAuth 2.0 credential that was created" + "description": "Ephemeral public key." + }, + "proofPayload": { + "type": "string", + "description": "JSON serialized AppProofPayload." + }, + "signature": { + "type": "string", + "description": "Signature over hashed proof_payload." } }, - "required": [ - "oauth2CredentialId" - ] + "required": ["scheme", "publicKey", "proofPayload", "signature"] }, - "CreateOauthProvidersIntent": { + "AppStatus": { "type": "object", "properties": { - "userId": { + "appId": { "type": "string", - "description": "The ID of the User to add an Oauth provider to" + "description": "Unique identifier for this TVC App" }, - "oauthProviders": { + "deployments": { "type": "array", "items": { "type": "object", - "$ref": "#/definitions/OauthProviderParams" + "$ref": "#/definitions/DeploymentStatus" }, - "description": "A list of Oauth providers." + "description": "List of deployment statuses for this app" + }, + "targetedDeploymentId": { + "type": "string", + "description": "The deployment ID currently serving traffic for this app" } }, - "required": [ - "userId", - "oauthProviders" - ] + "required": ["appId", "deployments", "targetedDeploymentId"] }, - "CreateOauthProvidersIntentV2": { + "ApproveActivityIntent": { "type": "object", "properties": { - "userId": { + "fingerprint": { "type": "string", - "description": "The ID of the User to add an Oauth provider to" - }, - "oauthProviders": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/OauthProviderParamsV2" - }, - "description": "A list of Oauth providers." + "description": "An artifact verifying a User's action." } }, - "required": [ - "userId", - "oauthProviders" - ] + "required": ["fingerprint"] }, - "CreateOauthProvidersRequest": { + "ApproveActivityRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_CREATE_OAUTH_PROVIDERS_V2" - ] + "enum": ["ACTIVITY_TYPE_APPROVE_ACTIVITY"] }, "timestampMs": { "type": "string", @@ -6178,425 +4761,427 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/definitions/CreateOauthProvidersIntentV2" + "$ref": "#/definitions/ApproveActivityIntent" }, "generateAppProofs": { "type": "boolean", "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "CreateOauthProvidersResult": { + "AssetBalance": { "type": "object", "properties": { - "providerIds": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of unique identifiers for Oauth Providers" + "caip19": { + "type": "string", + "description": "The caip-19 asset identifier" + }, + "symbol": { + "type": "string", + "description": "The asset symbol" + }, + "balance": { + "type": "string", + "description": "The balance in atomic units" + }, + "decimals": { + "type": "integer", + "format": "int32", + "description": "The number of decimals this asset uses" + }, + "display": { + "$ref": "#/definitions/AssetBalanceDisplay", + "description": "Normalized balance values for display purposes only. Do not do any arithmetic or calculations with these, as the results could be imprecise. Use the balance field instead." + }, + "name": { + "type": "string", + "description": "The asset name" } - }, - "required": [ - "providerIds" - ] + } }, - "CreateOauthProvidersResultV2": { + "AssetBalanceDisplay": { "type": "object", "properties": { - "providerIds": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of unique identifiers for Oauth Providers" + "usd": { + "type": "string", + "description": "USD value for display purposes only. Do not do any arithmetic or calculations with these, as the results could be imprecise." + }, + "crypto": { + "type": "string", + "description": "Normalized crypto value for display purposes only. Do not do any arithmetic or calculations with these, as the results could be imprecise." } - }, - "required": [ - "providerIds" - ] + } + }, + "AssetMetadata": { + "type": "object", + "properties": { + "caip19": { + "type": "string", + "description": "The caip-19 asset identifier" + }, + "symbol": { + "type": "string", + "description": "The asset symbol" + }, + "decimals": { + "type": "integer", + "format": "int32", + "description": "The number of decimals this asset uses" + }, + "logoUrl": { + "type": "string", + "description": "The url of the asset logo" + }, + "name": { + "type": "string", + "description": "The asset name" + } + } }, - "CreateOrganizationIntent": { + "Attestation": { "type": "object", "properties": { - "organizationName": { + "credentialId": { "type": "string", - "description": "Human-readable name for an Organization." + "description": "The cbor encoded then base64 url encoded id of the credential." }, - "rootEmail": { + "clientDataJson": { "type": "string", - "description": "The root user's email address." - }, - "rootAuthenticator": { - "$ref": "#/definitions/AuthenticatorParams", - "description": "The root user's Authenticator." + "description": "A base64 url encoded payload containing metadata about the signing context and the challenge." }, - "rootUserId": { + "attestationObject": { "type": "string", - "x-nullable": true, - "description": "Unique identifier for the root user object." + "description": "A base64 url encoded payload containing authenticator data and any attestation the webauthn provider chooses." + }, + "transports": { + "type": "array", + "items": { + "$ref": "#/definitions/AuthenticatorTransport" + }, + "description": "The type of authenticator transports." } }, "required": [ - "organizationName", - "rootEmail", - "rootAuthenticator" + "credentialId", + "clientDataJson", + "attestationObject", + "transports" ] }, - "CreateOrganizationIntentV2": { + "AuthenticationMethod": { "type": "object", "properties": { - "organizationName": { - "type": "string", - "description": "Human-readable name for an Organization." - }, - "rootEmail": { - "type": "string", - "description": "The root user's email address." - }, - "rootAuthenticator": { - "$ref": "#/definitions/AuthenticatorParamsV2", - "description": "The root user's Authenticator." + "type": { + "$ref": "#/definitions/AuthenticationType", + "description": "The type of authenticator (e.g., AUTHENTICATION_TYPE_EMAIL, AUTHENTICATION_TYPE_SESSION) required for this MFA step." }, - "rootUserId": { + "id": { "type": "string", "x-nullable": true, - "description": "Unique identifier for the root user object." + "description": "Optional specific authenticator ID required (e.g., for requiring a specific session profile id)" } }, - "required": [ - "organizationName", - "rootEmail", - "rootAuthenticator" - ] + "required": ["type"] }, - "CreateOrganizationResult": { + "AuthenticationMethodParams": { "type": "object", "properties": { - "organizationId": { + "type": { + "$ref": "#/definitions/AuthenticationType", + "description": "The type of authenticator (e.g., AUTHENTICATION_TYPE_PASSKEY for passkey authentication)." + }, + "id": { "type": "string", - "description": "Unique identifier for a given Organization." + "x-nullable": true, + "description": "Optional specific authenticator ID required (e.g., UUID of a passkey authenticator). If not provided, any authenticator of the specified type can be used." } }, - "required": [ - "organizationId" + "required": ["type"] + }, + "AuthenticationType": { + "type": "string", + "enum": [ + "AUTHENTICATION_TYPE_EMAIL_OTP", + "AUTHENTICATION_TYPE_SMS_OTP", + "AUTHENTICATION_TYPE_PASSKEY", + "AUTHENTICATION_TYPE_API_KEY", + "AUTHENTICATION_TYPE_OAUTH", + "AUTHENTICATION_TYPE_SESSION" ] }, - "CreatePoliciesIntent": { + "Authenticator": { "type": "object", "properties": { - "policies": { + "transports": { "type": "array", "items": { - "type": "object", - "$ref": "#/definitions/CreatePolicyIntentV3" + "$ref": "#/definitions/AuthenticatorTransport" }, - "description": "An array of policy intents to be created." - } - }, - "required": [ - "policies" - ] - }, - "CreatePoliciesRequest": { - "type": "object", - "properties": { - "type": { + "description": "Types of transports that may be used by an Authenticator (e.g., USB, NFC, BLE)." + }, + "attestationType": { + "type": "string" + }, + "aaguid": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_CREATE_POLICIES" - ] + "description": "Identifier indicating the type of the Security Key." }, - "timestampMs": { + "credentialId": { "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + "description": "Unique identifier for a WebAuthn credential." }, - "organizationId": { + "model": { "type": "string", - "description": "Unique identifier for a given Organization." + "description": "The type of Authenticator device." }, - "parameters": { - "$ref": "#/definitions/CreatePoliciesIntent" + "credential": { + "$ref": "#/definitions/external.data.v1.Credential", + "description": "A User credential that can be used to authenticate to Turnkey." }, - "generateAppProofs": { - "type": "boolean", - "x-nullable": true - } - }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] - }, - "CreatePoliciesResult": { - "type": "object", - "properties": { - "policyIds": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of unique identifiers for the created policies." + "authenticatorId": { + "type": "string", + "description": "Unique identifier for a given Authenticator." + }, + "authenticatorName": { + "type": "string", + "description": "Human-readable name for an Authenticator." + }, + "createdAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" } }, "required": [ - "policyIds" + "transports", + "attestationType", + "aaguid", + "credentialId", + "model", + "credential", + "authenticatorId", + "authenticatorName", + "createdAt", + "updatedAt" ] }, - "CreatePolicyIntent": { + "AuthenticatorAttestationResponse": { "type": "object", "properties": { - "policyName": { - "type": "string", - "description": "Human-readable name for a Policy." + "clientDataJson": { + "type": "string" }, - "selectors": { + "attestationObject": { + "type": "string" + }, + "transports": { "type": "array", "items": { - "type": "object", - "$ref": "#/definitions/Selector" - }, - "description": "A list of simple functions each including a subject, target and boolean. See Policy Engine Language section for additional details." - }, - "effect": { - "$ref": "#/definitions/Effect", - "description": "The instruction to DENY or ALLOW a particular activity following policy selector(s)." + "$ref": "#/definitions/AuthenticatorTransport" + } }, - "notes": { - "type": "string" + "authenticatorAttachment": { + "type": "string", + "enum": ["cross-platform", "platform"], + "x-nullable": true } }, - "required": [ - "policyName", - "selectors", - "effect" - ] + "required": ["clientDataJson", "attestationObject"] }, - "CreatePolicyIntentV2": { + "AuthenticatorParams": { "type": "object", "properties": { - "policyName": { + "authenticatorName": { "type": "string", - "description": "Human-readable name for a Policy." + "description": "Human-readable name for an Authenticator." }, - "selectors": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/SelectorV2" - }, - "description": "A list of simple functions each including a subject, target and boolean. See Policy Engine Language section for additional details." + "userId": { + "type": "string", + "description": "Unique identifier for a given User." }, - "effect": { - "$ref": "#/definitions/Effect", - "description": "Whether to ALLOW or DENY requests that match the condition and consensus requirements." + "attestation": { + "$ref": "#/definitions/PublicKeyCredentialWithAttestation" }, - "notes": { - "type": "string" + "challenge": { + "type": "string", + "description": "Challenge presented for authentication purposes." } }, - "required": [ - "policyName", - "selectors", - "effect" - ] + "required": ["authenticatorName", "userId", "attestation", "challenge"] }, - "CreatePolicyIntentV3": { + "AuthenticatorParamsV2": { "type": "object", "properties": { - "policyName": { - "type": "string", - "description": "Human-readable name for a Policy." - }, - "effect": { - "$ref": "#/definitions/Effect", - "description": "The instruction to DENY or ALLOW an activity." - }, - "condition": { + "authenticatorName": { "type": "string", - "x-nullable": true, - "description": "The condition expression that triggers the Effect" + "description": "Human-readable name for an Authenticator." }, - "consensus": { + "challenge": { "type": "string", - "x-nullable": true, - "description": "The consensus expression that triggers the Effect" + "description": "Challenge presented for authentication purposes." }, - "notes": { - "type": "string", - "description": "Notes for a Policy." + "attestation": { + "$ref": "#/definitions/Attestation", + "description": "The attestation that proves custody of the authenticator and provides metadata about it." } }, - "required": [ - "policyName", - "effect", - "notes" + "required": ["authenticatorName", "challenge", "attestation"] + }, + "AuthenticatorTransport": { + "type": "string", + "enum": [ + "AUTHENTICATOR_TRANSPORT_BLE", + "AUTHENTICATOR_TRANSPORT_INTERNAL", + "AUTHENTICATOR_TRANSPORT_NFC", + "AUTHENTICATOR_TRANSPORT_USB", + "AUTHENTICATOR_TRANSPORT_HYBRID" ] }, - "CreatePolicyRequest": { + "BootProof": { "type": "object", "properties": { - "type": { + "ephemeralPublicKeyHex": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_CREATE_POLICY_V3" - ] + "description": "The hex encoded Ephemeral Public Key." }, - "timestampMs": { + "awsAttestationDocB64": { "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + "description": "The DER encoded COSE Sign1 struct Attestation doc." }, - "organizationId": { + "qosManifestB64": { "type": "string", - "description": "Unique identifier for a given Organization." + "description": "The base64 encoded QOS manifest. Encoding depends on qos_manifest_version." }, - "parameters": { - "$ref": "#/definitions/CreatePolicyIntentV3" + "qosManifestEnvelopeB64": { + "type": "string", + "description": "The base64 encoded QOS manifest envelope. Encoding depends on qos_manifest_version." }, - "generateAppProofs": { - "type": "boolean", - "x-nullable": true - } - }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] - }, - "CreatePolicyResult": { - "type": "object", - "properties": { - "policyId": { + "deploymentLabel": { "type": "string", - "description": "Unique identifier for a given Policy." + "description": "The label under which the enclave app was deployed." + }, + "enclaveApp": { + "type": "string", + "description": "Name of the enclave app" + }, + "owner": { + "type": "string", + "description": "Owner of the app i.e. 'tkhq'" + }, + "createdAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + }, + "qosManifestVersion": { + "type": "string", + "x-nullable": true, + "description": "QOS manifest schema version." } }, "required": [ - "policyId" + "ephemeralPublicKeyHex", + "awsAttestationDocB64", + "qosManifestB64", + "qosManifestEnvelopeB64", + "deploymentLabel", + "enclaveApp", + "owner", + "createdAt" ] }, - "CreatePrivateKeyTagIntent": { + "BootProofResponse": { "type": "object", "properties": { - "privateKeyTagName": { - "type": "string", - "description": "Human-readable name for a Private Key Tag." - }, - "privateKeyIds": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of Private Key IDs." + "bootProof": { + "$ref": "#/definitions/BootProof" } }, - "required": [ - "privateKeyTagName", - "privateKeyIds" - ] + "required": ["bootProof"] }, - "CreatePrivateKeyTagRequest": { + "ClientSignature": { "type": "object", "properties": { - "type": { + "publicKey": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_CREATE_PRIVATE_KEY_TAG" - ] + "description": "The public component of a cryptographic key pair used to create the signature." }, - "timestampMs": { - "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + "scheme": { + "$ref": "#/definitions/ClientSignatureScheme", + "description": "The signature scheme used to generate the client signature." }, - "organizationId": { + "message": { "type": "string", - "description": "Unique identifier for a given Organization." - }, - "parameters": { - "$ref": "#/definitions/CreatePrivateKeyTagIntent" + "description": "The message that was signed." }, - "generateAppProofs": { - "type": "boolean", - "x-nullable": true + "signature": { + "type": "string", + "description": "The cryptographic signature over the message." } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["publicKey", "scheme", "message", "signature"] }, - "CreatePrivateKeyTagResult": { + "ClientSignatureScheme": { + "type": "string", + "enum": ["CLIENT_SIGNATURE_SCHEME_API_P256"] + }, + "Config": { "type": "object", "properties": { - "privateKeyTagId": { - "type": "string", - "description": "Unique identifier for a given Private Key Tag." - }, - "privateKeyIds": { + "features": { "type": "array", "items": { - "type": "string" - }, - "description": "A list of Private Key IDs." + "type": "object", + "$ref": "#/definitions/Feature" + } + }, + "quorum": { + "$ref": "#/definitions/external.data.v1.Quorum" } - }, - "required": [ - "privateKeyTagId", - "privateKeyIds" - ] + } }, - "CreatePrivateKeysIntent": { + "CreateApiKeysIntent": { "type": "object", "properties": { - "privateKeys": { + "apiKeys": { "type": "array", "items": { "type": "object", - "$ref": "#/definitions/PrivateKeyParams" + "$ref": "#/definitions/ApiKeyParams" }, - "description": "A list of Private Keys." + "description": "A list of API Keys." + }, + "userId": { + "type": "string", + "description": "Unique identifier for a given User." } }, - "required": [ - "privateKeys" - ] + "required": ["apiKeys", "userId"] }, - "CreatePrivateKeysIntentV2": { + "CreateApiKeysIntentV2": { "type": "object", "properties": { - "privateKeys": { + "apiKeys": { "type": "array", "items": { "type": "object", - "$ref": "#/definitions/PrivateKeyParams" + "$ref": "#/definitions/ApiKeyParamsV2" }, - "description": "A list of Private Keys." + "description": "A list of API Keys." + }, + "userId": { + "type": "string", + "description": "Unique identifier for a given User." } }, - "required": [ - "privateKeys" - ] + "required": ["apiKeys", "userId"] }, - "CreatePrivateKeysRequest": { + "CreateApiKeysRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_CREATE_PRIVATE_KEYS_V2" - ] + "enum": ["ACTIVITY_TYPE_CREATE_API_KEYS_V2"] }, "timestampMs": { "type": "string", @@ -6607,191 +5192,171 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/definitions/CreatePrivateKeysIntentV2" + "$ref": "#/definitions/CreateApiKeysIntentV2" }, "generateAppProofs": { "type": "boolean", "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "CreatePrivateKeysResult": { + "CreateApiKeysResult": { "type": "object", "properties": { - "privateKeyIds": { + "apiKeyIds": { "type": "array", "items": { "type": "string" }, - "description": "A list of Private Key IDs." + "description": "A list of API Key IDs." } }, - "required": [ - "privateKeyIds" - ] + "required": ["apiKeyIds"] }, - "CreatePrivateKeysResultV2": { + "CreateApiOnlyUsersIntent": { "type": "object", "properties": { - "privateKeys": { + "apiOnlyUsers": { "type": "array", "items": { "type": "object", - "$ref": "#/definitions/PrivateKeyResult" + "$ref": "#/definitions/ApiOnlyUserParams" }, - "description": "A list of Private Key IDs and addresses." + "description": "A list of API-only Users to create." } }, - "required": [ - "privateKeys" - ] - }, - "CreateReadOnlySessionIntent": { - "type": "object" + "required": ["apiOnlyUsers"] }, - "CreateReadOnlySessionRequest": { + "CreateApiOnlyUsersResult": { "type": "object", "properties": { - "type": { - "type": "string", - "enum": [ - "ACTIVITY_TYPE_CREATE_READ_ONLY_SESSION" - ] - }, - "timestampMs": { - "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." - }, - "organizationId": { - "type": "string", - "description": "Unique identifier for a given Organization." - }, - "parameters": { - "$ref": "#/definitions/CreateReadOnlySessionIntent" - }, - "generateAppProofs": { - "type": "boolean", - "x-nullable": true + "userIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of API-only User IDs." } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["userIds"] }, - "CreateReadOnlySessionResult": { + "CreateAuthenticatorsIntent": { "type": "object", "properties": { - "organizationId": { - "type": "string", - "description": "Unique identifier for a given Organization. If the request is being made by a user and their Sub-Organization ID is unknown, this can be the Parent Organization ID. However, using the Sub-Organization ID is preferred due to performance reasons." - }, - "organizationName": { - "type": "string", - "description": "Human-readable name for an Organization." + "authenticators": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/AuthenticatorParams" + }, + "description": "A list of Authenticators." }, "userId": { "type": "string", "description": "Unique identifier for a given User." + } + }, + "required": ["authenticators", "userId"] + }, + "CreateAuthenticatorsIntentV2": { + "type": "object", + "properties": { + "authenticators": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/AuthenticatorParamsV2" + }, + "description": "A list of Authenticators." }, - "username": { - "type": "string", - "description": "Human-readable name for a User." - }, - "session": { - "type": "string", - "description": "String representing a read only session" - }, - "sessionExpiry": { + "userId": { "type": "string", - "format": "uint64", - "description": "UTC timestamp in seconds representing the expiry time for the read only session." + "description": "Unique identifier for a given User." } }, - "required": [ - "organizationId", - "organizationName", - "userId", - "username", - "session", - "sessionExpiry" - ] + "required": ["authenticators", "userId"] }, - "CreateReadWriteSessionIntent": { + "CreateAuthenticatorsRequest": { "type": "object", "properties": { - "targetPublicKey": { + "type": { "type": "string", - "description": "Client-side public key generated by the user, to which the read write session bundle (credentials) will be encrypted." + "enum": ["ACTIVITY_TYPE_CREATE_AUTHENTICATORS_V2"] }, - "email": { + "timestampMs": { "type": "string", - "description": "Email of the user to create a read write session for" + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, - "apiKeyName": { + "organizationId": { "type": "string", - "x-nullable": true, - "description": "Optional human-readable name for an API Key. If none provided, default to Read Write Session - " + "description": "Unique identifier for a given Organization." }, - "expirationSeconds": { - "type": "string", - "x-nullable": true, - "description": "Expiration window (in seconds) indicating how long the API key is valid for. If not provided, a default of 15 minutes will be used." + "parameters": { + "$ref": "#/definitions/CreateAuthenticatorsIntentV2" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true } }, - "required": [ - "targetPublicKey", - "email" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "CreateReadWriteSessionIntentV2": { + "CreateAuthenticatorsResult": { "type": "object", "properties": { - "targetPublicKey": { - "type": "string", - "description": "Client-side public key generated by the user, to which the read write session bundle (credentials) will be encrypted." + "authenticatorIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of Authenticator IDs." + } + }, + "required": ["authenticatorIds"] + }, + "CreateFiatOnRampCredentialIntent": { + "type": "object", + "properties": { + "onrampProvider": { + "$ref": "#/definitions/FiatOnRampProvider", + "description": "The fiat on-ramp provider" }, - "userId": { + "projectId": { "type": "string", "x-nullable": true, - "description": "Optional unique identifier for a given User. If none provided, the read write session will be created for the user who is making the request." + "description": "Project ID for the on-ramp provider. Some providers, like Coinbase, require this additional identifier" }, - "apiKeyName": { + "publishableApiKey": { "type": "string", - "x-nullable": true, - "description": "Optional human-readable name for an API Key. If none provided, default to Read Write Session - " + "description": "Publishable API key for the on-ramp provider" }, - "expirationSeconds": { + "encryptedSecretApiKey": { + "type": "string", + "description": "Secret API key for the on-ramp provider encrypted to our on-ramp encryption public key" + }, + "encryptedPrivateApiKey": { "type": "string", "x-nullable": true, - "description": "Expiration window (in seconds) indicating how long the API key is valid for. If not provided, a default of 15 minutes will be used." + "description": "Private API key for the on-ramp provider encrypted to our on-ramp encryption public key. Some providers, like Coinbase, require this additional key." }, - "invalidateExisting": { + "sandboxMode": { "type": "boolean", - "x-nullable": true, - "description": "Invalidate all other previously generated ReadWriteSession API keys" + "description": "If the on-ramp credential is a sandbox credential" } }, "required": [ - "targetPublicKey" + "onrampProvider", + "publishableApiKey", + "encryptedSecretApiKey" ] }, - "CreateReadWriteSessionRequest": { + "CreateFiatOnRampCredentialRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_CREATE_READ_WRITE_SESSION_V2" - ] + "enum": ["ACTIVITY_TYPE_CREATE_FIAT_ON_RAMP_CREDENTIAL"] }, "timestampMs": { "type": "string", @@ -6802,129 +5367,125 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/definitions/CreateReadWriteSessionIntentV2" + "$ref": "#/definitions/CreateFiatOnRampCredentialIntent" }, "generateAppProofs": { "type": "boolean", "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "CreateReadWriteSessionResult": { + "CreateFiatOnRampCredentialResult": { "type": "object", "properties": { - "organizationId": { - "type": "string", - "description": "Unique identifier for a given Organization. If the request is being made by a user and their Sub-Organization ID is unknown, this can be the Parent Organization ID. However, using the Sub-Organization ID is preferred due to performance reasons." - }, - "organizationName": { - "type": "string", - "description": "Human-readable name for an Organization." - }, - "userId": { - "type": "string", - "description": "Unique identifier for a given User." - }, - "username": { - "type": "string", - "description": "Human-readable name for a User." - }, - "apiKeyId": { - "type": "string", - "description": "Unique identifier for the created API key." - }, - "credentialBundle": { + "fiatOnRampCredentialId": { "type": "string", - "description": "HPKE encrypted credential bundle" + "description": "Unique identifier of the Fiat On-Ramp credential that was created" } }, - "required": [ - "organizationId", - "organizationName", - "userId", - "username", - "apiKeyId", - "credentialBundle" - ] + "required": ["fiatOnRampCredentialId"] }, - "CreateReadWriteSessionResultV2": { + "CreateInvitationsIntent": { "type": "object", "properties": { - "organizationId": { - "type": "string", - "description": "Unique identifier for a given Organization. If the request is being made by a user and their Sub-Organization ID is unknown, this can be the Parent Organization ID. However, using the Sub-Organization ID is preferred due to performance reasons." - }, - "organizationName": { + "invitations": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/InvitationParams" + }, + "description": "A list of Invitations." + } + }, + "required": ["invitations"] + }, + "CreateInvitationsRequest": { + "type": "object", + "properties": { + "type": { "type": "string", - "description": "Human-readable name for an Organization." + "enum": ["ACTIVITY_TYPE_CREATE_INVITATIONS"] }, - "userId": { + "timestampMs": { "type": "string", - "description": "Unique identifier for a given User." + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, - "username": { + "organizationId": { "type": "string", - "description": "Human-readable name for a User." + "description": "Unique identifier for a given Organization." }, - "apiKeyId": { - "type": "string", - "description": "Unique identifier for the created API key." + "parameters": { + "$ref": "#/definitions/CreateInvitationsIntent" }, - "credentialBundle": { - "type": "string", - "description": "HPKE encrypted credential bundle" + "generateAppProofs": { + "type": "boolean", + "x-nullable": true } }, - "required": [ - "organizationId", - "organizationName", - "userId", - "username", - "apiKeyId", - "credentialBundle" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "CreateSessionProfileIntent": { + "CreateInvitationsResult": { "type": "object", "properties": { - "sessionProfileName": { + "invitationIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of Invitation IDs" + } + }, + "required": ["invitationIds"] + }, + "CreateMfaPolicyIntent": { + "type": "object", + "properties": { + "userId": { "type": "string", - "description": "Human-readable name for a Session Profile." + "description": "The ID of the User to add the MFA Policy to." }, - "scope": { + "mfaPolicyName": { "type": "string", - "description": "The scope string that defines the permissions for this Session Profile." + "description": "Human-readable name for a Policy." }, - "expirationSeconds": { + "condition": { "type": "string", - "x-nullable": true, - "description": "The duration in seconds for which sessions created with this Session Profile are valid. If not set, expiration will be determined by the value passed in to the intent of login activities." + "description": "A condition expression that evaluates to true or false, determining when this MFA policy applies." + }, + "requiredAuthenticationMethods": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/RequiredAuthenticationMethodParams" + }, + "description": "An ordered list of authentication requirements. Each requirement must be satisfied sequentially to complete MFA." + }, + "order": { + "type": "integer", + "format": "int64", + "description": "The order in which this MFA policy is evaluated, starting from 0, relative to other MFA policies. Lower order values are evaluated first." }, "notes": { "type": "string", "x-nullable": true, - "description": "Notes for a Session Profile." + "description": "Notes for an MFA Policy." } }, "required": [ - "sessionProfileName", - "scope" + "userId", + "mfaPolicyName", + "condition", + "requiredAuthenticationMethods", + "order" ] }, - "CreateSessionProfileRequest": { + "CreateMfaPolicyRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_CREATE_SESSION_PROFILE" - ] + "enum": ["ACTIVITY_TYPE_CREATE_MFA_POLICY"] }, "timestampMs": { "type": "string", @@ -6935,66 +5496,45 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/definitions/CreateSessionProfileIntent" + "$ref": "#/definitions/CreateMfaPolicyIntent" } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "CreateSessionProfileResult": { + "CreateMfaPolicyResult": { "type": "object", "properties": { - "sessionProfileId": { + "mfaPolicyId": { "type": "string", - "description": "Unique identifier for a given Session Profile." + "description": "Unique identifier for a given MFA Policy." } }, - "required": [ - "sessionProfileId" - ] - }, - "CreateSmartContractInterfaceIntent": { - "type": "object", - "properties": { - "smartContractAddress": { - "type": "string", - "description": "Corresponding contract address or program ID" - }, - "smartContractInterface": { - "type": "string", - "description": "ABI/IDL as a JSON string. Limited to 400kb" - }, - "type": { - "$ref": "#/definitions/SmartContractInterfaceType" + "required": ["mfaPolicyId"] + }, + "CreateOauth2CredentialIntent": { + "type": "object", + "properties": { + "provider": { + "$ref": "#/definitions/Oauth2Provider", + "description": "The OAuth 2.0 provider" }, - "label": { + "clientId": { "type": "string", - "description": "Human-readable name for a Smart Contract Interface." + "description": "The Client ID issued by the OAuth 2.0 provider" }, - "notes": { + "encryptedClientSecret": { "type": "string", - "description": "Notes for a Smart Contract Interface." + "description": "The client secret issued by the OAuth 2.0 provider encrypted to the TLS Fetcher quorum key" } }, - "required": [ - "smartContractAddress", - "smartContractInterface", - "type", - "label" - ] + "required": ["provider", "clientId", "encryptedClientSecret"] }, - "CreateSmartContractInterfaceRequest": { + "CreateOauth2CredentialRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_CREATE_SMART_CONTRACT_INTERFACE" - ] + "enum": ["ACTIVITY_TYPE_CREATE_OAUTH2_CREDENTIAL"] }, "timestampMs": { "type": "string", @@ -7005,370 +5545,304 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/definitions/CreateSmartContractInterfaceIntent" + "$ref": "#/definitions/CreateOauth2CredentialIntent" }, "generateAppProofs": { "type": "boolean", "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "CreateSmartContractInterfaceResult": { + "CreateOauth2CredentialResult": { "type": "object", "properties": { - "smartContractInterfaceId": { + "oauth2CredentialId": { "type": "string", - "description": "The ID of the created Smart Contract Interface." + "description": "Unique identifier of the OAuth 2.0 credential that was created" } }, - "required": [ - "smartContractInterfaceId" - ] + "required": ["oauth2CredentialId"] }, - "CreateSubOrganizationIntent": { + "CreateOauthProvidersIntent": { "type": "object", "properties": { - "name": { + "userId": { "type": "string", - "description": "Name for this sub-organization" + "description": "The ID of the User to add an Oauth provider to" }, - "rootAuthenticator": { - "$ref": "#/definitions/AuthenticatorParamsV2", - "description": "Root User authenticator for this new sub-organization" + "oauthProviders": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/OauthProviderParams" + }, + "description": "A list of Oauth providers." } }, - "required": [ - "name", - "rootAuthenticator" - ] + "required": ["userId", "oauthProviders"] }, - "CreateSubOrganizationIntentV2": { + "CreateOauthProvidersIntentV2": { "type": "object", "properties": { - "subOrganizationName": { + "userId": { "type": "string", - "description": "Name for this sub-organization" + "description": "The ID of the User to add an Oauth provider to" }, - "rootUsers": { + "oauthProviders": { "type": "array", "items": { "type": "object", - "$ref": "#/definitions/RootUserParams" + "$ref": "#/definitions/OauthProviderParamsV2" }, - "description": "Root users to create within this sub-organization" - }, - "rootQuorumThreshold": { - "type": "integer", - "format": "int32", - "description": "The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users" + "description": "A list of Oauth providers." } }, - "required": [ - "subOrganizationName", - "rootUsers", - "rootQuorumThreshold" - ] + "required": ["userId", "oauthProviders"] }, - "CreateSubOrganizationIntentV3": { + "CreateOauthProvidersRequest": { "type": "object", "properties": { - "subOrganizationName": { + "type": { "type": "string", - "description": "Name for this sub-organization" + "enum": ["ACTIVITY_TYPE_CREATE_OAUTH_PROVIDERS_V2"] }, - "rootUsers": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/RootUserParams" - }, - "description": "Root users to create within this sub-organization" + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, - "rootQuorumThreshold": { - "type": "integer", - "format": "int32", - "description": "The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users" + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." }, - "privateKeys": { + "parameters": { + "$ref": "#/definitions/CreateOauthProvidersIntentV2" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "CreateOauthProvidersResult": { + "type": "object", + "properties": { + "providerIds": { "type": "array", "items": { - "type": "object", - "$ref": "#/definitions/PrivateKeyParams" + "type": "string" }, - "description": "A list of Private Keys." + "description": "A list of unique identifiers for Oauth Providers" } }, - "required": [ - "subOrganizationName", - "rootUsers", - "rootQuorumThreshold", - "privateKeys" - ] + "required": ["providerIds"] }, - "CreateSubOrganizationIntentV4": { + "CreateOauthProvidersResultV2": { "type": "object", "properties": { - "subOrganizationName": { - "type": "string", - "description": "Name for this sub-organization" - }, - "rootUsers": { + "providerIds": { "type": "array", "items": { - "type": "object", - "$ref": "#/definitions/RootUserParams" + "type": "string" }, - "description": "Root users to create within this sub-organization" + "description": "A list of unique identifiers for Oauth Providers" + } + }, + "required": ["providerIds"] + }, + "CreateOrganizationIntent": { + "type": "object", + "properties": { + "organizationName": { + "type": "string", + "description": "Human-readable name for an Organization." }, - "rootQuorumThreshold": { - "type": "integer", - "format": "int32", - "description": "The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users" + "rootEmail": { + "type": "string", + "description": "The root user's email address." }, - "wallet": { - "$ref": "#/definitions/WalletParams", - "x-nullable": true, - "description": "The wallet to create for the sub-organization" + "rootAuthenticator": { + "$ref": "#/definitions/AuthenticatorParams", + "description": "The root user's Authenticator." }, - "disableEmailRecovery": { - "type": "boolean", + "rootUserId": { + "type": "string", "x-nullable": true, - "description": "Disable email recovery for the sub-organization" + "description": "Unique identifier for the root user object." + } + }, + "required": ["organizationName", "rootEmail", "rootAuthenticator"] + }, + "CreateOrganizationIntentV2": { + "type": "object", + "properties": { + "organizationName": { + "type": "string", + "description": "Human-readable name for an Organization." }, - "disableEmailAuth": { - "type": "boolean", + "rootEmail": { + "type": "string", + "description": "The root user's email address." + }, + "rootAuthenticator": { + "$ref": "#/definitions/AuthenticatorParamsV2", + "description": "The root user's Authenticator." + }, + "rootUserId": { + "type": "string", "x-nullable": true, - "description": "Disable email auth for the sub-organization" + "description": "Unique identifier for the root user object." } }, - "required": [ - "subOrganizationName", - "rootUsers", - "rootQuorumThreshold" - ] + "required": ["organizationName", "rootEmail", "rootAuthenticator"] }, - "CreateSubOrganizationIntentV5": { + "CreateOrganizationResult": { "type": "object", "properties": { - "subOrganizationName": { + "organizationId": { "type": "string", - "description": "Name for this sub-organization" - }, - "rootUsers": { + "description": "Unique identifier for a given Organization." + } + }, + "required": ["organizationId"] + }, + "CreatePoliciesIntent": { + "type": "object", + "properties": { + "policies": { "type": "array", "items": { "type": "object", - "$ref": "#/definitions/RootUserParamsV2" + "$ref": "#/definitions/CreatePolicyIntentV3" }, - "description": "Root users to create within this sub-organization" + "description": "An array of policy intents to be created." + } + }, + "required": ["policies"] + }, + "CreatePoliciesRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_CREATE_POLICIES"] }, - "rootQuorumThreshold": { - "type": "integer", - "format": "int32", - "description": "The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users" + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, - "wallet": { - "$ref": "#/definitions/WalletParams", - "x-nullable": true, - "description": "The wallet to create for the sub-organization" + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." }, - "disableEmailRecovery": { - "type": "boolean", - "x-nullable": true, - "description": "Disable email recovery for the sub-organization" + "parameters": { + "$ref": "#/definitions/CreatePoliciesIntent" }, - "disableEmailAuth": { + "generateAppProofs": { "type": "boolean", - "x-nullable": true, - "description": "Disable email auth for the sub-organization" + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "CreatePoliciesResult": { + "type": "object", + "properties": { + "policyIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of unique identifiers for the created policies." } }, - "required": [ - "subOrganizationName", - "rootUsers", - "rootQuorumThreshold" - ] + "required": ["policyIds"] }, - "CreateSubOrganizationIntentV6": { + "CreatePolicyIntent": { "type": "object", "properties": { - "subOrganizationName": { + "policyName": { "type": "string", - "description": "Name for this sub-organization" + "description": "Human-readable name for a Policy." }, - "rootUsers": { + "selectors": { "type": "array", "items": { "type": "object", - "$ref": "#/definitions/RootUserParamsV3" + "$ref": "#/definitions/Selector" }, - "description": "Root users to create within this sub-organization" - }, - "rootQuorumThreshold": { - "type": "integer", - "format": "int32", - "description": "The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users" - }, - "wallet": { - "$ref": "#/definitions/WalletParams", - "x-nullable": true, - "description": "The wallet to create for the sub-organization" + "description": "A list of simple functions each including a subject, target and boolean. See Policy Engine Language section for additional details." }, - "disableEmailRecovery": { - "type": "boolean", - "x-nullable": true, - "description": "Disable email recovery for the sub-organization" + "effect": { + "$ref": "#/definitions/Effect", + "description": "The instruction to DENY or ALLOW a particular activity following policy selector(s)." }, - "disableEmailAuth": { - "type": "boolean", - "x-nullable": true, - "description": "Disable email auth for the sub-organization" + "notes": { + "type": "string" } }, - "required": [ - "subOrganizationName", - "rootUsers", - "rootQuorumThreshold" - ] + "required": ["policyName", "selectors", "effect"] }, - "CreateSubOrganizationIntentV7": { + "CreatePolicyIntentV2": { "type": "object", "properties": { - "subOrganizationName": { + "policyName": { "type": "string", - "description": "Name for this sub-organization" + "description": "Human-readable name for a Policy." }, - "rootUsers": { + "selectors": { "type": "array", "items": { "type": "object", - "$ref": "#/definitions/RootUserParamsV4" + "$ref": "#/definitions/SelectorV2" }, - "description": "Root users to create within this sub-organization" - }, - "rootQuorumThreshold": { - "type": "integer", - "format": "int32", - "description": "The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users" - }, - "wallet": { - "$ref": "#/definitions/WalletParams", - "x-nullable": true, - "description": "The wallet to create for the sub-organization" - }, - "disableEmailRecovery": { - "type": "boolean", - "x-nullable": true, - "description": "Disable email recovery for the sub-organization" - }, - "disableEmailAuth": { - "type": "boolean", - "x-nullable": true, - "description": "Disable email auth for the sub-organization" - }, - "disableSmsAuth": { - "type": "boolean", - "x-nullable": true, - "description": "Disable OTP SMS auth for the sub-organization" - }, - "disableOtpEmailAuth": { - "type": "boolean", - "x-nullable": true, - "description": "Disable OTP email auth for the sub-organization" + "description": "A list of simple functions each including a subject, target and boolean. See Policy Engine Language section for additional details." }, - "verificationToken": { - "type": "string", - "x-nullable": true, - "description": "Signed JWT containing a unique id, expiry, verification type, contact" + "effect": { + "$ref": "#/definitions/Effect", + "description": "Whether to ALLOW or DENY requests that match the condition and consensus requirements." }, - "clientSignature": { - "$ref": "#/definitions/ClientSignature", - "x-nullable": true, - "description": "Optional signature proving authorization for this sub-organization creation. The signature is over the verification token ID and the root user parameters for the root user associated with the verification token. Only required if a public key was provided during the verification step." + "notes": { + "type": "string" } }, - "required": [ - "subOrganizationName", - "rootUsers", - "rootQuorumThreshold" - ] + "required": ["policyName", "selectors", "effect"] }, - "CreateSubOrganizationIntentV8": { + "CreatePolicyIntentV3": { "type": "object", "properties": { - "subOrganizationName": { + "policyName": { "type": "string", - "description": "Name for this sub-organization" - }, - "rootUsers": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/RootUserParamsV5" - }, - "description": "Root users to create within this sub-organization" - }, - "rootQuorumThreshold": { - "type": "integer", - "format": "int32", - "description": "The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users" - }, - "wallet": { - "$ref": "#/definitions/WalletParams", - "x-nullable": true, - "description": "The wallet to create for the sub-organization" - }, - "disableEmailRecovery": { - "type": "boolean", - "x-nullable": true, - "description": "Disable email recovery for the sub-organization" - }, - "disableEmailAuth": { - "type": "boolean", - "x-nullable": true, - "description": "Disable email auth for the sub-organization" + "description": "Human-readable name for a Policy." }, - "disableSmsAuth": { - "type": "boolean", - "x-nullable": true, - "description": "Disable OTP SMS auth for the sub-organization" + "effect": { + "$ref": "#/definitions/Effect", + "description": "The instruction to DENY or ALLOW an activity." }, - "disableOtpEmailAuth": { - "type": "boolean", + "condition": { + "type": "string", "x-nullable": true, - "description": "Disable OTP email auth for the sub-organization" + "description": "The condition expression that triggers the Effect" }, - "verificationToken": { + "consensus": { "type": "string", "x-nullable": true, - "description": "Signed JWT containing a unique id, expiry, verification type, contact" + "description": "The consensus expression that triggers the Effect" }, - "clientSignature": { - "$ref": "#/definitions/ClientSignature", - "x-nullable": true, - "description": "Optional signature proving authorization for this sub-organization creation. The signature is over the verification token ID and the root user parameters for the root user associated with the verification token. Only required if a public key was provided during the verification step." + "notes": { + "type": "string", + "description": "Notes for a Policy." } }, - "required": [ - "subOrganizationName", - "rootUsers", - "rootQuorumThreshold" - ] + "required": ["policyName", "effect", "notes"] }, - "CreateSubOrganizationRequest": { + "CreatePolicyRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V8" - ] + "enum": ["ACTIVITY_TYPE_CREATE_POLICY_V3"] }, "timestampMs": { "type": "string", @@ -7379,223 +5853,173 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/definitions/CreateSubOrganizationIntentV8" + "$ref": "#/definitions/CreatePolicyIntentV3" }, "generateAppProofs": { "type": "boolean", "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "CreateSubOrganizationResult": { + "CreatePolicyResult": { "type": "object", "properties": { - "subOrganizationId": { - "type": "string" - }, - "rootUserIds": { - "type": "array", - "items": { - "type": "string" - } + "policyId": { + "type": "string", + "description": "Unique identifier for a given Policy." } }, - "required": [ - "subOrganizationId" - ] + "required": ["policyId"] }, - "CreateSubOrganizationResultV3": { + "CreatePrivateKeyTagIntent": { "type": "object", "properties": { - "subOrganizationId": { - "type": "string" - }, - "privateKeys": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/PrivateKeyResult" - }, - "description": "A list of Private Key IDs and addresses." + "privateKeyTagName": { + "type": "string", + "description": "Human-readable name for a Private Key Tag." }, - "rootUserIds": { + "privateKeyIds": { "type": "array", "items": { "type": "string" - } + }, + "description": "A list of Private Key IDs." } }, - "required": [ - "subOrganizationId", - "privateKeys" - ] + "required": ["privateKeyTagName", "privateKeyIds"] }, - "CreateSubOrganizationResultV4": { + "CreatePrivateKeyTagRequest": { "type": "object", "properties": { - "subOrganizationId": { - "type": "string" + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_CREATE_PRIVATE_KEY_TAG"] }, - "wallet": { - "$ref": "#/definitions/WalletResult", - "x-nullable": true + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, - "rootUserIds": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "required": [ - "subOrganizationId" - ] - }, - "CreateSubOrganizationResultV5": { - "type": "object", - "properties": { - "subOrganizationId": { - "type": "string" + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." }, - "wallet": { - "$ref": "#/definitions/WalletResult", - "x-nullable": true + "parameters": { + "$ref": "#/definitions/CreatePrivateKeyTagIntent" }, - "rootUserIds": { - "type": "array", - "items": { - "type": "string" - } + "generateAppProofs": { + "type": "boolean", + "x-nullable": true } }, - "required": [ - "subOrganizationId" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "CreateSubOrganizationResultV6": { + "CreatePrivateKeyTagResult": { "type": "object", "properties": { - "subOrganizationId": { - "type": "string" - }, - "wallet": { - "$ref": "#/definitions/WalletResult", - "x-nullable": true + "privateKeyTagId": { + "type": "string", + "description": "Unique identifier for a given Private Key Tag." }, - "rootUserIds": { + "privateKeyIds": { "type": "array", "items": { "type": "string" - } + }, + "description": "A list of Private Key IDs." } }, - "required": [ - "subOrganizationId" - ] + "required": ["privateKeyTagId", "privateKeyIds"] }, - "CreateSubOrganizationResultV7": { + "CreatePrivateKeysIntent": { "type": "object", "properties": { - "subOrganizationId": { - "type": "string" - }, - "wallet": { - "$ref": "#/definitions/WalletResult", - "x-nullable": true - }, - "rootUserIds": { + "privateKeys": { "type": "array", "items": { - "type": "string" - } + "type": "object", + "$ref": "#/definitions/PrivateKeyParams" + }, + "description": "A list of Private Keys." } }, - "required": [ - "subOrganizationId" - ] + "required": ["privateKeys"] }, - "CreateSubOrganizationResultV8": { + "CreatePrivateKeysIntentV2": { "type": "object", "properties": { - "subOrganizationId": { - "type": "string" - }, - "wallet": { - "$ref": "#/definitions/WalletResult", - "x-nullable": true - }, - "rootUserIds": { + "privateKeys": { "type": "array", "items": { - "type": "string" - } + "type": "object", + "$ref": "#/definitions/PrivateKeyParams" + }, + "description": "A list of Private Keys." } }, - "required": [ - "subOrganizationId" - ] + "required": ["privateKeys"] }, - "CreateTvcAppIntent": { + "CreatePrivateKeysRequest": { "type": "object", "properties": { - "name": { - "type": "string", - "description": "The name of the new TVC application" - }, - "quorumPublicKey": { + "type": { "type": "string", - "description": "Quorum public key to use for this application" + "enum": ["ACTIVITY_TYPE_CREATE_PRIVATE_KEYS_V2"] }, - "manifestSetId": { + "timestampMs": { "type": "string", - "x-nullable": true, - "description": "Unique identifier for an existing TVC operator set to use as the Manifest Set for this TVC application. If left empty, a new Manifest Set configuration is required" - }, - "manifestSetParams": { - "$ref": "#/definitions/TvcOperatorSetParams", - "x-nullable": true, - "description": "Configuration to create a new TVC operator set, used as the Manifest Set for this TVC application. If left empty, a Manifest Set ID is required" + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, - "shareSetId": { + "organizationId": { "type": "string", - "x-nullable": true, - "description": "Unique identifier for an existing TVC operator set to use as the Share Set for this TVC application. If left empty, a new Share Set configuration is required" - }, - "shareSetParams": { - "$ref": "#/definitions/TvcOperatorSetParams", - "x-nullable": true, - "description": "Configuration to create a new TVC operator set, used as the Share Set for this TVC application. If left empty, a Share Set ID is required" + "description": "Unique identifier for a given Organization." }, - "enableEgress": { - "type": "boolean", - "x-nullable": true, - "description": "Enables network egress for this TVC app. Default if not provided: false." + "parameters": { + "$ref": "#/definitions/CreatePrivateKeysIntentV2" }, - "enableDebugModeDeployments": { + "generateAppProofs": { "type": "boolean", - "x-nullable": true, - "description": "When true, this app may create deployments in debug-mode. Debug-mode deployments expose logs and emit zero'd attestation PCRs, so remote attestation cannot succeed. Cannot be changed after app creation. Setting this true means the app's quorum key is considered permanently insecure, and a new app with a fresh quorum key must be created. Default if not provided: false." + "x-nullable": true } }, - "required": [ - "name", - "quorumPublicKey" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "CreateTvcAppRequest": { + "CreatePrivateKeysResult": { + "type": "object", + "properties": { + "privateKeyIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of Private Key IDs." + } + }, + "required": ["privateKeyIds"] + }, + "CreatePrivateKeysResultV2": { + "type": "object", + "properties": { + "privateKeys": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/PrivateKeyResult" + }, + "description": "A list of Private Key IDs and addresses." + } + }, + "required": ["privateKeys"] + }, + "CreateReadOnlySessionIntent": { + "type": "object" + }, + "CreateReadOnlySessionRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_CREATE_TVC_APP" - ] + "enum": ["ACTIVITY_TYPE_CREATE_READ_ONLY_SESSION"] }, "timestampMs": { "type": "string", @@ -7606,134 +6030,113 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/definitions/CreateTvcAppIntent" + "$ref": "#/definitions/CreateReadOnlySessionIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "CreateTvcAppResult": { + "CreateReadOnlySessionResult": { "type": "object", "properties": { - "appId": { + "organizationId": { "type": "string", - "description": "The unique identifier for the TVC application" + "description": "Unique identifier for a given Organization. If the request is being made by a user and their Sub-Organization ID is unknown, this can be the Parent Organization ID. However, using the Sub-Organization ID is preferred due to performance reasons." }, - "manifestSetId": { + "organizationName": { "type": "string", - "description": "The unique identifier for the TVC manifest set" + "description": "Human-readable name for an Organization." }, - "manifestSetOperatorIds": { - "type": "array", - "items": { - "type": "string" - }, - "description": "The unique identifier(s) of the manifest set operators" + "userId": { + "type": "string", + "description": "Unique identifier for a given User." }, - "manifestSetThreshold": { - "type": "integer", - "format": "int64", - "description": "The required number of approvals for the manifest set" + "username": { + "type": "string", + "description": "Human-readable name for a User." + }, + "session": { + "type": "string", + "description": "String representing a read only session" + }, + "sessionExpiry": { + "type": "string", + "format": "uint64", + "description": "UTC timestamp in seconds representing the expiry time for the read only session." } }, "required": [ - "appId", - "manifestSetId", - "manifestSetOperatorIds", - "manifestSetThreshold" + "organizationId", + "organizationName", + "userId", + "username", + "session", + "sessionExpiry" ] }, - "CreateTvcDeploymentIntent": { + "CreateReadWriteSessionIntent": { "type": "object", "properties": { - "appId": { - "type": "string", - "description": "The unique identifier of the to-be-deployed TVC application" - }, - "qosVersion": { + "targetPublicKey": { "type": "string", - "description": "The QuorumOS version to use to deploy this application" + "description": "Client-side public key generated by the user, to which the read write session bundle (credentials) will be encrypted." }, - "pivotContainerImageUrl": { + "email": { "type": "string", - "description": "URL of the container containing the pivot binary" + "description": "Email of the user to create a read write session for" }, - "pivotPath": { + "apiKeyName": { "type": "string", - "description": "Location of the binary in the pivot container" - }, - "pivotArgs": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Arguments to pass to the pivot binary at startup. Encoded as a list of strings, for example [\"--foo\", \"bar\"]" + "x-nullable": true, + "description": "Optional human-readable name for an API Key. If none provided, default to Read Write Session - " }, - "expectedPivotDigest": { + "expirationSeconds": { "type": "string", - "description": "Digest of the pivot binary in the pivot container. This value will be inserted in the QOS manifest to ensure application integrity." - }, - "nonce": { - "type": "integer", - "format": "int64", "x-nullable": true, - "description": "Optional nonce to ensure uniqueness of the deployment manifest. If not provided, it defaults to the current Unix timestamp in seconds." + "description": "Expiration window (in seconds) indicating how long the API key is valid for. If not provided, a default of 15 minutes will be used." + } + }, + "required": ["targetPublicKey", "email"] + }, + "CreateReadWriteSessionIntentV2": { + "type": "object", + "properties": { + "targetPublicKey": { + "type": "string", + "description": "Client-side public key generated by the user, to which the read write session bundle (credentials) will be encrypted." }, - "pivotContainerEncryptedPullSecret": { + "userId": { "type": "string", "x-nullable": true, - "description": "Optional encrypted pull secret to authorize Turnkey to pull the pivot container image. If your image is public, leave this empty." + "description": "Optional unique identifier for a given User. If none provided, the read write session will be created for the user who is making the request." }, - "debugMode": { - "type": "boolean", + "apiKeyName": { + "type": "string", "x-nullable": true, - "description": "Optional flag to indicate whether to deploy the TVC app in debug mode, which includes additional logging and debugging tools. Default is false." - }, - "healthCheckType": { - "$ref": "#/definitions/TvcHealthCheckType", - "description": "Health check type (TVC_HEALTH_CHECK_TYPE_HTTP or TVC_HEALTH_CHECK_TYPE_GRPC). HTTP health checks are made with a GET request on /health, and gRPC health checks follow the standard gRPC health checking protocol." - }, - "healthCheckPort": { - "type": "integer", - "format": "int64", - "description": "Port to use for health checks." + "description": "Optional human-readable name for an API Key. If none provided, default to Read Write Session - " }, - "publicIngressPort": { - "type": "integer", - "format": "int64", - "description": "Port to use for public ingress." + "expirationSeconds": { + "type": "string", + "x-nullable": true, + "description": "Expiration window (in seconds) indicating how long the API key is valid for. If not provided, a default of 15 minutes will be used." }, - "replicas": { - "type": "integer", - "format": "int64", + "invalidateExisting": { + "type": "boolean", "x-nullable": true, - "description": "Optional desired replica count for this deployment." + "description": "Invalidate all other previously generated ReadWriteSession API keys" } }, - "required": [ - "appId", - "qosVersion", - "pivotContainerImageUrl", - "pivotPath", - "pivotArgs", - "expectedPivotDigest", - "healthCheckType", - "healthCheckPort", - "publicIngressPort" - ] + "required": ["targetPublicKey"] }, - "CreateTvcDeploymentRequest": { + "CreateReadWriteSessionRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_CREATE_TVC_DEPLOYMENT" - ] + "enum": ["ACTIVITY_TYPE_CREATE_READ_WRITE_SESSION_V2"] }, "timestampMs": { "type": "string", @@ -7744,225 +6147,180 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/definitions/CreateTvcDeploymentIntent" + "$ref": "#/definitions/CreateReadWriteSessionIntentV2" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "CreateTvcDeploymentResult": { + "CreateReadWriteSessionResult": { "type": "object", "properties": { - "deploymentId": { + "organizationId": { "type": "string", - "description": "The unique identifier for the TVC deployment" + "description": "Unique identifier for a given Organization. If the request is being made by a user and their Sub-Organization ID is unknown, this can be the Parent Organization ID. However, using the Sub-Organization ID is preferred due to performance reasons." }, - "manifestId": { + "organizationName": { "type": "string", - "description": "The unique identifier for the TVC manifest" - } - }, - "required": [ - "deploymentId", - "manifestId" - ] - }, - "CreateTvcManifestApprovalsIntent": { - "type": "object", - "properties": { - "manifestId": { + "description": "Human-readable name for an Organization." + }, + "userId": { "type": "string", - "description": "Unique identifier of the TVC deployment to approve" + "description": "Unique identifier for a given User." }, - "approvals": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/TvcManifestApproval" - }, - "description": "List of manifest approvals" + "username": { + "type": "string", + "description": "Human-readable name for a User." + }, + "apiKeyId": { + "type": "string", + "description": "Unique identifier for the created API key." + }, + "credentialBundle": { + "type": "string", + "description": "HPKE encrypted credential bundle" } }, "required": [ - "manifestId", - "approvals" + "organizationId", + "organizationName", + "userId", + "username", + "apiKeyId", + "credentialBundle" ] }, - "CreateTvcManifestApprovalsRequest": { + "CreateReadWriteSessionResultV2": { "type": "object", "properties": { - "type": { + "organizationId": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_CREATE_TVC_MANIFEST_APPROVALS" - ] + "description": "Unique identifier for a given Organization. If the request is being made by a user and their Sub-Organization ID is unknown, this can be the Parent Organization ID. However, using the Sub-Organization ID is preferred due to performance reasons." }, - "timestampMs": { + "organizationName": { "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + "description": "Human-readable name for an Organization." }, - "organizationId": { + "userId": { "type": "string", - "description": "Unique identifier for a given Organization." + "description": "Unique identifier for a given User." }, - "parameters": { - "$ref": "#/definitions/CreateTvcManifestApprovalsIntent" + "username": { + "type": "string", + "description": "Human-readable name for a User." + }, + "apiKeyId": { + "type": "string", + "description": "Unique identifier for the created API key." + }, + "credentialBundle": { + "type": "string", + "description": "HPKE encrypted credential bundle" } }, "required": [ - "type", - "timestampMs", "organizationId", - "parameters" - ] - }, - "CreateTvcManifestApprovalsResult": { - "type": "object", - "properties": { - "approvalIds": { - "type": "array", - "items": { - "type": "string" - }, - "description": "The unique identifier(s) for the manifest approvals" - } - }, - "required": [ - "approvalIds" + "organizationName", + "userId", + "username", + "apiKeyId", + "credentialBundle" ] }, - "CreateTvcOperatorIntent": { + "CreateSessionProfileIntent": { "type": "object", "properties": { - "walletName": { + "sessionProfileName": { "type": "string", - "x-nullable": true, - "description": "Human-readable name for a new wallet created for this TVC operator" + "description": "Human-readable name for a Session Profile." }, - "walletId": { + "scope": { "type": "string", - "x-nullable": true, - "description": "Unique identifier for an existing wallet to reuse for this TVC operator" + "description": "The scope string that defines the permissions for this Session Profile." }, - "path": { + "expirationSeconds": { "type": "string", - "description": "Base derivation path for creating TVC operator wallet accounts" + "x-nullable": true, + "description": "The duration in seconds for which sessions created with this Session Profile are valid. If not set, expiration will be determined by the value passed in to the intent of login activities." }, - "operatorName": { + "notes": { "type": "string", - "description": "Human-readable name for this new TVC operator" + "x-nullable": true, + "description": "Notes for a Session Profile." } }, - "required": [ - "path", - "operatorName" - ] + "required": ["sessionProfileName", "scope"] }, - "CreateTvcOperatorResult": { + "CreateSessionProfileRequest": { "type": "object", "properties": { - "walletId": { + "type": { "type": "string", - "description": "The unique identifier for the wallet containing TVC operator accounts" + "enum": ["ACTIVITY_TYPE_CREATE_SESSION_PROFILE"] }, - "operatorId": { + "timestampMs": { "type": "string", - "description": "The unique identifier for the TVC operator" + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, - "encryptPublicKey": { + "organizationId": { "type": "string", - "description": "Public encryption key for this TVC operator" + "description": "Unique identifier for a given Organization." }, - "signPublicKey": { - "type": "string", - "description": "Public signing key for this TVC operator" + "parameters": { + "$ref": "#/definitions/CreateSessionProfileIntent" } }, - "required": [ - "walletId", - "operatorId", - "encryptPublicKey", - "signPublicKey" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "CreateTvcQuorumKeyIntent": { + "CreateSessionProfileResult": { "type": "object", "properties": { - "threshold": { - "type": "integer", - "format": "int64", - "description": "The threshold of operators needed to reassemble this TVC quorum key" - }, - "operatorEncryptKeys": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Operator public keys used to encrypt and later approve the generated TVC quorum key shares" + "sessionProfileId": { + "type": "string", + "description": "Unique identifier for a given Session Profile." } }, - "required": [ - "threshold", - "operatorEncryptKeys" - ] + "required": ["sessionProfileId"] }, - "CreateTvcQuorumKeyResult": { + "CreateSmartContractInterfaceIntent": { "type": "object", "properties": { - "quorumKeyId": { + "smartContractAddress": { "type": "string", - "description": "The unique identifier for the TVC quorum key" + "description": "Corresponding contract address or program ID" }, - "quorumPublicKey": { + "smartContractInterface": { "type": "string", - "description": "Public key for the generated TVC quorum key" + "description": "ABI/IDL as a JSON string. Limited to 400kb" }, - "shareIds": { - "type": "array", - "items": { - "type": "string" - }, - "description": "The unique identifier(s) for the generated TVC quorum key shares" - } - }, - "required": [ - "quorumKeyId", - "quorumPublicKey", - "shareIds" - ] - }, - "CreateUserTagIntent": { - "type": "object", - "properties": { - "userTagName": { + "type": { + "$ref": "#/definitions/SmartContractInterfaceType" + }, + "label": { "type": "string", - "description": "Human-readable name for a User Tag." + "description": "Human-readable name for a Smart Contract Interface." }, - "userIds": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of User IDs." + "notes": { + "type": "string", + "description": "Notes for a Smart Contract Interface." } }, "required": [ - "userTagName", - "userIds" + "smartContractAddress", + "smartContractInterface", + "type", + "label" ] }, - "CreateUserTagRequest": { + "CreateSmartContractInterfaceRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_CREATE_USER_TAG" - ] + "enum": ["ACTIVITY_TYPE_CREATE_SMART_CONTRACT_INTERFACE"] }, "timestampMs": { "type": "string", @@ -7973,185 +6331,334 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/definitions/CreateUserTagIntent" + "$ref": "#/definitions/CreateSmartContractInterfaceIntent" }, "generateAppProofs": { "type": "boolean", "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "CreateUserTagResult": { + "CreateSmartContractInterfaceResult": { "type": "object", "properties": { - "userTagId": { + "smartContractInterfaceId": { "type": "string", - "description": "Unique identifier for a given User Tag." + "description": "The ID of the created Smart Contract Interface." + } + }, + "required": ["smartContractInterfaceId"] + }, + "CreateSubOrganizationIntent": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name for this sub-organization" }, - "userIds": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of User IDs." + "rootAuthenticator": { + "$ref": "#/definitions/AuthenticatorParamsV2", + "description": "Root User authenticator for this new sub-organization" } }, - "required": [ - "userTagId", - "userIds" - ] + "required": ["name", "rootAuthenticator"] }, - "CreateUsersIntent": { + "CreateSubOrganizationIntentV2": { "type": "object", "properties": { - "users": { + "subOrganizationName": { + "type": "string", + "description": "Name for this sub-organization" + }, + "rootUsers": { "type": "array", "items": { "type": "object", - "$ref": "#/definitions/UserParams" + "$ref": "#/definitions/RootUserParams" }, - "description": "A list of Users." + "description": "Root users to create within this sub-organization" + }, + "rootQuorumThreshold": { + "type": "integer", + "format": "int32", + "description": "The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users" } }, - "required": [ - "users" - ] + "required": ["subOrganizationName", "rootUsers", "rootQuorumThreshold"] }, - "CreateUsersIntentV2": { + "CreateSubOrganizationIntentV3": { "type": "object", "properties": { - "users": { + "subOrganizationName": { + "type": "string", + "description": "Name for this sub-organization" + }, + "rootUsers": { "type": "array", "items": { "type": "object", - "$ref": "#/definitions/UserParamsV2" + "$ref": "#/definitions/RootUserParams" }, - "description": "A list of Users." + "description": "Root users to create within this sub-organization" + }, + "rootQuorumThreshold": { + "type": "integer", + "format": "int32", + "description": "The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users" + }, + "privateKeys": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/PrivateKeyParams" + }, + "description": "A list of Private Keys." } }, "required": [ - "users" + "subOrganizationName", + "rootUsers", + "rootQuorumThreshold", + "privateKeys" ] }, - "CreateUsersIntentV3": { + "CreateSubOrganizationIntentV4": { "type": "object", "properties": { - "users": { + "subOrganizationName": { + "type": "string", + "description": "Name for this sub-organization" + }, + "rootUsers": { "type": "array", "items": { "type": "object", - "$ref": "#/definitions/UserParamsV3" + "$ref": "#/definitions/RootUserParams" }, - "description": "A list of Users." + "description": "Root users to create within this sub-organization" + }, + "rootQuorumThreshold": { + "type": "integer", + "format": "int32", + "description": "The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users" + }, + "wallet": { + "$ref": "#/definitions/WalletParams", + "x-nullable": true, + "description": "The wallet to create for the sub-organization" + }, + "disableEmailRecovery": { + "type": "boolean", + "x-nullable": true, + "description": "Disable email recovery for the sub-organization" + }, + "disableEmailAuth": { + "type": "boolean", + "x-nullable": true, + "description": "Disable email auth for the sub-organization" } }, - "required": [ - "users" - ] + "required": ["subOrganizationName", "rootUsers", "rootQuorumThreshold"] }, - "CreateUsersIntentV4": { + "CreateSubOrganizationIntentV5": { "type": "object", "properties": { - "users": { + "subOrganizationName": { + "type": "string", + "description": "Name for this sub-organization" + }, + "rootUsers": { "type": "array", "items": { "type": "object", - "$ref": "#/definitions/UserParamsV4" + "$ref": "#/definitions/RootUserParamsV2" }, - "description": "A list of Users." + "description": "Root users to create within this sub-organization" + }, + "rootQuorumThreshold": { + "type": "integer", + "format": "int32", + "description": "The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users" + }, + "wallet": { + "$ref": "#/definitions/WalletParams", + "x-nullable": true, + "description": "The wallet to create for the sub-organization" + }, + "disableEmailRecovery": { + "type": "boolean", + "x-nullable": true, + "description": "Disable email recovery for the sub-organization" + }, + "disableEmailAuth": { + "type": "boolean", + "x-nullable": true, + "description": "Disable email auth for the sub-organization" } }, - "required": [ - "users" - ] + "required": ["subOrganizationName", "rootUsers", "rootQuorumThreshold"] }, - "CreateUsersRequest": { + "CreateSubOrganizationIntentV6": { "type": "object", "properties": { - "type": { + "subOrganizationName": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_CREATE_USERS_V4" - ] + "description": "Name for this sub-organization" }, - "timestampMs": { - "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + "rootUsers": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/RootUserParamsV3" + }, + "description": "Root users to create within this sub-organization" }, - "organizationId": { - "type": "string", - "description": "Unique identifier for a given Organization." + "rootQuorumThreshold": { + "type": "integer", + "format": "int32", + "description": "The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users" }, - "parameters": { - "$ref": "#/definitions/CreateUsersIntentV4" + "wallet": { + "$ref": "#/definitions/WalletParams", + "x-nullable": true, + "description": "The wallet to create for the sub-organization" }, - "generateAppProofs": { + "disableEmailRecovery": { "type": "boolean", - "x-nullable": true + "x-nullable": true, + "description": "Disable email recovery for the sub-organization" + }, + "disableEmailAuth": { + "type": "boolean", + "x-nullable": true, + "description": "Disable email auth for the sub-organization" } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["subOrganizationName", "rootUsers", "rootQuorumThreshold"] }, - "CreateUsersResult": { + "CreateSubOrganizationIntentV7": { "type": "object", "properties": { - "userIds": { + "subOrganizationName": { + "type": "string", + "description": "Name for this sub-organization" + }, + "rootUsers": { "type": "array", "items": { - "type": "string" + "type": "object", + "$ref": "#/definitions/RootUserParamsV4" }, - "description": "A list of User IDs." + "description": "Root users to create within this sub-organization" + }, + "rootQuorumThreshold": { + "type": "integer", + "format": "int32", + "description": "The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users" + }, + "wallet": { + "$ref": "#/definitions/WalletParams", + "x-nullable": true, + "description": "The wallet to create for the sub-organization" + }, + "disableEmailRecovery": { + "type": "boolean", + "x-nullable": true, + "description": "Disable email recovery for the sub-organization" + }, + "disableEmailAuth": { + "type": "boolean", + "x-nullable": true, + "description": "Disable email auth for the sub-organization" + }, + "disableSmsAuth": { + "type": "boolean", + "x-nullable": true, + "description": "Disable OTP SMS auth for the sub-organization" + }, + "disableOtpEmailAuth": { + "type": "boolean", + "x-nullable": true, + "description": "Disable OTP email auth for the sub-organization" + }, + "verificationToken": { + "type": "string", + "x-nullable": true, + "description": "Signed JWT containing a unique id, expiry, verification type, contact" + }, + "clientSignature": { + "$ref": "#/definitions/ClientSignature", + "x-nullable": true, + "description": "Optional signature proving authorization for this sub-organization creation. The signature is over the verification token ID and the root user parameters for the root user associated with the verification token. Only required if a public key was provided during the verification step." } }, - "required": [ - "userIds" - ] + "required": ["subOrganizationName", "rootUsers", "rootQuorumThreshold"] }, - "CreateWalletAccountsIntent": { + "CreateSubOrganizationIntentV8": { "type": "object", "properties": { - "walletId": { + "subOrganizationName": { "type": "string", - "description": "Unique identifier for a given Wallet." + "description": "Name for this sub-organization" }, - "accounts": { + "rootUsers": { "type": "array", "items": { "type": "object", - "$ref": "#/definitions/WalletAccountParams" + "$ref": "#/definitions/RootUserParamsV5" }, - "description": "A list of wallet Accounts." + "description": "Root users to create within this sub-organization" }, - "persist": { + "rootQuorumThreshold": { + "type": "integer", + "format": "int32", + "description": "The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users" + }, + "wallet": { + "$ref": "#/definitions/WalletParams", + "x-nullable": true, + "description": "The wallet to create for the sub-organization" + }, + "disableEmailRecovery": { + "type": "boolean", + "x-nullable": true, + "description": "Disable email recovery for the sub-organization" + }, + "disableEmailAuth": { + "type": "boolean", + "x-nullable": true, + "description": "Disable email auth for the sub-organization" + }, + "disableSmsAuth": { + "type": "boolean", + "x-nullable": true, + "description": "Disable OTP SMS auth for the sub-organization" + }, + "disableOtpEmailAuth": { "type": "boolean", "x-nullable": true, - "description": "Indicates if the wallet accounts should be persisted. This is helpful if you'd like to see the addresses of different derivation paths without actually creating the accounts. Defaults to true." + "description": "Disable OTP email auth for the sub-organization" + }, + "verificationToken": { + "type": "string", + "x-nullable": true, + "description": "Signed JWT containing a unique id, expiry, verification type, contact" + }, + "clientSignature": { + "$ref": "#/definitions/ClientSignature", + "x-nullable": true, + "description": "Optional signature proving authorization for this sub-organization creation. The signature is over the verification token ID and the root user parameters for the root user associated with the verification token. Only required if a public key was provided during the verification step." } }, - "required": [ - "walletId", - "accounts" - ] + "required": ["subOrganizationName", "rootUsers", "rootQuorumThreshold"] }, - "CreateWalletAccountsRequest": { + "CreateSubOrganizationRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_CREATE_WALLET_ACCOUNTS" - ] + "enum": ["ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V8"] }, "timestampMs": { "type": "string", @@ -8162,265 +6669,198 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/definitions/CreateWalletAccountsIntent" + "$ref": "#/definitions/CreateSubOrganizationIntentV8" }, "generateAppProofs": { "type": "boolean", "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "CreateWalletAccountsResult": { + "CreateSubOrganizationResult": { "type": "object", "properties": { - "addresses": { + "subOrganizationId": { + "type": "string" + }, + "rootUserIds": { "type": "array", "items": { "type": "string" - }, - "description": "A list of derived addresses." + } } }, - "required": [ - "addresses" - ] + "required": ["subOrganizationId"] }, - "CreateWalletIntent": { + "CreateSubOrganizationResultV3": { "type": "object", "properties": { - "walletName": { - "type": "string", - "description": "Human-readable name for a Wallet." + "subOrganizationId": { + "type": "string" }, - "accounts": { + "privateKeys": { "type": "array", "items": { "type": "object", - "$ref": "#/definitions/WalletAccountParams" + "$ref": "#/definitions/PrivateKeyResult" }, - "description": "A list of wallet Accounts. This field, if not needed, should be an empty array in your request body." + "description": "A list of Private Key IDs and addresses." }, - "mnemonicLength": { - "type": "integer", - "format": "int32", - "x-nullable": true, - "description": "Length of mnemonic to generate the Wallet seed. Defaults to 12. Accepted values: 12, 15, 18, 21, 24." + "rootUserIds": { + "type": "array", + "items": { + "type": "string" + } } }, - "required": [ - "walletName", - "accounts" - ] + "required": ["subOrganizationId", "privateKeys"] }, - "CreateWalletRequest": { + "CreateSubOrganizationResultV4": { "type": "object", "properties": { - "type": { - "type": "string", - "enum": [ - "ACTIVITY_TYPE_CREATE_WALLET" - ] - }, - "timestampMs": { - "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." - }, - "organizationId": { - "type": "string", - "description": "Unique identifier for a given Organization." - }, - "parameters": { - "$ref": "#/definitions/CreateWalletIntent" + "subOrganizationId": { + "type": "string" }, - "generateAppProofs": { - "type": "boolean", + "wallet": { + "$ref": "#/definitions/WalletResult", "x-nullable": true - } - }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] - }, - "CreateWalletResult": { - "type": "object", - "properties": { - "walletId": { - "type": "string", - "description": "Unique identifier for a Wallet." }, - "addresses": { + "rootUserIds": { "type": "array", "items": { "type": "string" - }, - "description": "A list of account addresses." + } } }, - "required": [ - "walletId", - "addresses" - ] + "required": ["subOrganizationId"] }, - "CreateWebhookEndpointIntent": { + "CreateSubOrganizationResultV5": { "type": "object", "properties": { - "url": { - "type": "string", - "description": "The destination URL for webhook delivery." + "subOrganizationId": { + "type": "string" }, - "name": { - "type": "string", - "description": "Human-readable name for this webhook endpoint." + "wallet": { + "$ref": "#/definitions/WalletResult", + "x-nullable": true }, - "subscriptions": { + "rootUserIds": { "type": "array", "items": { - "type": "object", - "$ref": "#/definitions/WebhookSubscriptionParams" - }, - "description": "Event subscriptions to create for this endpoint." + "type": "string" + } } }, - "required": [ - "url", - "name" - ] + "required": ["subOrganizationId"] }, - "CreateWebhookEndpointRequest": { + "CreateSubOrganizationResultV6": { "type": "object", "properties": { - "type": { - "type": "string", - "enum": [ - "ACTIVITY_TYPE_CREATE_WEBHOOK_ENDPOINT" - ] - }, - "timestampMs": { - "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." - }, - "organizationId": { - "type": "string", - "description": "Unique identifier for a given Organization." - }, - "parameters": { - "$ref": "#/definitions/CreateWebhookEndpointIntent" + "subOrganizationId": { + "type": "string" }, - "generateAppProofs": { - "type": "boolean", + "wallet": { + "$ref": "#/definitions/WalletResult", "x-nullable": true + }, + "rootUserIds": { + "type": "array", + "items": { + "type": "string" + } } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["subOrganizationId"] }, - "CreateWebhookEndpointResult": { + "CreateSubOrganizationResultV7": { "type": "object", "properties": { - "endpointId": { - "type": "string", - "description": "Unique identifier of the created webhook endpoint." + "subOrganizationId": { + "type": "string" }, - "webhookEndpoint": { - "$ref": "#/definitions/WebhookEndpointData", - "description": "The created webhook endpoint data." + "wallet": { + "$ref": "#/definitions/WalletResult", + "x-nullable": true + }, + "rootUserIds": { + "type": "array", + "items": { + "type": "string" + } } }, - "required": [ - "endpointId", - "webhookEndpoint" - ] + "required": ["subOrganizationId"] }, - "CredPropsAuthenticationExtensionsClientOutputs": { + "CreateSubOrganizationResultV8": { "type": "object", "properties": { - "rk": { - "type": "boolean" + "subOrganizationId": { + "type": "string" + }, + "wallet": { + "$ref": "#/definitions/WalletResult", + "x-nullable": true + }, + "rootUserIds": { + "type": "array", + "items": { + "type": "string" + } } }, - "required": [ - "rk" - ] - }, - "CredentialType": { - "type": "string", - "enum": [ - "CREDENTIAL_TYPE_WEBAUTHN_AUTHENTICATOR", - "CREDENTIAL_TYPE_API_KEY_P256", - "CREDENTIAL_TYPE_RECOVER_USER_KEY_P256", - "CREDENTIAL_TYPE_API_KEY_SECP256K1", - "CREDENTIAL_TYPE_EMAIL_AUTH_KEY_P256", - "CREDENTIAL_TYPE_API_KEY_ED25519", - "CREDENTIAL_TYPE_OTP_AUTH_KEY_P256", - "CREDENTIAL_TYPE_READ_WRITE_SESSION_KEY_P256", - "CREDENTIAL_TYPE_OAUTH_KEY_P256", - "CREDENTIAL_TYPE_LOGIN" - ] - }, - "Curve": { - "type": "string", - "enum": [ - "CURVE_SECP256K1", - "CURVE_ED25519", - "CURVE_P256" - ] + "required": ["subOrganizationId"] }, - "CustomRevertError": { + "CreateTvcAppIntent": { "type": "object", "properties": { - "errorName": { + "name": { "type": "string", - "x-nullable": true, - "description": "The name of the custom error." + "description": "The name of the new TVC application" }, - "paramsJson": { + "quorumPublicKey": { + "type": "string", + "description": "Quorum public key to use for this application" + }, + "manifestSetId": { "type": "string", "x-nullable": true, - "description": "The decoded parameters as a JSON object." - } - } - }, - "DeleteApiKeysIntent": { - "type": "object", - "properties": { - "userId": { + "description": "Unique identifier for an existing TVC operator set to use as the Manifest Set for this TVC application. If left empty, a new Manifest Set configuration is required" + }, + "manifestSetParams": { + "$ref": "#/definitions/TvcOperatorSetParams", + "x-nullable": true, + "description": "Configuration to create a new TVC operator set, used as the Manifest Set for this TVC application. If left empty, a Manifest Set ID is required" + }, + "shareSetId": { "type": "string", - "description": "Unique identifier for a given User." + "x-nullable": true, + "description": "Unique identifier for an existing TVC operator set to use as the Share Set for this TVC application. If left empty, a new Share Set configuration is required" }, - "apiKeyIds": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of API Key IDs." + "shareSetParams": { + "$ref": "#/definitions/TvcOperatorSetParams", + "x-nullable": true, + "description": "Configuration to create a new TVC operator set, used as the Share Set for this TVC application. If left empty, a Share Set ID is required" + }, + "enableEgress": { + "type": "boolean", + "x-nullable": true, + "description": "Enables network egress for this TVC app. Default if not provided: false." + }, + "enableDebugModeDeployments": { + "type": "boolean", + "x-nullable": true, + "description": "When true, this app may create deployments in debug-mode. Debug-mode deployments expose logs and emit zero'd attestation PCRs, so remote attestation cannot succeed. Cannot be changed after app creation. Setting this true means the app's quorum key is considered permanently insecure, and a new app with a fresh quorum key must be created. Default if not provided: false." } }, - "required": [ - "userId", - "apiKeyIds" - ] + "required": ["name", "quorumPublicKey"] }, - "DeleteApiKeysRequest": { + "CreateTvcAppRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_DELETE_API_KEYS" - ] + "enum": ["ACTIVITY_TYPE_CREATE_TVC_APP"] }, "timestampMs": { "type": "string", @@ -8431,63 +6871,121 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/definitions/DeleteApiKeysIntent" - }, - "generateAppProofs": { - "type": "boolean", - "x-nullable": true + "$ref": "#/definitions/CreateTvcAppIntent" } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "DeleteApiKeysResult": { + "CreateTvcAppResult": { "type": "object", "properties": { - "apiKeyIds": { + "appId": { + "type": "string", + "description": "The unique identifier for the TVC application" + }, + "manifestSetId": { + "type": "string", + "description": "The unique identifier for the TVC manifest set" + }, + "manifestSetOperatorIds": { "type": "array", "items": { "type": "string" }, - "description": "A list of API Key IDs." + "description": "The unique identifier(s) of the manifest set operators" + }, + "manifestSetThreshold": { + "type": "integer", + "format": "int64", + "description": "The required number of approvals for the manifest set" } }, "required": [ - "apiKeyIds" + "appId", + "manifestSetId", + "manifestSetOperatorIds", + "manifestSetThreshold" ] }, - "DeleteAuthenticatorsIntent": { + "CreateTvcDeploymentIntent": { "type": "object", "properties": { - "userId": { + "appId": { "type": "string", - "description": "Unique identifier for a given User." + "description": "The unique identifier of the to-be-deployed TVC application" }, - "authenticatorIds": { + "qosVersion": { + "type": "string", + "description": "The QuorumOS version to use to deploy this application" + }, + "pivotContainerImageUrl": { + "type": "string", + "description": "URL of the container containing the pivot binary" + }, + "pivotPath": { + "type": "string", + "description": "Location of the binary in the pivot container" + }, + "pivotArgs": { "type": "array", "items": { "type": "string" }, - "description": "A list of Authenticator IDs." + "description": "Arguments to pass to the pivot binary at startup. Encoded as a list of strings, for example [\"--foo\", \"bar\"]" + }, + "expectedPivotDigest": { + "type": "string", + "description": "Digest of the pivot binary in the pivot container. This value will be inserted in the QOS manifest to ensure application integrity." + }, + "nonce": { + "type": "integer", + "format": "int64", + "x-nullable": true, + "description": "Optional nonce to ensure uniqueness of the deployment manifest. If not provided, it defaults to the current Unix timestamp in seconds." + }, + "pivotContainerEncryptedPullSecret": { + "type": "string", + "x-nullable": true, + "description": "Optional encrypted pull secret to authorize Turnkey to pull the pivot container image. If your image is public, leave this empty." + }, + "debugMode": { + "type": "boolean", + "x-nullable": true, + "description": "Optional flag to indicate whether to deploy the TVC app in debug mode, which includes additional logging and debugging tools. Default is false." + }, + "healthCheckType": { + "$ref": "#/definitions/TvcHealthCheckType", + "description": "Health check type (TVC_HEALTH_CHECK_TYPE_HTTP or TVC_HEALTH_CHECK_TYPE_GRPC). HTTP health checks are made with a GET request on /health, and gRPC health checks follow the standard gRPC health checking protocol." + }, + "healthCheckPort": { + "type": "integer", + "format": "int64", + "description": "Port to use for health checks." + }, + "publicIngressPort": { + "type": "integer", + "format": "int64", + "description": "Port to use for public ingress." } }, "required": [ - "userId", - "authenticatorIds" + "appId", + "qosVersion", + "pivotContainerImageUrl", + "pivotPath", + "pivotArgs", + "expectedPivotDigest", + "healthCheckType", + "healthCheckPort", + "publicIngressPort" ] }, - "DeleteAuthenticatorsRequest": { + "CreateTvcDeploymentRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_DELETE_AUTHENTICATORS" - ] + "enum": ["ACTIVITY_TYPE_CREATE_TVC_DEPLOYMENT"] }, "timestampMs": { "type": "string", @@ -8498,55 +6996,49 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/definitions/DeleteAuthenticatorsIntent" - }, - "generateAppProofs": { - "type": "boolean", - "x-nullable": true + "$ref": "#/definitions/CreateTvcDeploymentIntent" } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "DeleteAuthenticatorsResult": { + "CreateTvcDeploymentResult": { "type": "object", "properties": { - "authenticatorIds": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Unique identifier for a given Authenticator." + "deploymentId": { + "type": "string", + "description": "The unique identifier for the TVC deployment" + }, + "manifestId": { + "type": "string", + "description": "The unique identifier for the TVC manifest" } }, - "required": [ - "authenticatorIds" - ] + "required": ["deploymentId", "manifestId"] }, - "DeleteFiatOnRampCredentialIntent": { + "CreateTvcManifestApprovalsIntent": { "type": "object", "properties": { - "fiatOnrampCredentialId": { + "manifestId": { "type": "string", - "description": "The ID of the fiat on-ramp credential to delete" + "description": "Unique identifier of the TVC deployment to approve" + }, + "approvals": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/TvcManifestApproval" + }, + "description": "List of manifest approvals" } }, - "required": [ - "fiatOnrampCredentialId" - ] + "required": ["manifestId", "approvals"] }, - "DeleteFiatOnRampCredentialRequest": { + "CreateTvcManifestApprovalsRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_DELETE_FIAT_ON_RAMP_CREDENTIAL" - ] + "enum": ["ACTIVITY_TYPE_CREATE_TVC_MANIFEST_APPROVALS"] }, "timestampMs": { "type": "string", @@ -8557,52 +7049,47 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/definitions/DeleteFiatOnRampCredentialIntent" - }, - "generateAppProofs": { - "type": "boolean", - "x-nullable": true + "$ref": "#/definitions/CreateTvcManifestApprovalsIntent" } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "DeleteFiatOnRampCredentialResult": { + "CreateTvcManifestApprovalsResult": { "type": "object", "properties": { - "fiatOnRampCredentialId": { - "type": "string", - "description": "Unique identifier of the Fiat On-Ramp credential that was deleted" + "approvalIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The unique identifier(s) for the manifest approvals" } }, - "required": [ - "fiatOnRampCredentialId" - ] + "required": ["approvalIds"] }, - "DeleteInvitationIntent": { + "CreateUserTagIntent": { "type": "object", "properties": { - "invitationId": { + "userTagName": { "type": "string", - "description": "Unique identifier for a given Invitation object." + "description": "Human-readable name for a User Tag." + }, + "userIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User IDs." } }, - "required": [ - "invitationId" - ] + "required": ["userTagName", "userIds"] }, - "DeleteInvitationRequest": { + "CreateUserTagRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_DELETE_INVITATION" - ] + "enum": ["ACTIVITY_TYPE_CREATE_USER_TAG"] }, "timestampMs": { "type": "string", @@ -8613,109 +7100,94 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/definitions/DeleteInvitationIntent" + "$ref": "#/definitions/CreateUserTagIntent" }, "generateAppProofs": { "type": "boolean", "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] - }, - "DeleteInvitationResult": { - "type": "object", - "properties": { - "invitationId": { - "type": "string", - "description": "Unique identifier for a given Invitation." - } - }, - "required": [ - "invitationId" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "DeleteMfaPolicyIntent": { + "CreateUserTagResult": { "type": "object", "properties": { - "userId": { + "userTagId": { "type": "string", - "description": "The ID of the User to delete the MFA Policy from." + "description": "Unique identifier for a given User Tag." }, - "mfaPolicyId": { - "type": "string", - "description": "Unique identifier for a given MFA Policy." + "userIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User IDs." } }, - "required": [ - "userId", - "mfaPolicyId" - ] + "required": ["userTagId", "userIds"] }, - "DeleteMfaPolicyRequest": { + "CreateUsersIntent": { "type": "object", "properties": { - "type": { - "type": "string", - "enum": [ - "ACTIVITY_TYPE_DELETE_MFA_POLICY" - ] - }, - "timestampMs": { - "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." - }, - "organizationId": { - "type": "string", - "description": "Unique identifier for a given Organization." - }, - "parameters": { - "$ref": "#/definitions/DeleteMfaPolicyIntent" + "users": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/UserParams" + }, + "description": "A list of Users." } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["users"] }, - "DeleteMfaPolicyResult": { + "CreateUsersIntentV2": { "type": "object", "properties": { - "mfaPolicyId": { - "type": "string", - "description": "Unique identifier for a given MFA Policy." + "users": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/UserParamsV2" + }, + "description": "A list of Users." } }, - "required": [ - "mfaPolicyId" - ] + "required": ["users"] }, - "DeleteOauth2CredentialIntent": { + "CreateUsersIntentV3": { "type": "object", "properties": { - "oauth2CredentialId": { - "type": "string", - "description": "The ID of the OAuth 2.0 credential to delete" + "users": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/UserParamsV3" + }, + "description": "A list of Users." } }, - "required": [ - "oauth2CredentialId" - ] + "required": ["users"] }, - "DeleteOauth2CredentialRequest": { + "CreateUsersIntentV4": { + "type": "object", + "properties": { + "users": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/UserParamsV4" + }, + "description": "A list of Users." + } + }, + "required": ["users"] + }, + "CreateUsersRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_DELETE_OAUTH2_CREDENTIAL" - ] + "enum": ["ACTIVITY_TYPE_CREATE_USERS_V4"] }, "timestampMs": { "type": "string", @@ -8726,60 +7198,57 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/definitions/DeleteOauth2CredentialIntent" + "$ref": "#/definitions/CreateUsersIntentV4" }, "generateAppProofs": { "type": "boolean", "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "DeleteOauth2CredentialResult": { + "CreateUsersResult": { "type": "object", "properties": { - "oauth2CredentialId": { - "type": "string", - "description": "Unique identifier of the OAuth 2.0 credential that was deleted" + "userIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User IDs." } }, - "required": [ - "oauth2CredentialId" - ] + "required": ["userIds"] }, - "DeleteOauthProvidersIntent": { + "CreateWalletAccountsIntent": { "type": "object", "properties": { - "userId": { + "walletId": { "type": "string", - "description": "The ID of the User to remove an Oauth provider from" + "description": "Unique identifier for a given Wallet." }, - "providerIds": { + "accounts": { "type": "array", "items": { - "type": "string" + "type": "object", + "$ref": "#/definitions/WalletAccountParams" }, - "description": "Unique identifier for a given Provider." + "description": "A list of wallet Accounts." + }, + "persist": { + "type": "boolean", + "x-nullable": true, + "description": "Indicates if the wallet accounts should be persisted. This is helpful if you'd like to see the addresses of different derivation paths without actually creating the accounts. Defaults to true." } }, - "required": [ - "userId", - "providerIds" - ] + "required": ["walletId", "accounts"] }, - "DeleteOauthProvidersRequest": { + "CreateWalletAccountsRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_DELETE_OAUTH_PROVIDERS" - ] + "enum": ["ACTIVITY_TYPE_CREATE_WALLET_ACCOUNTS"] }, "timestampMs": { "type": "string", @@ -8790,107 +7259,58 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/definitions/DeleteOauthProvidersIntent" + "$ref": "#/definitions/CreateWalletAccountsIntent" }, "generateAppProofs": { "type": "boolean", "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "DeleteOauthProvidersResult": { + "CreateWalletAccountsResult": { "type": "object", "properties": { - "providerIds": { + "addresses": { "type": "array", "items": { "type": "string" }, - "description": "A list of unique identifiers for Oauth Providers" - } - }, - "required": [ - "providerIds" - ] - }, - "DeleteOrganizationIntent": { - "type": "object", - "properties": { - "organizationId": { - "type": "string", - "description": "Unique identifier for a given Organization." - } - }, - "required": [ - "organizationId" - ] - }, - "DeleteOrganizationResult": { - "type": "object", - "properties": { - "organizationId": { - "type": "string", - "description": "Unique identifier for a given Organization." - } - }, - "required": [ - "organizationId" - ] - }, - "DeletePaymentMethodIntent": { - "type": "object", - "properties": { - "paymentMethodId": { - "type": "string", - "x-nullable": true, - "description": "The payment method that the customer wants to remove." + "description": "A list of derived addresses." } }, - "required": [ - "paymentMethodId" - ] + "required": ["addresses"] }, - "DeletePaymentMethodResult": { + "CreateWalletIntent": { "type": "object", "properties": { - "paymentMethodId": { + "walletName": { "type": "string", - "description": "The payment method that was removed." - } - }, - "required": [ - "paymentMethodId" - ] - }, - "DeletePoliciesIntent": { - "type": "object", - "properties": { - "policyIds": { + "description": "Human-readable name for a Wallet." + }, + "accounts": { "type": "array", "items": { - "type": "string" + "type": "object", + "$ref": "#/definitions/WalletAccountParams" }, - "description": "List of unique identifiers for policies within an organization" + "description": "A list of wallet Accounts. This field, if not needed, should be an empty array in your request body." + }, + "mnemonicLength": { + "type": "integer", + "format": "int32", + "x-nullable": true, + "description": "Length of mnemonic to generate the Wallet seed. Defaults to 12. Accepted values: 12, 15, 18, 21, 24." } }, - "required": [ - "policyIds" - ] + "required": ["walletName", "accounts"] }, - "DeletePoliciesRequest": { + "CreateWalletRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_DELETE_POLICIES" - ] + "enum": ["ACTIVITY_TYPE_CREATE_WALLET"] }, "timestampMs": { "type": "string", @@ -8901,55 +7321,60 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/definitions/DeletePoliciesIntent" + "$ref": "#/definitions/CreateWalletIntent" }, "generateAppProofs": { "type": "boolean", "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "DeletePoliciesResult": { + "CreateWalletResult": { "type": "object", "properties": { - "policyIds": { + "walletId": { + "type": "string", + "description": "Unique identifier for a Wallet." + }, + "addresses": { "type": "array", "items": { "type": "string" }, - "description": "A list of unique identifiers for the deleted policies." + "description": "A list of account addresses." } }, - "required": [ - "policyIds" - ] + "required": ["walletId", "addresses"] }, - "DeletePolicyIntent": { + "CreateWebhookEndpointIntent": { "type": "object", "properties": { - "policyId": { + "url": { "type": "string", - "description": "Unique identifier for a given Policy." + "description": "The destination URL for webhook delivery." + }, + "name": { + "type": "string", + "description": "Human-readable name for this webhook endpoint." + }, + "subscriptions": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/WebhookSubscriptionParams" + }, + "description": "Event subscriptions to create for this endpoint." } }, - "required": [ - "policyId" - ] + "required": ["url", "name"] }, - "DeletePolicyRequest": { + "CreateWebhookEndpointRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_DELETE_POLICY" - ] + "enum": ["ACTIVITY_TYPE_CREATE_WEBHOOK_ENDPOINT"] }, "timestampMs": { "type": "string", @@ -8960,55 +7385,95 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/definitions/DeletePolicyIntent" + "$ref": "#/definitions/CreateWebhookEndpointIntent" }, "generateAppProofs": { "type": "boolean", "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "CreateWebhookEndpointResult": { + "type": "object", + "properties": { + "endpointId": { + "type": "string", + "description": "Unique identifier of the created webhook endpoint." + }, + "webhookEndpoint": { + "$ref": "#/definitions/WebhookEndpointData", + "description": "The created webhook endpoint data." + } + }, + "required": ["endpointId", "webhookEndpoint"] + }, + "CredPropsAuthenticationExtensionsClientOutputs": { + "type": "object", + "properties": { + "rk": { + "type": "boolean" + } + }, + "required": ["rk"] + }, + "CredentialType": { + "type": "string", + "enum": [ + "CREDENTIAL_TYPE_WEBAUTHN_AUTHENTICATOR", + "CREDENTIAL_TYPE_API_KEY_P256", + "CREDENTIAL_TYPE_RECOVER_USER_KEY_P256", + "CREDENTIAL_TYPE_API_KEY_SECP256K1", + "CREDENTIAL_TYPE_EMAIL_AUTH_KEY_P256", + "CREDENTIAL_TYPE_API_KEY_ED25519", + "CREDENTIAL_TYPE_OTP_AUTH_KEY_P256", + "CREDENTIAL_TYPE_READ_WRITE_SESSION_KEY_P256", + "CREDENTIAL_TYPE_OAUTH_KEY_P256", + "CREDENTIAL_TYPE_LOGIN" ] }, - "DeletePolicyResult": { + "Curve": { + "type": "string", + "enum": ["CURVE_SECP256K1", "CURVE_ED25519", "CURVE_P256"] + }, + "CustomRevertError": { "type": "object", "properties": { - "policyId": { + "errorName": { "type": "string", - "description": "Unique identifier for a given Policy." + "x-nullable": true, + "description": "The name of the custom error." + }, + "paramsJson": { + "type": "string", + "x-nullable": true, + "description": "The decoded parameters as a JSON object." } - }, - "required": [ - "policyId" - ] + } }, - "DeletePrivateKeyTagsIntent": { + "DeleteApiKeysIntent": { "type": "object", "properties": { - "privateKeyTagIds": { + "userId": { + "type": "string", + "description": "Unique identifier for a given User." + }, + "apiKeyIds": { "type": "array", "items": { "type": "string" }, - "description": "A list of Private Key Tag IDs." + "description": "A list of API Key IDs." } }, - "required": [ - "privateKeyTagIds" - ] + "required": ["userId", "apiKeyIds"] }, - "DeletePrivateKeyTagsRequest": { + "DeleteApiKeysRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_DELETE_PRIVATE_KEY_TAGS" - ] + "enum": ["ACTIVITY_TYPE_DELETE_API_KEYS"] }, "timestampMs": { "type": "string", @@ -9019,71 +7484,51 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/definitions/DeletePrivateKeyTagsIntent" + "$ref": "#/definitions/DeleteApiKeysIntent" }, "generateAppProofs": { "type": "boolean", "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "DeletePrivateKeyTagsResult": { + "DeleteApiKeysResult": { "type": "object", "properties": { - "privateKeyTagIds": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of Private Key Tag IDs." - }, - "privateKeyIds": { + "apiKeyIds": { "type": "array", "items": { "type": "string" }, - "description": "A list of Private Key IDs." + "description": "A list of API Key IDs." } }, - "required": [ - "privateKeyTagIds", - "privateKeyIds" - ] + "required": ["apiKeyIds"] }, - "DeletePrivateKeysIntent": { + "DeleteAuthenticatorsIntent": { "type": "object", "properties": { - "privateKeyIds": { + "userId": { + "type": "string", + "description": "Unique identifier for a given User." + }, + "authenticatorIds": { "type": "array", "items": { "type": "string" }, - "description": "List of unique identifiers for private keys within an organization" - }, - "deleteWithoutExport": { - "type": "boolean", - "x-nullable": true, - "description": "Optional parameter for deleting the private keys, even if any have not been previously exported. If they have been exported, this field is ignored." + "description": "A list of Authenticator IDs." } }, - "required": [ - "privateKeyIds" - ] + "required": ["userId", "authenticatorIds"] }, - "DeletePrivateKeysRequest": { + "DeleteAuthenticatorsRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_DELETE_PRIVATE_KEYS" - ] + "enum": ["ACTIVITY_TYPE_DELETE_AUTHENTICATORS"] }, "timestampMs": { "type": "string", @@ -9094,55 +7539,44 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/definitions/DeletePrivateKeysIntent" + "$ref": "#/definitions/DeleteAuthenticatorsIntent" }, "generateAppProofs": { "type": "boolean", "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "DeletePrivateKeysResult": { + "DeleteAuthenticatorsResult": { "type": "object", "properties": { - "privateKeyIds": { + "authenticatorIds": { "type": "array", "items": { "type": "string" }, - "description": "A list of private key unique identifiers that were removed" + "description": "Unique identifier for a given Authenticator." } }, - "required": [ - "privateKeyIds" - ] + "required": ["authenticatorIds"] }, - "DeleteSmartContractInterfaceIntent": { + "DeleteFiatOnRampCredentialIntent": { "type": "object", "properties": { - "smartContractInterfaceId": { + "fiatOnrampCredentialId": { "type": "string", - "description": "The ID of a Smart Contract Interface intended for deletion." + "description": "The ID of the fiat on-ramp credential to delete" } }, - "required": [ - "smartContractInterfaceId" - ] + "required": ["fiatOnrampCredentialId"] }, - "DeleteSmartContractInterfaceRequest": { + "DeleteFiatOnRampCredentialRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_DELETE_SMART_CONTRACT_INTERFACE" - ] + "enum": ["ACTIVITY_TYPE_DELETE_FIAT_ON_RAMP_CREDENTIAL"] }, "timestampMs": { "type": "string", @@ -9153,50 +7587,41 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/definitions/DeleteSmartContractInterfaceIntent" + "$ref": "#/definitions/DeleteFiatOnRampCredentialIntent" }, "generateAppProofs": { "type": "boolean", "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "DeleteSmartContractInterfaceResult": { + "DeleteFiatOnRampCredentialResult": { "type": "object", "properties": { - "smartContractInterfaceId": { + "fiatOnRampCredentialId": { "type": "string", - "description": "The ID of the deleted Smart Contract Interface." + "description": "Unique identifier of the Fiat On-Ramp credential that was deleted" } }, - "required": [ - "smartContractInterfaceId" - ] + "required": ["fiatOnRampCredentialId"] }, - "DeleteSubOrganizationIntent": { + "DeleteInvitationIntent": { "type": "object", "properties": { - "deleteWithoutExport": { - "type": "boolean", - "x-nullable": true, - "description": "Sub-organization deletion, by default, requires associated wallets and private keys to be exported for security reasons. Set this boolean to true to force sub-organization deletion even if some wallets or private keys within it have not been exported yet. Default: false." + "invitationId": { + "type": "string", + "description": "Unique identifier for a given Invitation object." } - } + }, + "required": ["invitationId"] }, - "DeleteSubOrganizationRequest": { + "DeleteInvitationRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_DELETE_SUB_ORGANIZATION" - ] + "enum": ["ACTIVITY_TYPE_DELETE_INVITATION"] }, "timestampMs": { "type": "string", @@ -9207,52 +7632,45 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/definitions/DeleteSubOrganizationIntent" + "$ref": "#/definitions/DeleteInvitationIntent" }, "generateAppProofs": { "type": "boolean", "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "DeleteSubOrganizationResult": { + "DeleteInvitationResult": { "type": "object", "properties": { - "subOrganizationUuid": { + "invitationId": { "type": "string", - "description": "Unique identifier of the sub organization that was removed" + "description": "Unique identifier for a given Invitation." } }, - "required": [ - "subOrganizationUuid" - ] + "required": ["invitationId"] }, - "DeleteTvcAppAndDeploymentsIntent": { + "DeleteMfaPolicyIntent": { "type": "object", "properties": { - "appId": { + "userId": { "type": "string", - "description": "The unique identifier of the TVC app to delete. The app and all associated deployments will be removed." + "description": "The ID of the User to delete the MFA Policy from." + }, + "mfaPolicyId": { + "type": "string", + "description": "Unique identifier for a given MFA Policy." } }, - "required": [ - "appId" - ] + "required": ["userId", "mfaPolicyId"] }, - "DeleteTvcAppAndDeploymentsRequest": { + "DeleteMfaPolicyRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_DELETE_TVC_APP_AND_DEPLOYMENTS" - ] + "enum": ["ACTIVITY_TYPE_DELETE_MFA_POLICY"] }, "timestampMs": { "type": "string", @@ -9263,52 +7681,37 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/definitions/DeleteTvcAppAndDeploymentsIntent" - }, - "generateAppProofs": { - "type": "boolean", - "x-nullable": true + "$ref": "#/definitions/DeleteMfaPolicyIntent" } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "DeleteTvcAppAndDeploymentsResult": { + "DeleteMfaPolicyResult": { "type": "object", "properties": { - "appId": { + "mfaPolicyId": { "type": "string", - "description": "The unique identifier of the deleted TVC app." + "description": "Unique identifier for a given MFA Policy." } }, - "required": [ - "appId" - ] + "required": ["mfaPolicyId"] }, - "DeleteTvcDeploymentIntent": { + "DeleteOauth2CredentialIntent": { "type": "object", "properties": { - "deploymentId": { + "oauth2CredentialId": { "type": "string", - "description": "The unique identifier of the TVC deployment to delete." + "description": "The ID of the OAuth 2.0 credential to delete" } }, - "required": [ - "deploymentId" - ] + "required": ["oauth2CredentialId"] }, - "DeleteTvcDeploymentRequest": { + "DeleteOauth2CredentialRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_DELETE_TVC_DEPLOYMENT" - ] + "enum": ["ACTIVITY_TYPE_DELETE_OAUTH2_CREDENTIAL"] }, "timestampMs": { "type": "string", @@ -9319,55 +7722,48 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/definitions/DeleteTvcDeploymentIntent" + "$ref": "#/definitions/DeleteOauth2CredentialIntent" }, "generateAppProofs": { "type": "boolean", "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "DeleteTvcDeploymentResult": { + "DeleteOauth2CredentialResult": { "type": "object", "properties": { - "deploymentId": { + "oauth2CredentialId": { "type": "string", - "description": "The unique identifier of the deleted TVC deployment." + "description": "Unique identifier of the OAuth 2.0 credential that was deleted" } }, - "required": [ - "deploymentId" - ] + "required": ["oauth2CredentialId"] }, - "DeleteUserTagsIntent": { + "DeleteOauthProvidersIntent": { "type": "object", "properties": { - "userTagIds": { + "userId": { + "type": "string", + "description": "The ID of the User to remove an Oauth provider from" + }, + "providerIds": { "type": "array", "items": { "type": "string" }, - "description": "A list of User Tag IDs." + "description": "Unique identifier for a given Provider." } }, - "required": [ - "userTagIds" - ] + "required": ["userId", "providerIds"] }, - "DeleteUserTagsRequest": { + "DeleteOauthProvidersRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_DELETE_USER_TAGS" - ] + "enum": ["ACTIVITY_TYPE_DELETE_OAUTH_PROVIDERS"] }, "timestampMs": { "type": "string", @@ -9378,66 +7774,88 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/definitions/DeleteUserTagsIntent" + "$ref": "#/definitions/DeleteOauthProvidersIntent" }, "generateAppProofs": { "type": "boolean", "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "DeleteOauthProvidersResult": { + "type": "object", + "properties": { + "providerIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of unique identifiers for Oauth Providers" + } + }, + "required": ["providerIds"] + }, + "DeleteOrganizationIntent": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + } + }, + "required": ["organizationId"] + }, + "DeleteOrganizationResult": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + } + }, + "required": ["organizationId"] + }, + "DeletePaymentMethodIntent": { + "type": "object", + "properties": { + "paymentMethodId": { + "type": "string", + "x-nullable": true, + "description": "The payment method that the customer wants to remove." + } + }, + "required": ["paymentMethodId"] }, - "DeleteUserTagsResult": { + "DeletePaymentMethodResult": { "type": "object", "properties": { - "userTagIds": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of User Tag IDs." - }, - "userIds": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of User IDs." + "paymentMethodId": { + "type": "string", + "description": "The payment method that was removed." } }, - "required": [ - "userTagIds", - "userIds" - ] + "required": ["paymentMethodId"] }, - "DeleteUsersIntent": { + "DeletePoliciesIntent": { "type": "object", "properties": { - "userIds": { + "policyIds": { "type": "array", "items": { "type": "string" }, - "description": "A list of User IDs." + "description": "List of unique identifiers for policies within an organization" } }, - "required": [ - "userIds" - ] + "required": ["policyIds"] }, - "DeleteUsersRequest": { + "DeletePoliciesRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_DELETE_USERS" - ] + "enum": ["ACTIVITY_TYPE_DELETE_POLICIES"] }, "timestampMs": { "type": "string", @@ -9448,63 +7866,44 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/definitions/DeleteUsersIntent" + "$ref": "#/definitions/DeletePoliciesIntent" }, "generateAppProofs": { "type": "boolean", "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "DeleteUsersResult": { + "DeletePoliciesResult": { "type": "object", "properties": { - "userIds": { + "policyIds": { "type": "array", "items": { "type": "string" }, - "description": "A list of User IDs." + "description": "A list of unique identifiers for the deleted policies." } }, - "required": [ - "userIds" - ] + "required": ["policyIds"] }, - "DeleteWalletAccountsIntent": { + "DeletePolicyIntent": { "type": "object", "properties": { - "walletAccountIds": { - "type": "array", - "items": { - "type": "string" - }, - "description": "List of unique identifiers for wallet accounts within an organization" - }, - "deleteWithoutExport": { - "type": "boolean", - "x-nullable": true, - "description": "Optional parameter for deleting the wallet accounts, even if any have not been previously exported. If they have been exported, this field is ignored." + "policyId": { + "type": "string", + "description": "Unique identifier for a given Policy." } }, - "required": [ - "walletAccountIds" - ] + "required": ["policyId"] }, - "DeleteWalletAccountsRequest": { + "DeletePolicyRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_DELETE_WALLET_ACCOUNTS" - ] + "enum": ["ACTIVITY_TYPE_DELETE_POLICY"] }, "timestampMs": { "type": "string", @@ -9515,63 +7914,44 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/definitions/DeleteWalletAccountsIntent" + "$ref": "#/definitions/DeletePolicyIntent" }, "generateAppProofs": { "type": "boolean", "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "DeleteWalletAccountsResult": { + "DeletePolicyResult": { "type": "object", "properties": { - "walletAccountIds": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of wallet account unique identifiers that were removed" + "policyId": { + "type": "string", + "description": "Unique identifier for a given Policy." } }, - "required": [ - "walletAccountIds" - ] + "required": ["policyId"] }, - "DeleteWalletsIntent": { + "DeletePrivateKeyTagsIntent": { "type": "object", "properties": { - "walletIds": { + "privateKeyTagIds": { "type": "array", "items": { "type": "string" }, - "description": "List of unique identifiers for wallets within an organization" - }, - "deleteWithoutExport": { - "type": "boolean", - "x-nullable": true, - "description": "Optional parameter for deleting the wallets, even if any have not been previously exported. If they have been exported, this field is ignored." + "description": "A list of Private Key Tag IDs." } }, - "required": [ - "walletIds" - ] + "required": ["privateKeyTagIds"] }, - "DeleteWalletsRequest": { + "DeletePrivateKeyTagsRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_DELETE_WALLETS" - ] + "enum": ["ACTIVITY_TYPE_DELETE_PRIVATE_KEY_TAGS"] }, "timestampMs": { "type": "string", @@ -9582,55 +7962,59 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/definitions/DeleteWalletsIntent" + "$ref": "#/definitions/DeletePrivateKeyTagsIntent" }, "generateAppProofs": { "type": "boolean", "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "DeleteWalletsResult": { + "DeletePrivateKeyTagsResult": { "type": "object", "properties": { - "walletIds": { + "privateKeyTagIds": { "type": "array", "items": { "type": "string" }, - "description": "A list of wallet unique identifiers that were removed" + "description": "A list of Private Key Tag IDs." + }, + "privateKeyIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of Private Key IDs." } }, - "required": [ - "walletIds" - ] + "required": ["privateKeyTagIds", "privateKeyIds"] }, - "DeleteWebhookEndpointIntent": { + "DeletePrivateKeysIntent": { "type": "object", "properties": { - "endpointId": { - "type": "string", - "description": "Unique identifier of the webhook endpoint to delete." + "privateKeyIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of unique identifiers for private keys within an organization" + }, + "deleteWithoutExport": { + "type": "boolean", + "x-nullable": true, + "description": "Optional parameter for deleting the private keys, even if any have not been previously exported. If they have been exported, this field is ignored." } }, - "required": [ - "endpointId" - ] + "required": ["privateKeyIds"] }, - "DeleteWebhookEndpointRequest": { + "DeletePrivateKeysRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_DELETE_WEBHOOK_ENDPOINT" - ] + "enum": ["ACTIVITY_TYPE_DELETE_PRIVATE_KEYS"] }, "timestampMs": { "type": "string", @@ -9641,134 +8025,44 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/definitions/DeleteWebhookEndpointIntent" + "$ref": "#/definitions/DeletePrivateKeysIntent" }, "generateAppProofs": { "type": "boolean", "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] - }, - "DeleteWebhookEndpointResult": { - "type": "object", - "properties": { - "endpointId": { - "type": "string", - "description": "Unique identifier of the deleted webhook endpoint." - } - }, - "required": [ - "endpointId" - ] - }, - "DeploymentStatus": { - "type": "object", - "properties": { - "deploymentId": { - "type": "string", - "description": "Unique identifier for this deployment (corresponds to k8s deployment label)" - }, - "readyReplicas": { - "type": "integer", - "format": "int32", - "description": "Number of ready replicas" - }, - "desiredReplicas": { - "type": "integer", - "format": "int32", - "description": "Desired number of replicas" - }, - "lastUpdatedTime": { - "$ref": "#/definitions/external.data.v1.Timestamp", - "description": "Last time this deployment was updated" - } - }, - "required": [ - "deploymentId", - "readyReplicas", - "desiredReplicas", - "lastUpdatedTime" - ] - }, - "DisableAuthProxyIntent": { - "type": "object" - }, - "DisableAuthProxyResult": { - "type": "object" - }, - "DisablePrivateKeyIntent": { - "type": "object", - "properties": { - "privateKeyId": { - "type": "string", - "description": "Unique identifier for a given Private Key." - } - }, - "required": [ - "privateKeyId" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "DisablePrivateKeyResult": { + "DeletePrivateKeysResult": { "type": "object", "properties": { - "privateKeyId": { - "type": "string", - "description": "Unique identifier for a given Private Key." + "privateKeyIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of private key unique identifiers that were removed" } }, - "required": [ - "privateKeyId" - ] + "required": ["privateKeyIds"] }, - "EarnDeployWrapperIntent": { + "DeleteSmartContractInterfaceIntent": { "type": "object", "properties": { - "vaultAddress": { - "type": "string", - "description": "Address of the underlying yield vault to wrap (from the ListEarnVaults catalog)." - }, - "chainCaip2": { - "type": "string", - "enum": [ - "eip155:1", - "eip155:8453", - "eip155:42161", - "eip155:137", - "eip155:56", - "eip155:4217" - ], - "description": "CAIP-2 chain ID the vault lives on (e.g., 'eip155:8453' for Base)." - }, - "clientFeeBps": { - "type": "string", - "description": "Your performance fee on gross yield, in basis points (e.g., '2000' for 20%). Your fee plus Turnkey's fee cannot exceed 50% of yield." - }, - "clientFeeWallet": { - "type": "string", - "description": "The wallet address that receives the client's fee payouts on-chain. Must be a Turnkey-managed wallet address." - } - }, - "required": [ - "vaultAddress", - "chainCaip2", - "clientFeeBps", - "clientFeeWallet" - ] + "smartContractInterfaceId": { + "type": "string", + "description": "The ID of a Smart Contract Interface intended for deletion." + } + }, + "required": ["smartContractInterfaceId"] }, - "EarnDeployWrapperRequest": { + "DeleteSmartContractInterfaceRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_EARN_DEPLOY_WRAPPER" - ] + "enum": ["ACTIVITY_TYPE_DELETE_SMART_CONTRACT_INTERFACE"] }, "timestampMs": { "type": "string", @@ -9779,90 +8073,41 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/definitions/EarnDeployWrapperIntent" + "$ref": "#/definitions/DeleteSmartContractInterfaceIntent" }, "generateAppProofs": { "type": "boolean", "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "EarnDeployWrapperResult": { + "DeleteSmartContractInterfaceResult": { "type": "object", "properties": { - "wrapperAddress": { - "type": "string", - "description": "Address of the deployed fee wrapper (the deposit target)." - }, - "splitterAddress": { - "type": "string", - "description": "Address of the deployed fee splitter (PaymentSplitter for Morpho, RevenueSplitterOwner for Aave)." - }, - "deployRequestId": { + "smartContractInterfaceId": { "type": "string", - "description": "Identifier to poll deploy status." + "description": "The ID of the deleted Smart Contract Interface." } }, - "required": [ - "wrapperAddress", - "splitterAddress", - "deployRequestId" - ] + "required": ["smartContractInterfaceId"] }, - "EarnDepositIntent": { + "DeleteSubOrganizationIntent": { "type": "object", "properties": { - "wrapperAddress": { - "type": "string", - "description": "Address of the deployed Earn wrapper to deposit into, from ListEarnVaults/ListEarnPositions. Must be one of the org's deployed wrappers." - }, - "signWith": { - "type": "string", - "description": "A Wallet account address or Private Key address to deposit from and sign with. Must be an on-chain address; Private Key identifiers are not supported." - }, - "assets": { - "type": "string", - "description": "Amount of the underlying asset to deposit, in raw on-chain units (e.g., '1000000' for 1 USDC at 6 decimals)." - }, - "chainCaip2": { - "type": "string", - "enum": [ - "eip155:1", - "eip155:8453", - "eip155:42161", - "eip155:137", - "eip155:56", - "eip155:4217" - ], - "description": "CAIP-2 chain ID the vault lives on (e.g., 'eip155:8453' for Base)." - }, - "sponsor": { + "deleteWithoutExport": { "type": "boolean", "x-nullable": true, - "description": "Whether to sponsor this transaction via Gas Station." + "description": "Sub-organization deletion, by default, requires associated wallets and private keys to be exported for security reasons. Set this boolean to true to force sub-organization deletion even if some wallets or private keys within it have not been exported yet. Default: false." } - }, - "required": [ - "wrapperAddress", - "signWith", - "assets", - "chainCaip2" - ] + } }, - "EarnDepositRequest": { + "DeleteSubOrganizationRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_EARN_DEPOSIT" - ] + "enum": ["ACTIVITY_TYPE_DELETE_SUB_ORGANIZATION"] }, "timestampMs": { "type": "string", @@ -9873,197 +8118,248 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/definitions/EarnDepositIntent" + "$ref": "#/definitions/DeleteSubOrganizationIntent" }, "generateAppProofs": { "type": "boolean", "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "EarnDepositResult": { + "DeleteSubOrganizationResult": { "type": "object", "properties": { - "depositRequestId": { + "subOrganizationUuid": { "type": "string", - "description": "Identifier to poll deposit status and tx hash via GetEarnDepositStatus." + "description": "Unique identifier of the sub organization that was removed" } }, - "required": [ - "depositRequestId" - ] + "required": ["subOrganizationUuid"] }, - "EarnEnabledVault": { + "DeleteTvcAppAndDeploymentsIntent": { "type": "object", "properties": { - "vaultAddress": { - "type": "string", - "description": "Address of the underlying yield vault." - }, - "wrapperAddress": { - "type": "string", - "description": "Address of the deployed fee wrapper (the deposit target)." - }, - "provider": { - "$ref": "#/definitions/EarnProvider", - "description": "Yield provider for the vault." - }, - "caip19": { + "appId": { "type": "string", - "description": "CAIP-19 asset ID of the vault's underlying asset (e.g. 'eip155:8453/erc20:0x833589...'); the chain is encoded in the identifier." - }, - "apyPct": { + "description": "The unique identifier of the TVC app to delete. The app and all associated deployments will be removed." + } + }, + "required": ["appId"] + }, + "DeleteTvcAppAndDeploymentsRequest": { + "type": "object", + "properties": { + "type": { "type": "string", - "description": "Gross annual percentage yield, expressed as a decimal fraction (before Turnkey and client fees)." + "enum": ["ACTIVITY_TYPE_DELETE_TVC_APP_AND_DEPLOYMENTS"] }, - "totalDeposited": { + "timestampMs": { "type": "string", - "description": "Total deposited through this wrapper (wrapper TVL), in raw on-chain units of the underlying asset." - }, - "display": { - "$ref": "#/definitions/EarnValueDisplay", - "description": "Normalized total-deposited values for display only (usd + crypto). Do not do arithmetic with these; use total_deposited instead." + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, - "netApyPct": { + "organizationId": { "type": "string", - "description": "Annual percentage yield net of the Turnkey and client performance fees, expressed as a decimal fraction." + "description": "Unique identifier for a given Organization." }, - "clientFeeBps": { - "type": "string", - "description": "Client performance fee taken on yield, in basis points. Currently org-wide; moving to a per-vault setting." + "parameters": { + "$ref": "#/definitions/DeleteTvcAppAndDeploymentsIntent" }, - "depositsDisabled": { + "generateAppProofs": { "type": "boolean", - "description": "When true, deposits to this wrapper are rejected; withdrawals are unaffected. Toggled via EarnSetWrapperState." - }, - "name": { - "type": "string", - "description": "Human-readable vault name from the provider (e.g. 'Steakhouse Prime USDC' for Morpho; the reserve symbol for Aave)." - }, - "curator": { + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "DeleteTvcAppAndDeploymentsResult": { + "type": "object", + "properties": { + "appId": { "type": "string", - "description": "Vault curator name(s), comma-separated when a vault has multiple. Empty for providers without curators (e.g. Aave)." - }, - "claimableClientFee": { + "description": "The unique identifier of the deleted TVC app." + } + }, + "required": ["appId"] + }, + "DeleteTvcDeploymentIntent": { + "type": "object", + "properties": { + "deploymentId": { "type": "string", - "x-nullable": true, - "description": "The client's claimable performance fee (releasable now), in raw on-chain units of the underlying asset (the caip19 asset). Turnkey's fee is excluded. Only returned to the parent org; unset when a sub-org queries." - }, - "claimableClientFeeDisplay": { - "$ref": "#/definitions/EarnValueDisplay", - "description": "Normalized claimable_client_fee for display only (usd + crypto). Do not do arithmetic with these; use claimable_client_fee. Unset when a sub-org queries." + "description": "The unique identifier of the TVC deployment to delete." } - } + }, + "required": ["deploymentId"] }, - "EarnPosition": { + "DeleteTvcDeploymentRequest": { "type": "object", "properties": { - "vaultAddress": { + "type": { "type": "string", - "description": "Address of the underlying yield vault." + "enum": ["ACTIVITY_TYPE_DELETE_TVC_DEPLOYMENT"] }, - "wrapperAddress": { + "timestampMs": { "type": "string", - "description": "Address of the fee wrapper holding the position." - }, - "provider": { - "$ref": "#/definitions/EarnProvider", - "description": "Yield provider for the vault." + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, - "caip19": { + "organizationId": { "type": "string", - "description": "CAIP-19 asset ID of the vault's underlying asset (e.g. 'eip155:8453/erc20:0x833589...'); the chain is encoded in the identifier." + "description": "Unique identifier for a given Organization." }, - "currentValue": { + "parameters": { + "$ref": "#/definitions/DeleteTvcDeploymentIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "DeleteTvcDeploymentResult": { + "type": "object", + "properties": { + "deploymentId": { "type": "string", - "description": "Current value of the position in the underlying asset, in raw on-chain units (already net of the wrapper fee)." + "description": "The unique identifier of the deleted TVC deployment." + } + }, + "required": ["deploymentId"] + }, + "DeleteUserTagsIntent": { + "type": "object", + "properties": { + "userTagIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User Tag IDs." + } + }, + "required": ["userTagIds"] + }, + "DeleteUserTagsRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_DELETE_USER_TAGS"] }, - "totalDeposited": { + "timestampMs": { "type": "string", - "description": "Lifetime total deposited into this position, in raw on-chain units." + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, - "totalWithdrawn": { + "organizationId": { "type": "string", - "description": "Lifetime total withdrawn from this position, in raw on-chain units." + "description": "Unique identifier for a given Organization." }, - "display": { - "$ref": "#/definitions/EarnPositionDisplay", - "description": "USD + crypto renderings for display only. Do not do arithmetic with these." + "parameters": { + "$ref": "#/definitions/DeleteUserTagsIntent" }, - "depositsDisabled": { + "generateAppProofs": { "type": "boolean", - "description": "When true, deposits to this wrapper are rejected; withdrawals are unaffected. Toggled via EarnSetWrapperState." + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "DeleteUserTagsResult": { + "type": "object", + "properties": { + "userTagIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User Tag IDs." + }, + "userIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User IDs." + } + }, + "required": ["userTagIds", "userIds"] + }, + "DeleteUsersIntent": { + "type": "object", + "properties": { + "userIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User IDs." } - } + }, + "required": ["userIds"] }, - "EarnPositionDisplay": { + "DeleteUsersRequest": { "type": "object", "properties": { - "currentValueUsd": { - "type": "string", - "description": "Current value in USD, for display only." - }, - "totalDepositedUsd": { + "type": { "type": "string", - "description": "Total deposited in USD, for display only." + "enum": ["ACTIVITY_TYPE_DELETE_USERS"] }, - "totalWithdrawnUsd": { + "timestampMs": { "type": "string", - "description": "Total withdrawn in USD, for display only." + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, - "currentValueCrypto": { + "organizationId": { "type": "string", - "description": "Current value in the asset's own units, for display only." + "description": "Unique identifier for a given Organization." }, - "totalDepositedCrypto": { - "type": "string", - "description": "Total deposited in the asset's own units, for display only." + "parameters": { + "$ref": "#/definitions/DeleteUsersIntent" }, - "totalWithdrawnCrypto": { - "type": "string", - "description": "Total withdrawn in the asset's own units, for display only." + "generateAppProofs": { + "type": "boolean", + "x-nullable": true } - } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "EarnProvider": { - "type": "string", - "enum": [ - "EARN_PROVIDER_MORPHO", - "EARN_PROVIDER_AAVE" - ] + "DeleteUsersResult": { + "type": "object", + "properties": { + "userIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User IDs." + } + }, + "required": ["userIds"] }, - "EarnSetWrapperStateIntent": { + "DeleteWalletAccountsIntent": { "type": "object", "properties": { - "wrapperAddress": { - "type": "string", - "description": "Address of the deployed Earn wrapper to update, from ListEarnVaults/ListEarnPositions. Must be one of the org's deployed wrappers." + "walletAccountIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of unique identifiers for wallet accounts within an organization" }, - "depositsDisabled": { + "deleteWithoutExport": { "type": "boolean", "x-nullable": true, - "description": "When true, deposits to this wrapper are rejected; withdrawals are unaffected. Set to false to re-enable deposits." + "description": "Optional parameter for deleting the wallet accounts, even if any have not been previously exported. If they have been exported, this field is ignored." } }, - "required": [ - "wrapperAddress", - "depositsDisabled" - ] + "required": ["walletAccountIds"] }, - "EarnSetWrapperStateRequest": { + "DeleteWalletAccountsRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_EARN_SET_WRAPPER_STATE" - ] + "enum": ["ACTIVITY_TYPE_DELETE_WALLET_ACCOUNTS"] }, "timestampMs": { "type": "string", @@ -10074,139 +8370,100 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/definitions/EarnSetWrapperStateIntent" + "$ref": "#/definitions/DeleteWalletAccountsIntent" }, "generateAppProofs": { "type": "boolean", "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "EarnSetWrapperStateResult": { + "DeleteWalletAccountsResult": { "type": "object", "properties": { - "wrapperAddress": { - "type": "string", - "description": "Address of the updated Earn wrapper." - }, - "depositsDisabled": { - "type": "boolean", - "description": "The wrapper's deposit state after this activity." + "walletAccountIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of wallet account unique identifiers that were removed" } }, - "required": [ - "wrapperAddress", - "depositsDisabled" - ] + "required": ["walletAccountIds"] }, - "EarnValueDisplay": { + "DeleteWalletsIntent": { "type": "object", "properties": { - "usd": { - "type": "string", - "description": "USD value, for display only." + "walletIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of unique identifiers for wallets within an organization" }, - "crypto": { - "type": "string", - "description": "Normalized amount in the asset's own units, for display only." + "deleteWithoutExport": { + "type": "boolean", + "x-nullable": true, + "description": "Optional parameter for deleting the wallets, even if any have not been previously exported. If they have been exported, this field is ignored." } - } + }, + "required": ["walletIds"] }, - "EarnVault": { + "DeleteWalletsRequest": { "type": "object", "properties": { - "vaultAddress": { + "type": { "type": "string", - "description": "Address of the underlying yield vault." - }, - "provider": { - "$ref": "#/definitions/EarnProvider", - "description": "Yield provider for the vault." + "enum": ["ACTIVITY_TYPE_DELETE_WALLETS"] }, - "caip19": { + "timestampMs": { "type": "string", - "description": "CAIP-19 asset ID of the vault's underlying asset (e.g. 'eip155:8453/erc20:0x833589...'); the chain is encoded in the identifier." + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, - "tvl": { + "organizationId": { "type": "string", - "description": "Total value locked in the vault, in raw on-chain units of the underlying asset. The catalog is sorted by the USD value of this." + "description": "Unique identifier for a given Organization." }, - "apyPct": { - "type": "string", - "description": "Current annual percentage yield, expressed as a decimal fraction (e.g., '0.0812' for 8.12%)." + "parameters": { + "$ref": "#/definitions/DeleteWalletsIntent" }, - "enabled": { + "generateAppProofs": { "type": "boolean", - "description": "Whether the organization has enabled this vault." - }, - "display": { - "$ref": "#/definitions/EarnValueDisplay", - "description": "Normalized TVL values for display purposes only (usd + crypto). Do not do arithmetic with these; use tvl instead." - }, - "name": { - "type": "string", - "description": "Human-readable vault name from the provider (e.g. 'Steakhouse Prime USDC' for Morpho; the reserve symbol for Aave)." - }, - "curator": { - "type": "string", - "description": "Vault curator name(s), comma-separated when a vault has multiple. Empty for providers without curators (e.g. Aave)." + "x-nullable": true } - } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "EarnWithdrawIntent": { + "DeleteWalletsResult": { "type": "object", "properties": { - "wrapperAddress": { - "type": "string", - "description": "Address of the deployed Earn wrapper holding the position to withdraw from, from ListEarnPositions. Must be one of the org's deployed wrappers." - }, - "signWith": { - "type": "string", - "description": "A Wallet account address or Private Key address to withdraw to and sign with. Must be an on-chain address; Private Key identifiers are not supported." - }, - "chainCaip2": { - "type": "string", - "enum": [ - "eip155:1", - "eip155:8453", - "eip155:42161", - "eip155:137", - "eip155:56", - "eip155:4217" - ], - "description": "CAIP-2 chain ID the vault lives on (e.g., 'eip155:8453' for Base)." - }, - "sponsor": { - "type": "boolean", - "x-nullable": true, - "description": "Whether to sponsor this transaction via Gas Station." - }, - "amountValue": { + "walletIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of wallet unique identifiers that were removed" + } + }, + "required": ["walletIds"] + }, + "DeleteWebhookEndpointIntent": { + "type": "object", + "properties": { + "endpointId": { "type": "string", - "description": "The amount of the underlying asset to withdraw, in raw on-chain units. Pass 'MAX' to withdraw the entire position." + "description": "Unique identifier of the webhook endpoint to delete." } }, - "required": [ - "wrapperAddress", - "signWith", - "chainCaip2", - "amountValue" - ] + "required": ["endpointId"] }, - "EarnWithdrawRequest": { + "DeleteWebhookEndpointRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_EARN_WITHDRAW" - ] + "enum": ["ACTIVITY_TYPE_DELETE_WEBHOOK_ENDPOINT"] }, "timestampMs": { "type": "string", @@ -10217,38 +8474,83 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/definitions/EarnWithdrawIntent" + "$ref": "#/definitions/DeleteWebhookEndpointIntent" }, "generateAppProofs": { "type": "boolean", "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "DeleteWebhookEndpointResult": { + "type": "object", + "properties": { + "endpointId": { + "type": "string", + "description": "Unique identifier of the deleted webhook endpoint." + } + }, + "required": ["endpointId"] + }, + "DeploymentStatus": { + "type": "object", + "properties": { + "deploymentId": { + "type": "string", + "description": "Unique identifier for this deployment (corresponds to k8s deployment label)" + }, + "readyReplicas": { + "type": "integer", + "format": "int32", + "description": "Number of ready replicas" + }, + "desiredReplicas": { + "type": "integer", + "format": "int32", + "description": "Desired number of replicas" + }, + "lastUpdatedTime": { + "$ref": "#/definitions/external.data.v1.Timestamp", + "description": "Last time this deployment was updated" + } + }, + "required": [ + "deploymentId", + "readyReplicas", + "desiredReplicas", + "lastUpdatedTime" + ] + }, + "DisableAuthProxyIntent": { + "type": "object" + }, + "DisableAuthProxyResult": { + "type": "object" + }, + "DisablePrivateKeyIntent": { + "type": "object", + "properties": { + "privateKeyId": { + "type": "string", + "description": "Unique identifier for a given Private Key." + } + }, + "required": ["privateKeyId"] }, - "EarnWithdrawResult": { + "DisablePrivateKeyResult": { "type": "object", "properties": { - "withdrawRequestId": { + "privateKeyId": { "type": "string", - "description": "Identifier to poll withdrawal status and tx hash via GetEarnWithdrawStatus." + "description": "Unique identifier for a given Private Key." } }, - "required": [ - "withdrawRequestId" - ] + "required": ["privateKeyId"] }, "Effect": { "type": "string", - "enum": [ - "EFFECT_ALLOW", - "EFFECT_DENY" - ] + "enum": ["EFFECT_ALLOW", "EFFECT_DENY"] }, "EmailAuthCustomizationParams": { "type": "object", @@ -10278,9 +8580,7 @@ "description": "Unique identifier for a given Email Template. If not specified, the default is the most recent Email Template." } }, - "required": [ - "appName" - ] + "required": ["appName"] }, "EmailAuthIntent": { "type": "object", @@ -10329,10 +8629,7 @@ "description": "Optional custom email address to use as reply-to" } }, - "required": [ - "email", - "targetPublicKey" - ] + "required": ["email", "targetPublicKey"] }, "EmailAuthIntentV2": { "type": "object", @@ -10381,10 +8678,7 @@ "description": "Optional custom email address to use as reply-to" } }, - "required": [ - "email", - "targetPublicKey" - ] + "required": ["email", "targetPublicKey"] }, "EmailAuthIntentV3": { "type": "object", @@ -10432,20 +8726,14 @@ "description": "Optional custom email address to use as reply-to" } }, - "required": [ - "email", - "targetPublicKey", - "emailCustomization" - ] + "required": ["email", "targetPublicKey", "emailCustomization"] }, "EmailAuthRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_EMAIL_AUTH_V3" - ] + "enum": ["ACTIVITY_TYPE_EMAIL_AUTH_V3"] }, "timestampMs": { "type": "string", @@ -10463,12 +8751,7 @@ "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, "EmailAuthResult": { "type": "object", @@ -10482,10 +8765,7 @@ "description": "Unique identifier for the created API key." } }, - "required": [ - "userId", - "apiKeyId" - ] + "required": ["userId", "apiKeyId"] }, "EmailCustomizationParams": { "type": "object", @@ -10553,9 +8833,7 @@ "description": "A User ID with permission to initiate authentication." } }, - "required": [ - "userId" - ] + "required": ["userId"] }, "EthCallParams": { "type": "object", @@ -10575,9 +8853,7 @@ "description": "Hex-encoded call data for contract interactions." } }, - "required": [ - "to" - ] + "required": ["to"] }, "EthFailureDetails": { "type": "object", @@ -10622,10 +8898,7 @@ "description": "CAIP-2 chain ID (e.g., 'eip155:1' for Ethereum mainnet)." } }, - "required": [ - "signedTransaction", - "caip2" - ] + "required": ["signedTransaction", "caip2"] }, "EthSendRawTransactionResult": { "type": "object", @@ -10635,9 +8908,7 @@ "description": "The transaction hash of the sent transaction" } }, - "required": [ - "transactionHash" - ] + "required": ["transactionHash"] }, "EthSendTransactionIntent": { "type": "object", @@ -10718,11 +8989,7 @@ "description": "The gas station delegate contract nonce. Only used when sponsor=true. Include this if you want maximal security posture." } }, - "required": [ - "from", - "caip2", - "to" - ] + "required": ["from", "caip2", "to"] }, "EthSendTransactionIntentV2": { "type": "object", @@ -10797,20 +9064,14 @@ "description": "Ordered list of calls to execute. Must contain between 1 and 50 entries. A single entry with sponsor=false uses EIP-1559; multiple entries use EIP-7702 batch execution via Gas Station." } }, - "required": [ - "from", - "caip2", - "calls" - ] + "required": ["from", "caip2", "calls"] }, "EthSendTransactionRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_ETH_SEND_TRANSACTION_V2" - ] + "enum": ["ACTIVITY_TYPE_ETH_SEND_TRANSACTION_V2"] }, "timestampMs": { "type": "string", @@ -10828,12 +9089,7 @@ "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, "EthSendTransactionResult": { "type": "object", @@ -10843,9 +9099,7 @@ "description": "The send_transaction_status ID associated with the transaction submission" } }, - "required": [ - "sendTransactionStatusId" - ] + "required": ["sendTransactionStatusId"] }, "EthSendTransactionResultV2": { "type": "object", @@ -10855,9 +9109,7 @@ "description": "The send_transaction_status ID associated with the transaction submission" } }, - "required": [ - "sendTransactionStatusId" - ] + "required": ["sendTransactionStatusId"] }, "EthSendTransactionStatus": { "type": "object", @@ -10869,75 +9121,6 @@ } } }, - "ExecuteSwapIntent": { - "type": "object", - "properties": { - "inputToken": { - "type": "string", - "description": "CAIP-19 asset ID for the input asset. The chain is derived from this value." - }, - "outputToken": { - "type": "string", - "description": "CAIP-19 asset ID for the output asset. May be on a different chain than `input_token` for cross-chain swaps." - }, - "inputAmount": { - "type": "string", - "description": "Base-unit amount of the input asset." - }, - "walletAccount": { - "type": "string", - "description": "Wallet account address to sign and submit the swap transaction from. Cross-wallet swaps are not supported." - }, - "sponsor": { - "type": "boolean", - "x-nullable": true, - "description": "Whether to sponsor the resulting swap transaction via Gas Station when supported by the chain." - }, - "slippage": { - "type": "string", - "x-nullable": true, - "description": "Maximum allowed slippage in basis points." - }, - "provider": { - "type": "string", - "x-nullable": true, - "description": "Swap provider to execute with, as returned by get_swap_quote. When omitted, execution uses the default provider." - }, - "minOutputAmount": { - "type": "string", - "description": "Minimum acceptable base-unit amount of the output asset. Execution fails if the swap provider's quoted minimum output falls below this floor at execution time." - } - }, - "required": [ - "inputToken", - "outputToken", - "inputAmount", - "walletAccount", - "minOutputAmount" - ] - }, - "ExecuteSwapResult": { - "type": "object", - "properties": { - "sendTransactionStatusId": { - "type": "string", - "description": "The send_transaction_status ID associated with the swap transaction submission" - }, - "provider": { - "type": "string", - "x-nullable": true, - "description": "Swap provider used to build the transaction." - }, - "quoteId": { - "type": "string", - "x-nullable": true, - "description": "Quote identifier used for execution, if any." - } - }, - "required": [ - "sendTransactionStatusId" - ] - }, "ExportPrivateKeyIntent": { "type": "object", "properties": { @@ -10950,19 +9133,14 @@ "description": "Client-side public key generated by the user, to which the export bundle will be encrypted." } }, - "required": [ - "privateKeyId", - "targetPublicKey" - ] + "required": ["privateKeyId", "targetPublicKey"] }, "ExportPrivateKeyRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_EXPORT_PRIVATE_KEY" - ] + "enum": ["ACTIVITY_TYPE_EXPORT_PRIVATE_KEY"] }, "timestampMs": { "type": "string", @@ -10980,12 +9158,7 @@ "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, "ExportPrivateKeyResult": { "type": "object", @@ -10999,10 +9172,7 @@ "description": "Export bundle containing a private key encrypted to the client's target public key." } }, - "required": [ - "privateKeyId", - "exportBundle" - ] + "required": ["privateKeyId", "exportBundle"] }, "ExportWalletAccountIntent": { "type": "object", @@ -11016,19 +9186,14 @@ "description": "Client-side public key generated by the user, to which the export bundle will be encrypted." } }, - "required": [ - "address", - "targetPublicKey" - ] + "required": ["address", "targetPublicKey"] }, "ExportWalletAccountRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_EXPORT_WALLET_ACCOUNT" - ] + "enum": ["ACTIVITY_TYPE_EXPORT_WALLET_ACCOUNT"] }, "timestampMs": { "type": "string", @@ -11046,12 +9211,7 @@ "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, "ExportWalletAccountResult": { "type": "object", @@ -11065,10 +9225,7 @@ "description": "Export bundle containing a private key encrypted by the client's target public key." } }, - "required": [ - "address", - "exportBundle" - ] + "required": ["address", "exportBundle"] }, "ExportWalletIntent": { "type": "object", @@ -11087,19 +9244,14 @@ "description": "The language of the mnemonic to export. Defaults to English." } }, - "required": [ - "walletId", - "targetPublicKey" - ] + "required": ["walletId", "targetPublicKey"] }, "ExportWalletRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_EXPORT_WALLET" - ] + "enum": ["ACTIVITY_TYPE_EXPORT_WALLET"] }, "timestampMs": { "type": "string", @@ -11117,12 +9269,7 @@ "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, "ExportWalletResult": { "type": "object", @@ -11136,10 +9283,7 @@ "description": "Export bundle containing a wallet mnemonic + optional newline passphrase encrypted by the client's target public key." } }, - "required": [ - "walletId", - "exportBundle" - ] + "required": ["walletId", "exportBundle"] }, "Feature": { "type": "object", @@ -11164,9 +9308,7 @@ "FEATURE_NAME_SMS_AUTH", "FEATURE_NAME_OTP_EMAIL_AUTH", "FEATURE_NAME_AUTH_PROXY", - "FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED", - "FEATURE_NAME_SWAP_CONFIG", - "FEATURE_NAME_EARN_CONFIG" + "FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED" ] }, "FiatOnRampBlockchainNetwork": { @@ -11331,9 +9473,7 @@ "description": "Array of activity types filtering which activities will be listed in the response." } }, - "required": [ - "organizationId" - ] + "required": ["organizationId"] }, "GetActivitiesResponse": { "type": "object", @@ -11347,9 +9487,7 @@ "description": "A list of activities." } }, - "required": [ - "activities" - ] + "required": ["activities"] }, "GetActivityRequest": { "type": "object", @@ -11363,10 +9501,7 @@ "description": "Unique identifier for a given activity object." } }, - "required": [ - "organizationId", - "activityId" - ] + "required": ["organizationId", "activityId"] }, "GetApiKeyRequest": { "type": "object", @@ -11380,10 +9515,7 @@ "description": "Unique identifier for a given API key." } }, - "required": [ - "organizationId", - "apiKeyId" - ] + "required": ["organizationId", "apiKeyId"] }, "GetApiKeyResponse": { "type": "object", @@ -11393,9 +9525,7 @@ "description": "An API key." } }, - "required": [ - "apiKey" - ] + "required": ["apiKey"] }, "GetApiKeysRequest": { "type": "object", @@ -11410,9 +9540,7 @@ "description": "Unique identifier for a given user." } }, - "required": [ - "organizationId" - ] + "required": ["organizationId"] }, "GetApiKeysResponse": { "type": "object", @@ -11426,9 +9554,7 @@ "description": "A list of API keys." } }, - "required": [ - "apiKeys" - ] + "required": ["apiKeys"] }, "GetAppProofsRequest": { "type": "object", @@ -11442,265 +9568,110 @@ "description": "Unique identifier for a given activity." } }, - "required": [ - "organizationId", - "activityId" - ] + "required": ["organizationId", "activityId"] }, "GetAppProofsResponse": { "type": "object", "properties": { "appProofs": { "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/AppProof" - } - } - }, - "required": [ - "appProofs" - ] - }, - "GetAppStatusRequest": { - "type": "object", - "properties": { - "organizationId": { - "type": "string", - "description": "Unique identifier for a given Organization." - }, - "appId": { - "type": "string", - "description": "Unique identifier for a given TVC App." - } - }, - "required": [ - "organizationId", - "appId" - ] - }, - "GetAppStatusResponse": { - "type": "object", - "properties": { - "appStatus": { - "$ref": "#/definitions/AppStatus", - "description": "Live runtime status for the TVC App" - } - }, - "required": [ - "appStatus" - ] - }, - "GetAuthenticatorRequest": { - "type": "object", - "properties": { - "organizationId": { - "type": "string", - "description": "Unique identifier for a given organization." - }, - "authenticatorId": { - "type": "string", - "description": "Unique identifier for a given authenticator." - } - }, - "required": [ - "organizationId", - "authenticatorId" - ] - }, - "GetAuthenticatorResponse": { - "type": "object", - "properties": { - "authenticator": { - "$ref": "#/definitions/Authenticator", - "description": "An authenticator." - } - }, - "required": [ - "authenticator" - ] - }, - "GetAuthenticatorsRequest": { - "type": "object", - "properties": { - "organizationId": { - "type": "string", - "description": "Unique identifier for a given organization." - }, - "userId": { - "type": "string", - "description": "Unique identifier for a given user." - } - }, - "required": [ - "organizationId", - "userId" - ] - }, - "GetAuthenticatorsResponse": { - "type": "object", - "properties": { - "authenticators": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/Authenticator" - }, - "description": "A list of authenticators." - } - }, - "required": [ - "authenticators" - ] - }, - "GetBootProofRequest": { - "type": "object", - "properties": { - "organizationId": { - "type": "string", - "description": "Unique identifier for a given Organization." - }, - "ephemeralKey": { - "type": "string", - "description": "Hex encoded ephemeral public key." + "items": { + "type": "object", + "$ref": "#/definitions/AppProof" + } } }, - "required": [ - "organizationId", - "ephemeralKey" - ] + "required": ["appProofs"] }, - "GetEarnDeployStatusRequest": { + "GetAppStatusRequest": { "type": "object", "properties": { "organizationId": { "type": "string", "description": "Unique identifier for a given Organization." }, - "deployRequestId": { + "appId": { "type": "string", - "description": "The deploy_request_id returned by EarnDeployWrapper." + "description": "Unique identifier for a given TVC App." } }, - "required": [ - "organizationId", - "deployRequestId" - ] + "required": ["organizationId", "appId"] }, - "GetEarnDeployStatusResponse": { + "GetAppStatusResponse": { "type": "object", "properties": { - "status": { - "type": "string", - "enum": [ - "PENDING", - "COMPLETED", - "FAILED" - ], - "description": "Status of the wrapper deployment." - }, - "deployTxHash": { - "type": "string", - "x-nullable": true, - "description": "Transaction hash of the deployment, once available." - }, - "error": { - "type": "string", - "x-nullable": true, - "description": "Reason the deployment transaction failed, when status is FAILED." + "appStatus": { + "$ref": "#/definitions/AppStatus", + "description": "Live runtime status for the TVC App" } }, - "required": [ - "status" - ] + "required": ["appStatus"] }, - "GetEarnDepositStatusRequest": { + "GetAuthenticatorRequest": { "type": "object", "properties": { "organizationId": { "type": "string", - "description": "Unique identifier for a given Organization." + "description": "Unique identifier for a given organization." }, - "depositRequestId": { + "authenticatorId": { "type": "string", - "description": "The deposit_request_id returned by EarnDeposit." + "description": "Unique identifier for a given authenticator." } }, - "required": [ - "organizationId", - "depositRequestId" - ] + "required": ["organizationId", "authenticatorId"] }, - "GetEarnDepositStatusResponse": { + "GetAuthenticatorResponse": { "type": "object", "properties": { - "status": { - "type": "string", - "enum": [ - "PENDING", - "COMPLETED", - "FAILED" - ], - "description": "Status of the deposit." - }, - "depositTxHash": { - "type": "string", - "x-nullable": true, - "description": "Transaction hash of the deposit, once available." - }, - "error": { - "type": "string", - "x-nullable": true, - "description": "Reason the deposit transaction failed, when status is FAILED." + "authenticator": { + "$ref": "#/definitions/Authenticator", + "description": "An authenticator." } }, - "required": [ - "status" - ] + "required": ["authenticator"] }, - "GetEarnWithdrawStatusRequest": { + "GetAuthenticatorsRequest": { "type": "object", "properties": { "organizationId": { "type": "string", - "description": "Unique identifier for a given Organization." + "description": "Unique identifier for a given organization." }, - "withdrawRequestId": { + "userId": { "type": "string", - "description": "The withdraw_request_id returned by EarnWithdraw." + "description": "Unique identifier for a given user." } }, - "required": [ - "organizationId", - "withdrawRequestId" - ] + "required": ["organizationId", "userId"] }, - "GetEarnWithdrawStatusResponse": { + "GetAuthenticatorsResponse": { "type": "object", "properties": { - "status": { - "type": "string", - "enum": [ - "PENDING", - "COMPLETED", - "FAILED" - ], - "description": "Status of the withdrawal." - }, - "withdrawTxHash": { + "authenticators": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/Authenticator" + }, + "description": "A list of authenticators." + } + }, + "required": ["authenticators"] + }, + "GetBootProofRequest": { + "type": "object", + "properties": { + "organizationId": { "type": "string", - "x-nullable": true, - "description": "Transaction hash of the withdrawal, once available." + "description": "Unique identifier for a given Organization." }, - "error": { + "ephemeralKey": { "type": "string", - "x-nullable": true, - "description": "Reason the withdrawal transaction failed, when status is FAILED." + "description": "Hex encoded ephemeral public key." } }, - "required": [ - "status" - ] + "required": ["organizationId", "ephemeralKey"] }, "GetGasUsageRequest": { "type": "object", @@ -11710,9 +9681,7 @@ "description": "Unique identifier for a given Organization." } }, - "required": [ - "organizationId" - ] + "required": ["organizationId"] }, "GetGasUsageResponse": { "type": "object", @@ -11731,11 +9700,7 @@ "description": "The total gas usage (in USD) of all sponsored transactions processed over the last `window_duration_minutes`" } }, - "required": [ - "windowDurationMinutes", - "windowLimitUsd", - "usageUsd" - ] + "required": ["windowDurationMinutes", "windowLimitUsd", "usageUsd"] }, "GetIpAllowlistRequest": { "type": "object", @@ -11750,9 +9715,7 @@ "description": "If provided, return only the allowlist for this specific API key." } }, - "required": [ - "organizationId" - ] + "required": ["organizationId"] }, "GetIpAllowlistResponse": { "type": "object", @@ -11761,9 +9724,7 @@ "$ref": "#/definitions/IpAllowlist" } }, - "required": [ - "allowlist" - ] + "required": ["allowlist"] }, "GetLatestBootProofRequest": { "type": "object", @@ -11777,10 +9738,7 @@ "description": "Name of enclave app." } }, - "required": [ - "organizationId", - "appName" - ] + "required": ["organizationId", "appName"] }, "GetMfaPoliciesRequest": { "type": "object", @@ -11794,10 +9752,7 @@ "description": "Unique identifier for a given user." } }, - "required": [ - "organizationId", - "userId" - ] + "required": ["organizationId", "userId"] }, "GetMfaPoliciesResponse": { "type": "object", @@ -11811,9 +9766,7 @@ "description": "A list of multi-factor authentication policies for a user." } }, - "required": [ - "mfaPolicies" - ] + "required": ["mfaPolicies"] }, "GetMfaPolicyRequest": { "type": "object", @@ -11831,11 +9784,7 @@ "description": "Unique identifier for a given MFA policy." } }, - "required": [ - "organizationId", - "userId", - "mfaPolicyId" - ] + "required": ["organizationId", "userId", "mfaPolicyId"] }, "GetMfaPolicyResponse": { "type": "object", @@ -11845,9 +9794,7 @@ "description": "Multi-factor authentication policy for a user." } }, - "required": [ - "mfaPolicy" - ] + "required": ["mfaPolicy"] }, "GetMfaStatusRequest": { "type": "object", @@ -11866,10 +9813,7 @@ "description": "Optional user ID to filter MFA status for a specific user." } }, - "required": [ - "organizationId", - "activityId" - ] + "required": ["organizationId", "activityId"] }, "GetMfaStatusResponse": { "type": "object", @@ -11883,9 +9827,7 @@ "description": "A list of MFA statuses for the activity's votes." } }, - "required": [ - "mfaStatuses" - ] + "required": ["mfaStatuses"] }, "GetNoncesRequest": { "type": "object", @@ -11929,11 +9871,7 @@ "description": "Whether to fetch the gas station nonce used for sponsored transactions." } }, - "required": [ - "organizationId", - "address", - "caip2" - ] + "required": ["organizationId", "address", "caip2"] }, "GetNoncesResponse": { "type": "object", @@ -11964,10 +9902,7 @@ "description": "Unique identifier for a given OAuth 2.0 Credential." } }, - "required": [ - "organizationId", - "oauth2CredentialId" - ] + "required": ["organizationId", "oauth2CredentialId"] }, "GetOauth2CredentialResponse": { "type": "object", @@ -11976,9 +9911,7 @@ "$ref": "#/definitions/Oauth2Credential" } }, - "required": [ - "oauth2Credential" - ] + "required": ["oauth2Credential"] }, "GetOauthProvidersRequest": { "type": "object", @@ -11993,9 +9926,7 @@ "description": "Unique identifier for a given user." } }, - "required": [ - "organizationId" - ] + "required": ["organizationId"] }, "GetOauthProvidersResponse": { "type": "object", @@ -12009,9 +9940,7 @@ "description": "A list of Oauth providers." } }, - "required": [ - "oauthProviders" - ] + "required": ["oauthProviders"] }, "GetOnRampTransactionStatusRequest": { "type": "object", @@ -12030,10 +9959,7 @@ "description": "Optional flag to specify if the transaction status should be refreshed from the fiat on ramp provider. Default = false." } }, - "required": [ - "organizationId", - "transactionId" - ] + "required": ["organizationId", "transactionId"] }, "GetOnRampTransactionStatusResponse": { "type": "object", @@ -12043,9 +9969,7 @@ "description": "The status of the fiat on ramp transaction." } }, - "required": [ - "transactionStatus" - ] + "required": ["transactionStatus"] }, "GetOrganizationConfigsRequest": { "type": "object", @@ -12055,9 +9979,7 @@ "description": "Unique identifier for a given organization." } }, - "required": [ - "organizationId" - ] + "required": ["organizationId"] }, "GetOrganizationConfigsResponse": { "type": "object", @@ -12067,9 +9989,7 @@ "description": "Organization configs including quorum settings and organization features." } }, - "required": [ - "configs" - ] + "required": ["configs"] }, "GetPoliciesRequest": { "type": "object", @@ -12079,9 +9999,7 @@ "description": "Unique identifier for a given organization." } }, - "required": [ - "organizationId" - ] + "required": ["organizationId"] }, "GetPoliciesResponse": { "type": "object", @@ -12095,9 +10013,7 @@ "description": "A list of policies." } }, - "required": [ - "policies" - ] + "required": ["policies"] }, "GetPolicyEvaluationsRequest": { "type": "object", @@ -12111,10 +10027,7 @@ "description": "Unique identifier for a given activity." } }, - "required": [ - "organizationId", - "activityId" - ] + "required": ["organizationId", "activityId"] }, "GetPolicyEvaluationsResponse": { "type": "object", @@ -12127,9 +10040,7 @@ } } }, - "required": [ - "policyEvaluations" - ] + "required": ["policyEvaluations"] }, "GetPolicyRequest": { "type": "object", @@ -12143,10 +10054,7 @@ "description": "Unique identifier for a given policy." } }, - "required": [ - "organizationId", - "policyId" - ] + "required": ["organizationId", "policyId"] }, "GetPolicyResponse": { "type": "object", @@ -12156,9 +10064,7 @@ "description": "Object that codifies rules defining the actions that are permissible within an organization." } }, - "required": [ - "policy" - ] + "required": ["policy"] }, "GetPrivateKeyRequest": { "type": "object", @@ -12172,10 +10078,7 @@ "description": "Unique identifier for a given private key." } }, - "required": [ - "organizationId", - "privateKeyId" - ] + "required": ["organizationId", "privateKeyId"] }, "GetPrivateKeyResponse": { "type": "object", @@ -12185,9 +10088,7 @@ "description": "Cryptographic public/private key pair that can be used for cryptocurrency needs or more generalized encryption." } }, - "required": [ - "privateKey" - ] + "required": ["privateKey"] }, "GetPrivateKeysRequest": { "type": "object", @@ -12197,9 +10098,7 @@ "description": "Unique identifier for a given organization." } }, - "required": [ - "organizationId" - ] + "required": ["organizationId"] }, "GetPrivateKeysResponse": { "type": "object", @@ -12213,9 +10112,7 @@ "description": "A list of private keys." } }, - "required": [ - "privateKeys" - ] + "required": ["privateKeys"] }, "GetSendTransactionStatusRequest": { "type": "object", @@ -12229,10 +10126,7 @@ "description": "The unique identifier of a send transaction request." } }, - "required": [ - "organizationId", - "sendTransactionStatusId" - ] + "required": ["organizationId", "sendTransactionStatusId"] }, "GetSendTransactionStatusResponse": { "type": "object", @@ -12260,9 +10154,7 @@ "description": "Structured error information including revert details, if available." } }, - "required": [ - "txStatus" - ] + "required": ["txStatus"] }, "GetSessionProfileRequest": { "type": "object", @@ -12276,10 +10168,7 @@ "description": "Unique identifier for a session profile." } }, - "required": [ - "organizationId", - "sessionProfileId" - ] + "required": ["organizationId", "sessionProfileId"] }, "GetSessionProfileResponse": { "type": "object", @@ -12289,9 +10178,7 @@ "description": "Session profile for a user, including details about the user's authenticators, Oauth providers, API keys, and MFA policies." } }, - "required": [ - "sessionProfile" - ] + "required": ["sessionProfile"] }, "GetSessionProfilesRequest": { "type": "object", @@ -12301,9 +10188,7 @@ "description": "Unique identifier for a given organization." } }, - "required": [ - "organizationId" - ] + "required": ["organizationId"] }, "GetSessionProfilesResponse": { "type": "object", @@ -12317,9 +10202,7 @@ "description": "A list of session profiles for users in the organization." } }, - "required": [ - "sessionProfiles" - ] + "required": ["sessionProfiles"] }, "GetSmartContractInterfaceRequest": { "type": "object", @@ -12333,10 +10216,7 @@ "description": "Unique identifier for a given smart contract interface." } }, - "required": [ - "organizationId", - "smartContractInterfaceId" - ] + "required": ["organizationId", "smartContractInterfaceId"] }, "GetSmartContractInterfaceResponse": { "type": "object", @@ -12346,9 +10226,7 @@ "description": "Object to be used in conjunction with policies to guard transaction signing." } }, - "required": [ - "smartContractInterface" - ] + "required": ["smartContractInterface"] }, "GetSmartContractInterfacesRequest": { "type": "object", @@ -12358,9 +10236,7 @@ "description": "Unique identifier for a given organization." } }, - "required": [ - "organizationId" - ] + "required": ["organizationId"] }, "GetSmartContractInterfacesResponse": { "type": "object", @@ -12374,9 +10250,7 @@ "description": "A list of smart contract interfaces." } }, - "required": [ - "smartContractInterfaces" - ] + "required": ["smartContractInterfaces"] }, "GetSubOrgIdsRequest": { "type": "object", @@ -12398,9 +10272,7 @@ "description": "Parameters used for cursor-based pagination." } }, - "required": [ - "organizationId" - ] + "required": ["organizationId"] }, "GetSubOrgIdsResponse": { "type": "object", @@ -12413,9 +10285,7 @@ "description": "List of unique identifiers for the matching sub-organizations." } }, - "required": [ - "organizationIds" - ] + "required": ["organizationIds"] }, "GetTvcAppDeploymentsRequest": { "type": "object", @@ -12429,10 +10299,7 @@ "description": "Unique identifier for a given TVC App." } }, - "required": [ - "organizationId", - "appId" - ] + "required": ["organizationId", "appId"] }, "GetTvcAppDeploymentsResponse": { "type": "object", @@ -12446,9 +10313,7 @@ "description": "List of deployments for this TVC App" } }, - "required": [ - "tvcDeployments" - ] + "required": ["tvcDeployments"] }, "GetTvcAppRequest": { "type": "object", @@ -12462,10 +10327,7 @@ "description": "Unique identifier for a given TVC App." } }, - "required": [ - "organizationId", - "tvcAppId" - ] + "required": ["organizationId", "tvcAppId"] }, "GetTvcAppResponse": { "type": "object", @@ -12475,9 +10337,7 @@ "description": "Details about a single TVC App" } }, - "required": [ - "tvcApp" - ] + "required": ["tvcApp"] }, "GetTvcAppsRequest": { "type": "object", @@ -12487,9 +10347,7 @@ "description": "Unique identifier for a given organization." } }, - "required": [ - "organizationId" - ] + "required": ["organizationId"] }, "GetTvcAppsResponse": { "type": "object", @@ -12503,9 +10361,7 @@ "description": "A list of TVC Apps." } }, - "required": [ - "tvcApps" - ] + "required": ["tvcApps"] }, "GetTvcDeploymentDebugLogsRequest": { "type": "object", @@ -12529,10 +10385,7 @@ "description": "Return logs newer than this many seconds ago. If unset or zero, no since-time limit is applied. Useful for clients that poll to follow logs." } }, - "required": [ - "organizationId", - "deploymentId" - ] + "required": ["organizationId", "deploymentId"] }, "GetTvcDeploymentDebugLogsResponse": { "type": "object", @@ -12546,9 +10399,7 @@ "description": "Application log entries sorted by platform timestamp." } }, - "required": [ - "entries" - ] + "required": ["entries"] }, "GetTvcDeploymentRequest": { "type": "object", @@ -12562,10 +10413,7 @@ "description": "Unique identifier for a given TVC Deployment." } }, - "required": [ - "organizationId", - "deploymentId" - ] + "required": ["organizationId", "deploymentId"] }, "GetTvcDeploymentResponse": { "type": "object", @@ -12575,9 +10423,7 @@ "description": "Details about a single TVC Deployment" } }, - "required": [ - "tvcDeployment" - ] + "required": ["tvcDeployment"] }, "GetUserRequest": { "type": "object", @@ -12591,10 +10437,7 @@ "description": "Unique identifier for a given user." } }, - "required": [ - "organizationId", - "userId" - ] + "required": ["organizationId", "userId"] }, "GetUserResponse": { "type": "object", @@ -12604,9 +10447,7 @@ "description": "Web and/or API user within your organization." } }, - "required": [ - "user" - ] + "required": ["user"] }, "GetUsersRequest": { "type": "object", @@ -12616,9 +10457,7 @@ "description": "Unique identifier for a given organization." } }, - "required": [ - "organizationId" - ] + "required": ["organizationId"] }, "GetUsersResponse": { "type": "object", @@ -12632,9 +10471,7 @@ "description": "A list of users." } }, - "required": [ - "users" - ] + "required": ["users"] }, "GetVerifiedSubOrgIdsRequest": { "type": "object", @@ -12656,9 +10493,7 @@ "description": "Parameters used for cursor-based pagination." } }, - "required": [ - "organizationId" - ] + "required": ["organizationId"] }, "GetVerifiedSubOrgIdsResponse": { "type": "object", @@ -12671,9 +10506,7 @@ "description": "List of unique identifiers for the matching sub-organizations." } }, - "required": [ - "organizationIds" - ] + "required": ["organizationIds"] }, "GetWalletAccountRequest": { "type": "object", @@ -12697,10 +10530,7 @@ "description": "Path corresponding to a wallet account." } }, - "required": [ - "organizationId", - "walletId" - ] + "required": ["organizationId", "walletId"] }, "GetWalletAccountResponse": { "type": "object", @@ -12710,9 +10540,7 @@ "description": "The resulting wallet account." } }, - "required": [ - "account" - ] + "required": ["account"] }, "GetWalletAccountsRequest": { "type": "object", @@ -12736,9 +10564,7 @@ "description": "Parameters used for cursor-based pagination." } }, - "required": [ - "organizationId" - ] + "required": ["organizationId"] }, "GetWalletAccountsResponse": { "type": "object", @@ -12752,9 +10578,7 @@ "description": "A list of accounts generated from a wallet that share a common seed." } }, - "required": [ - "accounts" - ] + "required": ["accounts"] }, "GetWalletAddressBalancesRequest": { "type": "object", @@ -12792,11 +10616,7 @@ "description": "CAIP-2 chain ID (e.g., 'eip155:1' for Ethereum mainnet or 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' for Solana mainnet). Human-readable Solana aliases ('solana:mainnet', 'solana:devnet') are also accepted and normalized to canonical CAIP-2 values." } }, - "required": [ - "organizationId", - "address", - "caip2" - ] + "required": ["organizationId", "address", "caip2"] }, "GetWalletAddressBalancesResponse": { "type": "object", @@ -12823,10 +10643,7 @@ "description": "Unique identifier for a given wallet." } }, - "required": [ - "organizationId", - "walletId" - ] + "required": ["organizationId", "walletId"] }, "GetWalletResponse": { "type": "object", @@ -12836,9 +10653,7 @@ "description": "A collection of deterministically generated cryptographic public / private key pairs that share a common seed." } }, - "required": [ - "wallet" - ] + "required": ["wallet"] }, "GetWalletsRequest": { "type": "object", @@ -12848,9 +10663,7 @@ "description": "Unique identifier for a given organization." } }, - "required": [ - "organizationId" - ] + "required": ["organizationId"] }, "GetWalletsResponse": { "type": "object", @@ -12864,9 +10677,7 @@ "description": "A list of wallets." } }, - "required": [ - "wallets" - ] + "required": ["wallets"] }, "GetWhoamiRequest": { "type": "object", @@ -12876,9 +10687,7 @@ "description": "Unique identifier for a given organization. If the request is being made by a WebAuthN user and their sub-organization ID is unknown, this can be the parent organization ID; using the sub-organization ID when possible is preferred due to performance reasons." } }, - "required": [ - "organizationId" - ] + "required": ["organizationId"] }, "GetWhoamiResponse": { "type": "object", @@ -12900,12 +10709,7 @@ "description": "Human-readable name for a user." } }, - "required": [ - "organizationId", - "organizationName", - "userId", - "username" - ] + "required": ["organizationId", "organizationName", "userId", "username"] }, "HashFunction": { "type": "string", @@ -12956,9 +10760,7 @@ "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_IMPORT_PRIVATE_KEY" - ] + "enum": ["ACTIVITY_TYPE_IMPORT_PRIVATE_KEY"] }, "timestampMs": { "type": "string", @@ -12976,12 +10778,7 @@ "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, "ImportPrivateKeyResult": { "type": "object", @@ -12999,10 +10796,7 @@ "description": "A list of addresses." } }, - "required": [ - "privateKeyId", - "addresses" - ] + "required": ["privateKeyId", "addresses"] }, "ImportWalletIntent": { "type": "object", @@ -13028,21 +10822,14 @@ "description": "A list of wallet Accounts." } }, - "required": [ - "userId", - "walletName", - "encryptedBundle", - "accounts" - ] + "required": ["userId", "walletName", "encryptedBundle", "accounts"] }, "ImportWalletRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_IMPORT_WALLET" - ] + "enum": ["ACTIVITY_TYPE_IMPORT_WALLET"] }, "timestampMs": { "type": "string", @@ -13060,12 +10847,7 @@ "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, "ImportWalletResult": { "type": "object", @@ -13082,10 +10864,7 @@ "description": "A list of account addresses." } }, - "required": [ - "walletId", - "addresses" - ] + "required": ["walletId", "addresses"] }, "InitFiatOnRampIntent": { "type": "object", @@ -13154,9 +10933,7 @@ "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_INIT_FIAT_ON_RAMP" - ] + "enum": ["ACTIVITY_TYPE_INIT_FIAT_ON_RAMP"] }, "timestampMs": { "type": "string", @@ -13174,12 +10951,7 @@ "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, "InitFiatOnRampResult": { "type": "object", @@ -13197,10 +10969,7 @@ "description": "Optional signature of the MoonPay Widget URL. The signature is generated if the Init Fiat On Ramp intent includes the urlForSignature field. The signature can be used to initialize the MoonPay SDKs when URL signing is enabled for your project." } }, - "required": [ - "onRampUrl", - "onRampTransactionId" - ] + "required": ["onRampUrl", "onRampTransactionId"] }, "InitImportPrivateKeyIntent": { "type": "object", @@ -13210,18 +10979,14 @@ "description": "The ID of the User importing a Private Key." } }, - "required": [ - "userId" - ] + "required": ["userId"] }, "InitImportPrivateKeyRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_INIT_IMPORT_PRIVATE_KEY" - ] + "enum": ["ACTIVITY_TYPE_INIT_IMPORT_PRIVATE_KEY"] }, "timestampMs": { "type": "string", @@ -13239,12 +11004,7 @@ "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, "InitImportPrivateKeyResult": { "type": "object", @@ -13254,42 +11014,7 @@ "description": "Import bundle containing a public key and signature to use for importing client data." } }, - "required": [ - "importBundle" - ] - }, - "InitImportSecretsIntent": { - "type": "object", - "properties": { - "encryptionSuite": { - "$ref": "#/definitions/TransportEncryptionSuite", - "description": "Transport encryption suite used for ingress secrets." - }, - "numSecrets": { - "type": "integer", - "format": "int32", - "description": "The number of secrets the user intends to import." - } - }, - "required": [ - "encryptionSuite", - "numSecrets" - ] - }, - "InitImportSecretsResult": { - "type": "object", - "properties": { - "enclaveTargetMessages": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Enclave ingress target keys along with metadata specific to the encryption suite. For enclave encrypt v1 this will be ServerTargetMsgV1." - } - }, - "required": [ - "enclaveTargetMessages" - ] + "required": ["importBundle"] }, "InitImportWalletIntent": { "type": "object", @@ -13299,18 +11024,14 @@ "description": "The ID of the User importing a Wallet." } }, - "required": [ - "userId" - ] + "required": ["userId"] }, "InitImportWalletRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_INIT_IMPORT_WALLET" - ] + "enum": ["ACTIVITY_TYPE_INIT_IMPORT_WALLET"] }, "timestampMs": { "type": "string", @@ -13328,12 +11049,7 @@ "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, "InitImportWalletResult": { "type": "object", @@ -13343,9 +11059,7 @@ "description": "Import bundle containing a public key and signature to use for importing client data." } }, - "required": [ - "importBundle" - ] + "required": ["importBundle"] }, "InitOtpAuthIntent": { "type": "object", @@ -13389,10 +11103,7 @@ "description": "Optional custom email address to use as reply-to" } }, - "required": [ - "otpType", - "contact" - ] + "required": ["otpType", "contact"] }, "InitOtpAuthIntentV2": { "type": "object", @@ -13447,10 +11158,7 @@ "description": "Optional custom email address to use as reply-to" } }, - "required": [ - "otpType", - "contact" - ] + "required": ["otpType", "contact"] }, "InitOtpAuthIntentV3": { "type": "object", @@ -13514,20 +11222,14 @@ "description": "Optional custom email address to use as reply-to" } }, - "required": [ - "otpType", - "contact", - "appName" - ] + "required": ["otpType", "contact", "appName"] }, "InitOtpAuthRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_INIT_OTP_AUTH_V3" - ] + "enum": ["ACTIVITY_TYPE_INIT_OTP_AUTH_V3"] }, "timestampMs": { "type": "string", @@ -13545,12 +11247,7 @@ "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, "InitOtpAuthResult": { "type": "object", @@ -13560,9 +11257,7 @@ "description": "Unique identifier for an OTP authentication" } }, - "required": [ - "otpId" - ] + "required": ["otpId"] }, "InitOtpAuthResultV2": { "type": "object", @@ -13572,9 +11267,7 @@ "description": "Unique identifier for an OTP authentication" } }, - "required": [ - "otpId" - ] + "required": ["otpId"] }, "InitOtpIntent": { "type": "object", @@ -13634,10 +11327,7 @@ "description": "Optional custom email address to use as reply-to" } }, - "required": [ - "otpType", - "contact" - ] + "required": ["otpType", "contact"] }, "InitOtpIntentV2": { "type": "object", @@ -13701,11 +11391,7 @@ "description": "Optional custom email address to use as reply-to" } }, - "required": [ - "otpType", - "contact", - "appName" - ] + "required": ["otpType", "contact", "appName"] }, "InitOtpIntentV3": { "type": "object", @@ -13769,20 +11455,14 @@ "description": "Optional custom email address to use as reply-to" } }, - "required": [ - "otpType", - "contact", - "appName" - ] + "required": ["otpType", "contact", "appName"] }, "InitOtpRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_INIT_OTP_V3" - ] + "enum": ["ACTIVITY_TYPE_INIT_OTP_V3"] }, "timestampMs": { "type": "string", @@ -13800,12 +11480,7 @@ "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, "InitOtpResult": { "type": "object", @@ -13815,9 +11490,7 @@ "description": "Unique identifier for an OTP authentication" } }, - "required": [ - "otpId" - ] + "required": ["otpId"] }, "InitOtpResultV2": { "type": "object", @@ -13831,10 +11504,7 @@ "description": "Signed bundle containing a target encryption key to use when submitting OTP codes." } }, - "required": [ - "otpId", - "otpEncryptionTargetBundle" - ] + "required": ["otpId", "otpEncryptionTargetBundle"] }, "InitUserEmailRecoveryIntent": { "type": "object", @@ -13873,10 +11543,7 @@ "description": "Optional custom email address to use as reply-to" } }, - "required": [ - "email", - "targetPublicKey" - ] + "required": ["email", "targetPublicKey"] }, "InitUserEmailRecoveryIntentV2": { "type": "object", @@ -13914,20 +11581,14 @@ "description": "Optional custom email address to use as reply-to" } }, - "required": [ - "email", - "targetPublicKey", - "emailCustomization" - ] + "required": ["email", "targetPublicKey", "emailCustomization"] }, "InitUserEmailRecoveryRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_INIT_USER_EMAIL_RECOVERY_V2" - ] + "enum": ["ACTIVITY_TYPE_INIT_USER_EMAIL_RECOVERY_V2"] }, "timestampMs": { "type": "string", @@ -13945,12 +11606,7 @@ "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, "InitUserEmailRecoveryResult": { "type": "object", @@ -13960,9 +11616,7 @@ "description": "Unique identifier for the user being recovered." } }, - "required": [ - "userId" - ] + "required": ["userId"] }, "Intent": { "type": "object", @@ -14405,38 +12059,11 @@ "earnWithdrawIntent": { "$ref": "#/definitions/EarnWithdrawIntent" }, - "executeSwapIntent": { - "$ref": "#/definitions/ExecuteSwapIntent" - }, - "upsertSwapConfigIntent": { - "$ref": "#/definitions/UpsertSwapConfigIntent" - }, - "createTvcOperatorIntent": { - "$ref": "#/definitions/CreateTvcOperatorIntent" - }, - "createTvcQuorumKeyIntent": { - "$ref": "#/definitions/CreateTvcQuorumKeyIntent" - }, - "reEncryptTvcQuorumKeyShareIntent": { - "$ref": "#/definitions/ReEncryptTvcQuorumKeyShareIntent" - }, - "initImportSecretsIntent": { - "$ref": "#/definitions/InitImportSecretsIntent" - }, - "solSendTransactionIntentV2": { - "$ref": "#/definitions/SolSendTransactionIntentV2" - }, - "claimSwapFeesIntent": { - "$ref": "#/definitions/ClaimSwapFeesIntent" - }, "earnSetWrapperStateIntent": { "$ref": "#/definitions/EarnSetWrapperStateIntent" }, "claimEarnFeesIntent": { "$ref": "#/definitions/ClaimEarnFeesIntent" - }, - "updateWalletAccountNameIntent": { - "$ref": "#/definitions/UpdateWalletAccountNameIntent" } } }, @@ -14506,10 +12133,7 @@ "description": "Behavior when an error occurs during IP allowlist evaluation. Valid values: ALLOW, DENY. Defaults to DENY." } }, - "required": [ - "organizationId", - "rules" - ] + "required": ["organizationId", "rules"] }, "IpAllowlistIntentRule": { "type": "object", @@ -14524,9 +12148,7 @@ "description": "Optional human-readable label for this rule (e.g., 'Office VPN')." } }, - "required": [ - "cidr" - ] + "required": ["cidr"] }, "IpAllowlistRule": { "type": "object", @@ -14545,115 +12167,7 @@ "description": "Creation timestamp as millisecond epoch string." } }, - "required": [ - "cidr" - ] - }, - "ListEarnEnabledVaultsRequest": { - "type": "object", - "properties": { - "organizationId": { - "type": "string", - "description": "Unique identifier for a given Organization." - }, - "provider": { - "$ref": "#/definitions/EarnProvider", - "description": "Optional filter: only return enabled vaults from this provider. Leave EARN_PROVIDER_UNSPECIFIED to return all providers." - }, - "caip19": { - "type": "string", - "x-nullable": true, - "description": "Optional filter: only return enabled vaults whose underlying asset matches this CAIP-19 asset ID (e.g. 'eip155:8453/erc20:0x833589...'). The chain is taken from the CAIP-19 identifier." - } - }, - "required": [ - "organizationId" - ] - }, - "ListEarnEnabledVaultsResponse": { - "type": "object", - "properties": { - "enabledVaults": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/EarnEnabledVault" - }, - "description": "The organization's deployed wrappers." - } - } - }, - "ListEarnPositionsRequest": { - "type": "object", - "properties": { - "organizationId": { - "type": "string", - "description": "Unique identifier for a given Organization." - }, - "walletAddress": { - "type": "string", - "description": "The wallet address to return positions for." - } - }, - "required": [ - "organizationId", - "walletAddress" - ] - }, - "ListEarnPositionsResponse": { - "type": "object", - "properties": { - "positions": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/EarnPosition" - }, - "description": "The wallet's active Earn positions." - } - } - }, - "ListEarnVaultsRequest": { - "type": "object", - "properties": { - "organizationId": { - "type": "string", - "description": "Unique identifier for a given Organization. Annotates which vaults the organization has already enabled." - }, - "provider": { - "$ref": "#/definitions/EarnProvider", - "description": "Optional filter: only return vaults from this provider. Leave EARN_PROVIDER_UNSPECIFIED to return all providers." - }, - "caip19": { - "type": "string", - "description": "CAIP-19 asset ID (e.g. 'eip155:8453/erc20:0x833589...') to return vaults for. Only vaults whose underlying asset matches are returned; the chain is taken from the CAIP-19 identifier." - }, - "paginationOptions": { - "$ref": "#/definitions/Pagination", - "description": "Pagination over the TVL-sorted catalog. before/after are opaque cursors from a prior page's page_info (start_cursor/end_cursor); do not construct them by hand." - } - }, - "required": [ - "organizationId", - "caip19" - ] - }, - "ListEarnVaultsResponse": { - "type": "object", - "properties": { - "vaults": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/EarnVault" - }, - "description": "The catalog of wrappable vaults, sorted by TVL (USD) descending. To page, pass page_info.end_cursor as the pagination after cursor." - }, - "pageInfo": { - "$ref": "#/definitions/PageInfo", - "description": "Pagination metadata for the returned page. Pass end_cursor as the next request's after cursor (or start_cursor as the before cursor) to page through the catalog. Cursors are opaque; do not parse them." - } - } + "required": ["cidr"] }, "ListFiatOnRampCredentialsRequest": { "type": "object", @@ -14662,10 +12176,8 @@ "type": "string", "description": "Unique identifier for a given Organization." } - }, - "required": [ - "organizationId" - ] + }, + "required": ["organizationId"] }, "ListFiatOnRampCredentialsResponse": { "type": "object", @@ -14678,9 +12190,7 @@ } } }, - "required": [ - "fiatOnRampCredentials" - ] + "required": ["fiatOnRampCredentials"] }, "ListOauth2CredentialsRequest": { "type": "object", @@ -14690,9 +12200,7 @@ "description": "Unique identifier for a given Organization." } }, - "required": [ - "organizationId" - ] + "required": ["organizationId"] }, "ListOauth2CredentialsResponse": { "type": "object", @@ -14705,9 +12213,7 @@ } } }, - "required": [ - "oauth2Credentials" - ] + "required": ["oauth2Credentials"] }, "ListPrivateKeyTagsRequest": { "type": "object", @@ -14717,9 +12223,7 @@ "description": "Unique identifier for a given organization." } }, - "required": [ - "organizationId" - ] + "required": ["organizationId"] }, "ListPrivateKeyTagsResponse": { "type": "object", @@ -14733,9 +12237,7 @@ "description": "A list of private key tags." } }, - "required": [ - "privateKeyTags" - ] + "required": ["privateKeyTags"] }, "ListSupportedAssetsRequest": { "type": "object", @@ -14769,10 +12271,7 @@ "description": "CAIP-2 chain ID (e.g., 'eip155:1' for Ethereum mainnet or 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' for Solana mainnet). Human-readable Solana aliases ('solana:mainnet', 'solana:devnet') are also accepted and normalized to canonical CAIP-2 values." } }, - "required": [ - "organizationId", - "caip2" - ] + "required": ["organizationId", "caip2"] }, "ListSupportedAssetsResponse": { "type": "object", @@ -14795,9 +12294,7 @@ "description": "Unique identifier for a given organization." } }, - "required": [ - "organizationId" - ] + "required": ["organizationId"] }, "ListUserTagsResponse": { "type": "object", @@ -14811,9 +12308,7 @@ "description": "A list of user tags." } }, - "required": [ - "userTags" - ] + "required": ["userTags"] }, "ListWebhookEndpointsRequest": { "type": "object", @@ -14823,9 +12318,7 @@ "description": "Unique identifier for a given Organization." } }, - "required": [ - "organizationId" - ] + "required": ["organizationId"] }, "ListWebhookEndpointsResponse": { "type": "object", @@ -14838,9 +12331,7 @@ } } }, - "required": [ - "webhookEndpoints" - ] + "required": ["webhookEndpoints"] }, "LogLine": { "type": "object", @@ -14854,9 +12345,7 @@ "description": "When the line was logged. Stable across replays, so lines can be chronologically merged across pods" } }, - "required": [ - "content" - ] + "required": ["content"] }, "LoginUsage": { "type": "object", @@ -14866,9 +12355,7 @@ "description": "Public key for authentication" } }, - "required": [ - "publicKey" - ] + "required": ["publicKey"] }, "MfaPolicy": { "type": "object", @@ -14984,9 +12471,7 @@ "$ref": "#/definitions/TokenUsage" } }, - "required": [ - "stamp" - ] + "required": ["stamp"] }, "NativeRevertError": { "type": "object", @@ -15051,9 +12536,7 @@ "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_OAUTH2_AUTHENTICATE" - ] + "enum": ["ACTIVITY_TYPE_OAUTH2_AUTHENTICATE"] }, "timestampMs": { "type": "string", @@ -15071,12 +12554,7 @@ "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, "Oauth2AuthenticateResult": { "type": "object", @@ -15086,9 +12564,7 @@ "description": "Base64 encoded OIDC token issued by Turnkey to be used with the LoginWithOAuth activity" } }, - "required": [ - "oidcToken" - ] + "required": ["oidcToken"] }, "Oauth2Credential": { "type": "object", @@ -15132,10 +12608,7 @@ }, "Oauth2Provider": { "type": "string", - "enum": [ - "OAUTH2_PROVIDER_X", - "OAUTH2_PROVIDER_DISCORD" - ] + "enum": ["OAUTH2_PROVIDER_X", "OAUTH2_PROVIDER_DISCORD"] }, "OauthIntent": { "type": "object", @@ -15164,10 +12637,7 @@ "description": "Invalidate all other previously generated Oauth API keys" } }, - "required": [ - "oidcToken", - "targetPublicKey" - ] + "required": ["oidcToken", "targetPublicKey"] }, "OauthLoginIntent": { "type": "object", @@ -15196,19 +12666,14 @@ "description": "Optional session profile ID to specify which Session Profile to use for this login. If not provided, the default read/write session will be used." } }, - "required": [ - "oidcToken", - "publicKey" - ] + "required": ["oidcToken", "publicKey"] }, "OauthLoginRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_OAUTH_LOGIN" - ] + "enum": ["ACTIVITY_TYPE_OAUTH_LOGIN"] }, "timestampMs": { "type": "string", @@ -15226,12 +12691,7 @@ "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, "OauthLoginResult": { "type": "object", @@ -15241,9 +12701,7 @@ "description": "Signed JWT containing an expiry, public key, session type, user id, and organization id" } }, - "required": [ - "session" - ] + "required": ["session"] }, "OauthProvider": { "type": "object", @@ -15297,10 +12755,7 @@ "description": "Base64 encoded OIDC token" } }, - "required": [ - "providerName", - "oidcToken" - ] + "required": ["providerName", "oidcToken"] }, "OauthProviderParamsV2": { "type": "object", @@ -15318,18 +12773,14 @@ "description": "OIDC claims (iss, sub, aud) to uniquely identify the user" } }, - "required": [ - "providerName" - ] + "required": ["providerName"] }, "OauthRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_OAUTH" - ] + "enum": ["ACTIVITY_TYPE_OAUTH"] }, "timestampMs": { "type": "string", @@ -15347,12 +12798,7 @@ "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, "OauthResult": { "type": "object", @@ -15370,11 +12816,7 @@ "description": "HPKE encrypted credential bundle" } }, - "required": [ - "userId", - "apiKeyId", - "credentialBundle" - ] + "required": ["userId", "apiKeyId", "credentialBundle"] }, "OidcClaims": { "type": "object", @@ -15392,11 +12834,7 @@ "description": "The audience from the OIDC token (aud claim)" } }, - "required": [ - "iss", - "sub", - "aud" - ] + "required": ["iss", "sub", "aud"] }, "Operator": { "type": "string", @@ -15445,20 +12883,14 @@ "description": "Invalidate all other previously generated OTP Auth API keys" } }, - "required": [ - "otpId", - "otpCode", - "targetPublicKey" - ] + "required": ["otpId", "otpCode", "targetPublicKey"] }, "OtpAuthRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_OTP_AUTH" - ] + "enum": ["ACTIVITY_TYPE_OTP_AUTH"] }, "timestampMs": { "type": "string", @@ -15476,12 +12908,7 @@ "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, "OtpAuthResult": { "type": "object", @@ -15499,9 +12926,7 @@ "description": "HPKE encrypted credential bundle" } }, - "required": [ - "userId" - ] + "required": ["userId"] }, "OtpLoginIntent": { "type": "object", @@ -15535,10 +12960,7 @@ "description": "Optional session profile ID to specify which Session Profile to use for this login. If not provided, the default read/write session will be used." } }, - "required": [ - "verificationToken", - "publicKey" - ] + "required": ["verificationToken", "publicKey"] }, "OtpLoginIntentV2": { "type": "object", @@ -15571,20 +12993,14 @@ "description": "Optional session profile ID to specify which Session Profile to use for this login. If not provided, the default read/write session will be used." } }, - "required": [ - "verificationToken", - "publicKey", - "clientSignature" - ] + "required": ["verificationToken", "publicKey", "clientSignature"] }, "OtpLoginRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_OTP_LOGIN_V2" - ] + "enum": ["ACTIVITY_TYPE_OTP_LOGIN_V2"] }, "timestampMs": { "type": "string", @@ -15602,12 +13018,7 @@ "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, "OtpLoginResult": { "type": "object", @@ -15617,9 +13028,7 @@ "description": "Signed JWT containing an expiry, public key, session type, user id, and organization id" } }, - "required": [ - "session" - ] + "required": ["session"] }, "Outcome": { "type": "string", @@ -15633,25 +13042,6 @@ "OUTCOME_REQUIRES_AUTHENTICATORS" ] }, - "PageInfo": { - "type": "object", - "properties": { - "hasNextPage": { - "type": "boolean" - }, - "hasPreviousPage": { - "type": "boolean" - }, - "startCursor": { - "type": "string", - "x-nullable": true - }, - "endCursor": { - "type": "string", - "x-nullable": true - } - } - }, "Pagination": { "type": "object", "properties": { @@ -15671,9 +13061,7 @@ }, "PathFormat": { "type": "string", - "enum": [ - "PATH_FORMAT_BIP32" - ] + "enum": ["PATH_FORMAT_BIP32"] }, "PayloadEncoding": { "type": "string", @@ -15761,9 +13149,7 @@ "description": "The unique identifier for the provisioning quorum key share" } }, - "required": [ - "provisioningShareId" - ] + "required": ["provisioningShareId"] }, "PrivateKey": { "type": "object", @@ -15883,19 +13269,14 @@ }, "type": { "type": "string", - "enum": [ - "public-key" - ] + "enum": ["public-key"] }, "rawId": { "type": "string" }, "authenticatorAttachment": { "type": "string", - "enum": [ - "cross-platform", - "platform" - ], + "enum": ["cross-platform", "platform"], "x-nullable": true }, "response": { @@ -15905,13 +13286,7 @@ "$ref": "#/definitions/SimpleClientExtensionResults" } }, - "required": [ - "id", - "type", - "rawId", - "response", - "clientExtensionResults" - ] + "required": ["id", "type", "rawId", "response", "clientExtensionResults"] }, "QuorumKeyShareApprovalBundle": { "type": "object", @@ -15929,60 +13304,7 @@ "description": "Signature from the share set operator approving the manifest" } }, - "required": [ - "operatorId", - "reEncryptedShareHex", - "signature" - ] - }, - "ReEncryptTvcQuorumKeyShareIntent": { - "type": "object", - "properties": { - "attestationDocB64": { - "type": "string", - "description": "Base64-encoded attestation document for the TVC deployment provisioning enclave" - }, - "manifestB64": { - "type": "string", - "description": "Base64-encoded manifest for the TVC deployment" - }, - "operatorEncryptKey": { - "type": "string", - "description": "Operator encryption public key used to encrypt the hosted TVC quorum key share" - }, - "operatorSignKey": { - "type": "string", - "description": "Operator signing public key used to approve the TVC manifest" - }, - "deploymentId": { - "type": "string", - "description": "Unique identifier of the TVC deployment receiving the re-encrypted quorum key share" - }, - "appQuorumKey": { - "type": "string", - "description": "Quorum key for the TVC application" - } - }, - "required": [ - "attestationDocB64", - "manifestB64", - "operatorEncryptKey", - "operatorSignKey", - "deploymentId", - "appQuorumKey" - ] - }, - "ReEncryptTvcQuorumKeyShareResult": { - "type": "object", - "properties": { - "provisioningShareId": { - "type": "string", - "description": "The unique identifier for the provisioning quorum key share" - } - }, - "required": [ - "provisioningShareId" - ] + "required": ["operatorId", "reEncryptedShareHex", "signature"] }, "RecoverUserIntent": { "type": "object", @@ -15996,19 +13318,14 @@ "description": "Unique identifier for the user performing recovery." } }, - "required": [ - "authenticator", - "userId" - ] + "required": ["authenticator", "userId"] }, "RecoverUserRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_RECOVER_USER" - ] + "enum": ["ACTIVITY_TYPE_RECOVER_USER"] }, "timestampMs": { "type": "string", @@ -16026,12 +13343,7 @@ "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, "RecoverUserResult": { "type": "object", @@ -16044,9 +13356,7 @@ "description": "ID of the authenticator created." } }, - "required": [ - "authenticatorId" - ] + "required": ["authenticatorId"] }, "RejectActivityIntent": { "type": "object", @@ -16056,18 +13366,14 @@ "description": "An artifact verifying a User's action." } }, - "required": [ - "fingerprint" - ] + "required": ["fingerprint"] }, "RejectActivityRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_REJECT_ACTIVITY" - ] + "enum": ["ACTIVITY_TYPE_REJECT_ACTIVITY"] }, "timestampMs": { "type": "string", @@ -16085,12 +13391,7 @@ "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, "RemoveIpAllowlistIntent": { "type": "object", @@ -16107,9 +13408,7 @@ "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_REMOVE_IP_ALLOWLIST" - ] + "enum": ["ACTIVITY_TYPE_REMOVE_IP_ALLOWLIST"] }, "timestampMs": { "type": "string", @@ -16127,12 +13426,7 @@ "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, "RemoveIpAllowlistResult": { "type": "object" @@ -16145,18 +13439,14 @@ "description": "Name of the feature to remove" } }, - "required": [ - "name" - ] + "required": ["name"] }, "RemoveOrganizationFeatureRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_REMOVE_ORGANIZATION_FEATURE" - ] + "enum": ["ACTIVITY_TYPE_REMOVE_ORGANIZATION_FEATURE"] }, "timestampMs": { "type": "string", @@ -16174,12 +13464,7 @@ "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, "RemoveOrganizationFeatureResult": { "type": "object", @@ -16193,9 +13478,7 @@ "description": "Resulting list of organization features." } }, - "required": [ - "features" - ] + "required": ["features"] }, "RequiredAuthenticationMethod": { "type": "object", @@ -16209,9 +13492,7 @@ "description": "A list of authentication methods for this MFA step. If only one method is provided, it is required. If multiple are provided, the user must satisfy ANY one of them." } }, - "required": [ - "any" - ] + "required": ["any"] }, "RequiredAuthenticationMethodParams": { "type": "object", @@ -16225,9 +13506,7 @@ "description": "A list of authentication methods for this MFA step. If only one method is provided, it is required. If multiple are provided, the user must satisfy ANY one of them." } }, - "required": [ - "any" - ] + "required": ["any"] }, "RestoreTvcDeploymentIntent": { "type": "object", @@ -16237,18 +13516,14 @@ "description": "The unique identifier of the TVC deployment to restore." } }, - "required": [ - "deploymentId" - ] + "required": ["deploymentId"] }, "RestoreTvcDeploymentRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_RESTORE_TVC_DEPLOYMENT" - ] + "enum": ["ACTIVITY_TYPE_RESTORE_TVC_DEPLOYMENT"] }, "timestampMs": { "type": "string", @@ -16266,12 +13541,7 @@ "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, "RestoreTvcDeploymentResult": { "type": "object", @@ -16281,9 +13551,7 @@ "description": "The unique identifier of the restored TVC deployment." } }, - "required": [ - "deploymentId" - ] + "required": ["deploymentId"] }, "Result": { "type": "object", @@ -16660,71 +13928,197 @@ "earnWithdrawResult": { "$ref": "#/definitions/EarnWithdrawResult" }, - "executeSwapResult": { - "$ref": "#/definitions/ExecuteSwapResult" + "earnSetWrapperStateResult": { + "$ref": "#/definitions/EarnSetWrapperStateResult" + }, + "claimEarnFeesResult": { + "$ref": "#/definitions/ClaimEarnFeesResult" + } + } + }, + "RevertChainEntry": { + "type": "object", + "properties": { + "address": { + "type": "string", + "description": "The contract address where the revert occurred." + }, + "errorType": { + "type": "string", + "description": "Type of error: 'unknown', 'native', or 'custom'." + }, + "displayMessage": { + "type": "string", + "description": "Human-readable message describing this revert." + }, + "unknown": { + "$ref": "#/definitions/UnknownRevertError", + "description": "Details for unknown error types." + }, + "native": { + "$ref": "#/definitions/NativeRevertError", + "description": "Details for native Solidity errors (Error, Panic, execution reverted)." + }, + "custom": { + "$ref": "#/definitions/CustomRevertError", + "description": "Details for custom contract errors." + } + } + }, + "RootUserParams": { + "type": "object", + "properties": { + "userName": { + "type": "string", + "description": "Human-readable name for a User." + }, + "userEmail": { + "type": "string", + "x-nullable": true, + "description": "The user's email address." }, - "upsertSwapConfigResult": { - "$ref": "#/definitions/UpsertSwapConfigResult" + "apiKeys": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/ApiKeyParams" + }, + "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." }, - "createTvcOperatorResult": { - "$ref": "#/definitions/CreateTvcOperatorResult" + "authenticators": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/AuthenticatorParamsV2" + }, + "description": "A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body." + } + }, + "required": ["userName", "apiKeys", "authenticators"] + }, + "RootUserParamsV2": { + "type": "object", + "properties": { + "userName": { + "type": "string", + "description": "Human-readable name for a User." }, - "createTvcQuorumKeyResult": { - "$ref": "#/definitions/CreateTvcQuorumKeyResult" + "userEmail": { + "type": "string", + "x-nullable": true, + "description": "The user's email address." }, - "reEncryptTvcQuorumKeyShareResult": { - "$ref": "#/definitions/ReEncryptTvcQuorumKeyShareResult" + "apiKeys": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/ApiKeyParams" + }, + "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." }, - "initImportSecretsResult": { - "$ref": "#/definitions/InitImportSecretsResult" + "authenticators": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/AuthenticatorParamsV2" + }, + "description": "A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body." }, - "solSendTransactionResultV2": { - "$ref": "#/definitions/SolSendTransactionResultV2" + "oauthProviders": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/OauthProviderParams" + }, + "description": "A list of Oauth providers. This field, if not needed, should be an empty array in your request body." + } + }, + "required": ["userName", "apiKeys", "authenticators", "oauthProviders"] + }, + "RootUserParamsV3": { + "type": "object", + "properties": { + "userName": { + "type": "string", + "description": "Human-readable name for a User." }, - "claimSwapFeesResult": { - "$ref": "#/definitions/ClaimSwapFeesResult" + "userEmail": { + "type": "string", + "x-nullable": true, + "description": "The user's email address." }, - "earnSetWrapperStateResult": { - "$ref": "#/definitions/EarnSetWrapperStateResult" + "apiKeys": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/ApiKeyParamsV2" + }, + "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." }, - "claimEarnFeesResult": { - "$ref": "#/definitions/ClaimEarnFeesResult" + "authenticators": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/AuthenticatorParamsV2" + }, + "description": "A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body." }, - "updateWalletAccountNameResult": { - "$ref": "#/definitions/UpdateWalletAccountNameResult" + "oauthProviders": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/OauthProviderParams" + }, + "description": "A list of Oauth providers. This field, if not needed, should be an empty array in your request body." } - } + }, + "required": ["userName", "apiKeys", "authenticators", "oauthProviders"] }, - "RevertChainEntry": { + "RootUserParamsV4": { "type": "object", "properties": { - "address": { + "userName": { "type": "string", - "description": "The contract address where the revert occurred." + "description": "Human-readable name for a User." }, - "errorType": { + "userEmail": { "type": "string", - "description": "Type of error: 'unknown', 'native', or 'custom'." + "x-nullable": true, + "description": "The user's email address." }, - "displayMessage": { + "userPhoneNumber": { "type": "string", - "description": "Human-readable message describing this revert." + "x-nullable": true, + "description": "The user's phone number in E.164 format e.g. +13214567890" }, - "unknown": { - "$ref": "#/definitions/UnknownRevertError", - "description": "Details for unknown error types." + "apiKeys": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/ApiKeyParamsV2" + }, + "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." }, - "native": { - "$ref": "#/definitions/NativeRevertError", - "description": "Details for native Solidity errors (Error, Panic, execution reverted)." + "authenticators": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/AuthenticatorParamsV2" + }, + "description": "A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body." }, - "custom": { - "$ref": "#/definitions/CustomRevertError", - "description": "Details for custom contract errors." + "oauthProviders": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/OauthProviderParams" + }, + "description": "A list of Oauth providers. This field, if not needed, should be an empty array in your request body." } - } + }, + "required": ["userName", "apiKeys", "authenticators", "oauthProviders"] }, - "RootUserParams": { + "RootUserParamsV5": { "type": "object", "properties": { "userName": { @@ -16736,11 +14130,16 @@ "x-nullable": true, "description": "The user's email address." }, + "userPhoneNumber": { + "type": "string", + "x-nullable": true, + "description": "The user's phone number in E.164 format e.g. +13214567890" + }, "apiKeys": { "type": "array", "items": { "type": "object", - "$ref": "#/definitions/ApiKeyParams" + "$ref": "#/definitions/ApiKeyParamsV2" }, "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." }, @@ -16751,307 +14150,390 @@ "$ref": "#/definitions/AuthenticatorParamsV2" }, "description": "A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body." + }, + "oauthProviders": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/OauthProviderParamsV2" + }, + "description": "A list of Oauth providers. This field, if not needed, should be an empty array in your request body." + } + }, + "required": ["userName", "apiKeys", "authenticators", "oauthProviders"] + }, + "Selector": { + "type": "object", + "properties": { + "subject": { + "type": "string" + }, + "operator": { + "$ref": "#/definitions/Operator" + }, + "target": { + "type": "string" + } + } + }, + "SelectorV2": { + "type": "object", + "properties": { + "subject": { + "type": "string" + }, + "operator": { + "$ref": "#/definitions/Operator" + }, + "targets": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "SessionProfile": { + "type": "object", + "properties": { + "sessionProfileId": { + "type": "string", + "description": "Unique identifier for a given Session Profile." + }, + "sessionProfileName": { + "type": "string", + "description": "Human-readable name for a Session Profile." + }, + "scope": { + "type": "string", + "description": "The specific scope that a session created with this profile is limited to." + }, + "expirationSeconds": { + "type": "string", + "x-nullable": true, + "description": "Optional window (in seconds) indicating how long sessions created with this profile should last." + }, + "notes": { + "type": "string", + "x-nullable": true, + "description": "Optional human-readable notes added by a User to describe a particular Session Profile." + }, + "createdAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + } + }, + "required": [ + "sessionProfileId", + "sessionProfileName", + "scope", + "createdAt", + "updatedAt" + ] + }, + "SetIpAllowlistIntent": { + "type": "object", + "properties": { + "publicKey": { + "type": "string", + "x-nullable": true, + "description": "The public component of an API key. If null, the IP allowlist applies at the organization level. If set, it applies only to this specific API key." + }, + "enabled": { + "type": "boolean", + "x-nullable": true, + "description": "Whether the IP allowlist is enabled. Only meaningful for organization-level allowlists. Omit for API key-level allowlists." + }, + "rules": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/IpAllowlistIntentRule" + }, + "description": "List of IP allowlist rules with CIDR blocks and optional labels." + }, + "onEvaluationError": { + "type": "string", + "x-nullable": true, + "description": "Behavior when an error occurs during IP allowlist evaluation. Valid values: ALLOW, DENY. Defaults to DENY." + } + } + }, + "SetIpAllowlistRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_SET_IP_ALLOWLIST"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/SetIpAllowlistIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true } }, - "required": [ - "userName", - "apiKeys", - "authenticators" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "RootUserParamsV2": { + "SetIpAllowlistResult": { + "type": "object" + }, + "SetOrganizationFeatureIntent": { "type": "object", "properties": { - "userName": { - "type": "string", - "description": "Human-readable name for a User." + "name": { + "$ref": "#/definitions/FeatureName", + "description": "Name of the feature to set" }, - "userEmail": { + "value": { "type": "string", "x-nullable": true, - "description": "The user's email address." - }, - "apiKeys": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/ApiKeyParams" - }, - "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." - }, - "authenticators": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/AuthenticatorParamsV2" - }, - "description": "A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body." - }, - "oauthProviders": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/OauthProviderParams" - }, - "description": "A list of Oauth providers. This field, if not needed, should be an empty array in your request body." + "description": "Optional value for the feature. Will override existing values if feature is already set." } }, - "required": [ - "userName", - "apiKeys", - "authenticators", - "oauthProviders" - ] + "required": ["name", "value"] }, - "RootUserParamsV3": { + "SetOrganizationFeatureRequest": { "type": "object", "properties": { - "userName": { + "type": { "type": "string", - "description": "Human-readable name for a User." + "enum": ["ACTIVITY_TYPE_SET_ORGANIZATION_FEATURE"] }, - "userEmail": { + "timestampMs": { "type": "string", - "x-nullable": true, - "description": "The user's email address." + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, - "apiKeys": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/ApiKeyParamsV2" - }, - "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." }, - "authenticators": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/AuthenticatorParamsV2" - }, - "description": "A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body." + "parameters": { + "$ref": "#/definitions/SetOrganizationFeatureIntent" }, - "oauthProviders": { + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "SetOrganizationFeatureResult": { + "type": "object", + "properties": { + "features": { "type": "array", "items": { "type": "object", - "$ref": "#/definitions/OauthProviderParams" + "$ref": "#/definitions/Feature" }, - "description": "A list of Oauth providers. This field, if not needed, should be an empty array in your request body." + "description": "Resulting list of organization features." } }, - "required": [ - "userName", - "apiKeys", - "authenticators", - "oauthProviders" - ] + "required": ["features"] }, - "RootUserParamsV4": { + "SetPaymentMethodIntent": { "type": "object", "properties": { - "userName": { + "number": { "type": "string", - "description": "Human-readable name for a User." + "description": "The account number of the customer's credit card." }, - "userEmail": { + "cvv": { "type": "string", - "x-nullable": true, - "description": "The user's email address." + "description": "The verification digits of the customer's credit card." }, - "userPhoneNumber": { + "expiryMonth": { "type": "string", - "x-nullable": true, - "description": "The user's phone number in E.164 format e.g. +13214567890" + "description": "The month that the credit card expires." }, - "apiKeys": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/ApiKeyParamsV2" - }, - "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." + "expiryYear": { + "type": "string", + "description": "The year that the credit card expires." }, - "authenticators": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/AuthenticatorParamsV2" - }, - "description": "A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body." + "cardHolderEmail": { + "type": "string", + "description": "The email that will receive invoices for the credit card." }, - "oauthProviders": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/OauthProviderParams" - }, - "description": "A list of Oauth providers. This field, if not needed, should be an empty array in your request body." + "cardHolderName": { + "type": "string", + "description": "The name associated with the credit card." } }, "required": [ - "userName", - "apiKeys", - "authenticators", - "oauthProviders" + "number", + "cvv", + "expiryMonth", + "expiryYear", + "cardHolderEmail", + "cardHolderName" ] }, - "RootUserParamsV5": { + "SetPaymentMethodIntentV2": { "type": "object", "properties": { - "userName": { + "paymentMethodId": { "type": "string", - "description": "Human-readable name for a User." + "description": "The id of the payment method that was created clientside." }, - "userEmail": { + "cardHolderEmail": { "type": "string", - "x-nullable": true, - "description": "The user's email address." + "description": "The email that will receive invoices for the credit card." }, - "userPhoneNumber": { + "cardHolderName": { "type": "string", - "x-nullable": true, - "description": "The user's phone number in E.164 format e.g. +13214567890" - }, - "apiKeys": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/ApiKeyParamsV2" - }, - "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." + "description": "The name associated with the credit card." + } + }, + "required": ["paymentMethodId", "cardHolderEmail", "cardHolderName"] + }, + "SetPaymentMethodResult": { + "type": "object", + "properties": { + "lastFour": { + "type": "string", + "description": "The last four digits of the credit card added." }, - "authenticators": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/AuthenticatorParamsV2" - }, - "description": "A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body." + "cardHolderName": { + "type": "string", + "description": "The name associated with the payment method." }, - "oauthProviders": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/OauthProviderParamsV2" - }, - "description": "A list of Oauth providers. This field, if not needed, should be an empty array in your request body." + "cardHolderEmail": { + "type": "string", + "description": "The email address associated with the payment method." } }, - "required": [ - "userName", - "apiKeys", - "authenticators", - "oauthProviders" - ] + "required": ["lastFour", "cardHolderName", "cardHolderEmail"] }, - "Selector": { + "SignRawPayloadIntent": { "type": "object", "properties": { - "subject": { - "type": "string" + "privateKeyId": { + "type": "string", + "description": "Unique identifier for a given Private Key." }, - "operator": { - "$ref": "#/definitions/Operator" + "payload": { + "type": "string", + "description": "Raw unsigned payload to be signed." }, - "target": { - "type": "string" + "encoding": { + "$ref": "#/definitions/PayloadEncoding", + "description": "Encoding of the `payload` string. Turnkey uses this information to convert `payload` into bytes with the correct decoder (e.g. hex, utf8)." + }, + "hashFunction": { + "$ref": "#/definitions/HashFunction", + "description": "Hash function to apply to payload bytes before signing. This field must be set to HASH_FUNCTION_NOT_APPLICABLE for EdDSA/ed25519 signature requests; configurable payload hashing is not supported by RFC 8032." } - } + }, + "required": ["privateKeyId", "payload", "encoding", "hashFunction"] }, - "SelectorV2": { + "SignRawPayloadIntentV2": { "type": "object", "properties": { - "subject": { - "type": "string" + "signWith": { + "type": "string", + "description": "A Wallet account address, Private Key address, or Private Key identifier." }, - "operator": { - "$ref": "#/definitions/Operator" + "payload": { + "type": "string", + "description": "Raw unsigned payload to be signed." }, - "targets": { - "type": "array", - "items": { - "type": "string" - } + "encoding": { + "$ref": "#/definitions/PayloadEncoding", + "description": "Encoding of the `payload` string. Turnkey uses this information to convert `payload` into bytes with the correct decoder (e.g. hex, utf8)." + }, + "hashFunction": { + "$ref": "#/definitions/HashFunction", + "description": "Hash function to apply to payload bytes before signing. This field must be set to HASH_FUNCTION_NOT_APPLICABLE for EdDSA/ed25519 signature requests; configurable payload hashing is not supported by RFC 8032." } - } + }, + "required": ["signWith", "payload", "encoding", "hashFunction"] }, - "SessionProfile": { + "SignRawPayloadRequest": { "type": "object", "properties": { - "sessionProfileId": { + "type": { "type": "string", - "description": "Unique identifier for a given Session Profile." + "enum": ["ACTIVITY_TYPE_SIGN_RAW_PAYLOAD_V2"] }, - "sessionProfileName": { + "timestampMs": { "type": "string", - "description": "Human-readable name for a Session Profile." + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, - "scope": { + "organizationId": { "type": "string", - "description": "The specific scope that a session created with this profile is limited to." + "description": "Unique identifier for a given Organization." }, - "expirationSeconds": { - "type": "string", - "x-nullable": true, - "description": "Optional window (in seconds) indicating how long sessions created with this profile should last." + "parameters": { + "$ref": "#/definitions/SignRawPayloadIntentV2" }, - "notes": { + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "SignRawPayloadResult": { + "type": "object", + "properties": { + "r": { "type": "string", - "x-nullable": true, - "description": "Optional human-readable notes added by a User to describe a particular Session Profile." + "description": "Component of an ECSDA signature." }, - "createdAt": { - "$ref": "#/definitions/external.data.v1.Timestamp" + "s": { + "type": "string", + "description": "Component of an ECSDA signature." }, - "updatedAt": { - "$ref": "#/definitions/external.data.v1.Timestamp" + "v": { + "type": "string", + "description": "Component of an ECSDA signature." } }, - "required": [ - "sessionProfileId", - "sessionProfileName", - "scope", - "createdAt", - "updatedAt" - ] + "required": ["r", "s", "v"] }, - "SetIpAllowlistIntent": { + "SignRawPayloadsIntent": { "type": "object", "properties": { - "publicKey": { + "signWith": { "type": "string", - "x-nullable": true, - "description": "The public component of an API key. If null, the IP allowlist applies at the organization level. If set, it applies only to this specific API key." - }, - "enabled": { - "type": "boolean", - "x-nullable": true, - "description": "Whether the IP allowlist is enabled. Only meaningful for organization-level allowlists. Omit for API key-level allowlists." + "description": "A Wallet account address, Private Key address, or Private Key identifier." }, - "rules": { + "payloads": { "type": "array", "items": { - "type": "object", - "$ref": "#/definitions/IpAllowlistIntentRule" + "type": "string" }, - "description": "List of IP allowlist rules with CIDR blocks and optional labels." + "description": "An array of raw unsigned payloads to be signed." }, - "onEvaluationError": { - "type": "string", - "x-nullable": true, - "description": "Behavior when an error occurs during IP allowlist evaluation. Valid values: ALLOW, DENY. Defaults to DENY." + "encoding": { + "$ref": "#/definitions/PayloadEncoding", + "description": "Encoding of the `payload` string. Turnkey uses this information to convert `payload` into bytes with the correct decoder (e.g. hex, utf8)." + }, + "hashFunction": { + "$ref": "#/definitions/HashFunction", + "description": "Hash function to apply to payload bytes before signing. This field must be set to HASH_FUNCTION_NOT_APPLICABLE for EdDSA/ed25519 signature requests; configurable payload hashing is not supported by RFC 8032." } - } + }, + "required": ["signWith", "payloads", "encoding", "hashFunction"] }, - "SetIpAllowlistRequest": { + "SignRawPayloadsRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_SET_IP_ALLOWLIST" - ] + "enum": ["ACTIVITY_TYPE_SIGN_RAW_PAYLOADS"] }, "timestampMs": { "type": "string", @@ -17062,49 +14544,67 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/definitions/SetIpAllowlistIntent" + "$ref": "#/definitions/SignRawPayloadsIntent" }, "generateAppProofs": { "type": "boolean", "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "SetIpAllowlistResult": { - "type": "object" + "SignRawPayloadsResult": { + "type": "object", + "properties": { + "signatures": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/SignRawPayloadResult" + } + } + } }, - "SetOrganizationFeatureIntent": { + "SignTransactionIntent": { "type": "object", "properties": { - "name": { - "$ref": "#/definitions/FeatureName", - "description": "Name of the feature to set" + "privateKeyId": { + "type": "string", + "description": "Unique identifier for a given Private Key." }, - "value": { + "unsignedTransaction": { "type": "string", - "x-nullable": true, - "description": "Optional value for the feature. Will override existing values if feature is already set." + "description": "Raw unsigned transaction to be signed by a particular Private Key." + }, + "type": { + "$ref": "#/definitions/TransactionType" } }, - "required": [ - "name", - "value" - ] + "required": ["privateKeyId", "unsignedTransaction", "type"] }, - "SetOrganizationFeatureRequest": { + "SignTransactionIntentV2": { + "type": "object", + "properties": { + "signWith": { + "type": "string", + "description": "A Wallet account address, Private Key address, or Private Key identifier." + }, + "unsignedTransaction": { + "type": "string", + "description": "Raw unsigned transaction to be signed" + }, + "type": { + "$ref": "#/definitions/TransactionType" + } + }, + "required": ["signWith", "unsignedTransaction", "type"] + }, + "SignTransactionRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_SET_ORGANIZATION_FEATURE" - ] + "enum": ["ACTIVITY_TYPE_SIGN_TRANSACTION_V2"] }, "timestampMs": { "type": "string", @@ -17115,179 +14615,168 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/definitions/SetOrganizationFeatureIntent" + "$ref": "#/definitions/SignTransactionIntentV2" }, "generateAppProofs": { "type": "boolean", "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "SetOrganizationFeatureResult": { + "SignTransactionResult": { "type": "object", "properties": { - "features": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/Feature" - }, - "description": "Resulting list of organization features." + "signedTransaction": { + "type": "string" } }, - "required": [ - "features" - ] + "required": ["signedTransaction"] }, - "SetPaymentMethodIntent": { + "SignupUsage": { "type": "object", "properties": { - "number": { - "type": "string", - "description": "The account number of the customer's credit card." - }, - "cvv": { + "email": { "type": "string", - "description": "The verification digits of the customer's credit card." + "x-nullable": true }, - "expiryMonth": { + "phoneNumber": { "type": "string", - "description": "The month that the credit card expires." + "x-nullable": true }, - "expiryYear": { - "type": "string", - "description": "The year that the credit card expires." + "apiKeys": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/ApiKeyParamsV2" + } }, - "cardHolderEmail": { - "type": "string", - "description": "The email that will receive invoices for the credit card." + "authenticators": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/AuthenticatorParamsV2" + } }, - "cardHolderName": { - "type": "string", - "description": "The name associated with the credit card." + "oauthProviders": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/OauthProviderParams" + } } - }, - "required": [ - "number", - "cvv", - "expiryMonth", - "expiryYear", - "cardHolderEmail", - "cardHolderName" - ] + } }, - "SetPaymentMethodIntentV2": { + "SignupUsageV2": { "type": "object", "properties": { - "paymentMethodId": { + "email": { "type": "string", - "description": "The id of the payment method that was created clientside." + "x-nullable": true }, - "cardHolderEmail": { + "phoneNumber": { "type": "string", - "description": "The email that will receive invoices for the credit card." + "x-nullable": true }, - "cardHolderName": { - "type": "string", - "description": "The name associated with the credit card." - } - }, - "required": [ - "paymentMethodId", - "cardHolderEmail", - "cardHolderName" - ] + "apiKeys": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/ApiKeyParamsV2" + } + }, + "authenticators": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/AuthenticatorParamsV2" + } + }, + "oauthProviders": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/OauthProviderParamsV2" + } + } + } }, - "SetPaymentMethodResult": { + "SimpleClientExtensionResults": { "type": "object", "properties": { - "lastFour": { - "type": "string", - "description": "The last four digits of the credit card added." + "appid": { + "type": "boolean", + "x-nullable": true }, - "cardHolderName": { - "type": "string", - "description": "The name associated with the payment method." + "appidExclude": { + "type": "boolean", + "x-nullable": true }, - "cardHolderEmail": { - "type": "string", - "description": "The email address associated with the payment method." + "credProps": { + "$ref": "#/definitions/CredPropsAuthenticationExtensionsClientOutputs", + "x-nullable": true } - }, - "required": [ - "lastFour", - "cardHolderName", - "cardHolderEmail" + } + }, + "SmartContractInterfaceType": { + "type": "string", + "enum": [ + "SMART_CONTRACT_INTERFACE_TYPE_ETHEREUM", + "SMART_CONTRACT_INTERFACE_TYPE_SOLANA" ] }, - "SignRawPayloadIntent": { + "SmsCustomizationParams": { "type": "object", "properties": { - "privateKeyId": { - "type": "string", - "description": "Unique identifier for a given Private Key." - }, - "payload": { + "template": { "type": "string", - "description": "Raw unsigned payload to be signed." - }, - "encoding": { - "$ref": "#/definitions/PayloadEncoding", - "description": "Encoding of the `payload` string. Turnkey uses this information to convert `payload` into bytes with the correct decoder (e.g. hex, utf8)." - }, - "hashFunction": { - "$ref": "#/definitions/HashFunction", - "description": "Hash function to apply to payload bytes before signing. This field must be set to HASH_FUNCTION_NOT_APPLICABLE for EdDSA/ed25519 signature requests; configurable payload hashing is not supported by RFC 8032." + "x-nullable": true, + "description": "Template containing references to .OtpCode i.e Your OTP is {{.OtpCode}}" } - }, - "required": [ - "privateKeyId", - "payload", - "encoding", - "hashFunction" - ] + } }, - "SignRawPayloadIntentV2": { + "SolSendTransactionIntent": { "type": "object", "properties": { - "signWith": { + "unsignedTransaction": { "type": "string", - "description": "A Wallet account address, Private Key address, or Private Key identifier." + "description": "Base64-encoded serialized unsigned Solana transaction" }, - "payload": { + "signWith": { "type": "string", - "description": "Raw unsigned payload to be signed." + "description": "A wallet or private key address to sign with. This does not support private key IDs." }, - "encoding": { - "$ref": "#/definitions/PayloadEncoding", - "description": "Encoding of the `payload` string. Turnkey uses this information to convert `payload` into bytes with the correct decoder (e.g. hex, utf8)." + "sponsor": { + "type": "boolean", + "x-nullable": true, + "description": "Whether to sponsor this transaction via Gas Station." }, - "hashFunction": { - "$ref": "#/definitions/HashFunction", - "description": "Hash function to apply to payload bytes before signing. This field must be set to HASH_FUNCTION_NOT_APPLICABLE for EdDSA/ed25519 signature requests; configurable payload hashing is not supported by RFC 8032." + "caip2": { + "type": "string", + "enum": [ + "solana:mainnet", + "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", + "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d", + "solana:devnet", + "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1", + "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1wcaWoxPkrZBG" + ], + "description": "CAIP-2 chain ID (e.g., 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' for Solana mainnet). Human-readable Solana aliases ('solana:mainnet', 'solana:devnet') are also accepted and normalized to canonical CAIP-2 values." + }, + "recentBlockhash": { + "type": "string", + "x-nullable": true, + "description": "user-provided blockhash for replay protection / deadline control. If omitted and sponsor=true, we fetch a fresh blockhash during execution" } }, - "required": [ - "signWith", - "payload", - "encoding", - "hashFunction" - ] + "required": ["unsignedTransaction", "signWith", "caip2"] }, - "SignRawPayloadRequest": { + "SolSendTransactionRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_SIGN_RAW_PAYLOAD_V2" - ] + "enum": ["ACTIVITY_TYPE_SOL_SEND_TRANSACTION"] }, "timestampMs": { "type": "string", @@ -17298,166 +14787,167 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/definitions/SignRawPayloadIntentV2" + "$ref": "#/definitions/SolSendTransactionIntent" }, "generateAppProofs": { "type": "boolean", "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "SignRawPayloadResult": { + "SolSendTransactionResult": { "type": "object", "properties": { - "r": { - "type": "string", - "description": "Component of an ECSDA signature." - }, - "s": { - "type": "string", - "description": "Component of an ECSDA signature." - }, - "v": { + "sendTransactionStatusId": { "type": "string", - "description": "Component of an ECSDA signature." + "description": "The send_transaction_status ID associated with the transaction submission" } }, - "required": [ - "r", - "s", - "v" - ] + "required": ["sendTransactionStatusId"] }, - "SignRawPayloadsIntent": { + "SolanaConfig": { "type": "object", "properties": { - "signWith": { + "rentPrefundEnabled": { + "type": "boolean", + "x-nullable": true, + "description": "Whether Solana rent prefunding is enabled for the organization. When omitted, the existing rent-prefund state is left unchanged." + } + } + }, + "SolanaFailureDetails": { + "type": "object", + "properties": { + "source": { "type": "string", - "description": "A Wallet account address, Private Key address, or Private Key identifier." + "description": "Where the Solana failure occurred, such as simulation or preflight." }, - "payloads": { + "rpcCode": { + "type": "integer", + "format": "int32", + "x-nullable": true, + "description": "The Solana JSON-RPC error code, if available." + }, + "rpcMessage": { + "type": "string", + "x-nullable": true, + "description": "The Solana JSON-RPC error message, if available." + }, + "transactionErrorJson": { + "type": "string", + "x-nullable": true, + "description": "The raw Solana transaction error object serialized as JSON, if available." + }, + "logs": { "type": "array", "items": { "type": "string" }, - "description": "An array of raw unsigned payloads to be signed." + "description": "Program logs returned by Solana simulation or preflight, if available." }, - "encoding": { - "$ref": "#/definitions/PayloadEncoding", - "description": "Encoding of the `payload` string. Turnkey uses this information to convert `payload` into bytes with the correct decoder (e.g. hex, utf8)." + "unitsConsumed": { + "type": "string", + "format": "uint64", + "x-nullable": true, + "description": "Compute units consumed during simulation or preflight, if available." }, - "hashFunction": { - "$ref": "#/definitions/HashFunction", - "description": "Hash function to apply to payload bytes before signing. This field must be set to HASH_FUNCTION_NOT_APPLICABLE for EdDSA/ed25519 signature requests; configurable payload hashing is not supported by RFC 8032." + "innerInstructionsJson": { + "type": "string", + "x-nullable": true, + "description": "The raw Solana inner instructions payload serialized as JSON, if available." } - }, - "required": [ - "signWith", - "payloads", - "encoding", - "hashFunction" - ] + } }, - "SignRawPayloadsRequest": { + "SolanaSendTransactionStatus": { "type": "object", "properties": { - "type": { + "signature": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_SIGN_RAW_PAYLOADS" - ] - }, - "timestampMs": { + "x-nullable": true, + "description": "The Solana transaction signature, if available." + } + } + }, + "SparkClaimLeaf": { + "type": "object", + "properties": { + "leafId": { "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + "description": "Leaf identifier (UUID)." }, - "organizationId": { + "ciphertext": { "type": "string", - "description": "Unique identifier for a given Organization." - }, - "parameters": { - "$ref": "#/definitions/SignRawPayloadsIntent" + "description": "ECIES ciphertext (hex-encoded) containing the inbound transfer secret. Decrypted inside the enclave using the wallet's Identity key." }, - "generateAppProofs": { - "type": "boolean", - "x-nullable": true + "senderSignature": { + "type": "string", + "description": "Hex-encoded 64-byte compact ECDSA signature binding (leaf_id, transfer_id, ciphertext) to the sender's identity key. Verified inside the enclave before decryption." } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["leafId", "ciphertext", "senderSignature"] }, - "SignRawPayloadsResult": { + "SparkClaimPackage": { "type": "object", "properties": { - "signatures": { + "leaves": { "type": "array", "items": { "type": "object", - "$ref": "#/definitions/SignRawPayloadResult" - } - } - } - }, - "SignTransactionIntent": { - "type": "object", - "properties": { - "privateKeyId": { - "type": "string", - "description": "Unique identifier for a given Private Key." + "$ref": "#/definitions/SparkClaimLeaf" + }, + "description": "Leaves being claimed." }, - "unsignedTransaction": { + "threshold": { + "type": "integer", + "format": "int64", + "description": "Shamir threshold for reconstructing the per-leaf claim secret." + }, + "operatorRecipients": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/SparkOperatorRecipient" + }, + "description": "Operators that will receive Shamir shares." + }, + "transferId": { "type": "string", - "description": "Raw unsigned transaction to be signed by a particular Private Key." + "description": "Spark transfer identifier (UUID). Used together with each leaf's sender_signature to verify the sender bound this ciphertext to this transfer." }, - "type": { - "$ref": "#/definitions/TransactionType" + "senderIdentityPublicKey": { + "type": "string", + "description": "Sender's compressed secp256k1 identity public key (hex-encoded, 33 bytes). Used to verify the per-leaf sender_signature fields." } }, "required": [ - "privateKeyId", - "unsignedTransaction", - "type" + "leaves", + "threshold", + "operatorRecipients", + "transferId", + "senderIdentityPublicKey" ] }, - "SignTransactionIntentV2": { + "SparkClaimTransferIntent": { "type": "object", "properties": { "signWith": { "type": "string", - "description": "A Wallet account address, Private Key address, or Private Key identifier." - }, - "unsignedTransaction": { - "type": "string", - "description": "Raw unsigned transaction to be signed" + "description": "A Spark wallet account address identifying the wallet." }, - "type": { - "$ref": "#/definitions/TransactionType" + "claim": { + "$ref": "#/definitions/SparkClaimPackage", + "description": "Claim package parameters." } }, - "required": [ - "signWith", - "unsignedTransaction", - "type" - ] + "required": ["signWith", "claim"] }, - "SignTransactionRequest": { + "SparkClaimTransferRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_SIGN_TRANSACTION_V2" - ] + "enum": ["ACTIVITY_TYPE_SPARK_CLAIM_TRANSFER"] }, "timestampMs": { "type": "string", @@ -17468,224 +14958,184 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/definitions/SignTransactionIntentV2" - }, - "generateAppProofs": { - "type": "boolean", - "x-nullable": true - } - }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] - }, - "SignTransactionResult": { - "type": "object", - "properties": { - "signedTransaction": { - "type": "string" + "$ref": "#/definitions/SparkClaimTransferIntent" } }, - "required": [ - "signedTransaction" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "SignupUsage": { + "SparkClaimTransferResult": { "type": "object", "properties": { - "email": { - "type": "string", - "x-nullable": true - }, - "phoneNumber": { - "type": "string", - "x-nullable": true - }, - "apiKeys": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/ApiKeyParamsV2" - } - }, - "authenticators": { + "operatorPackages": { "type": "array", "items": { "type": "object", - "$ref": "#/definitions/AuthenticatorParamsV2" - } + "$ref": "#/definitions/SparkEncryptedOperatorPackage" + }, + "description": "Per-operator ECIES-encrypted packages." }, - "oauthProviders": { + "newLeafPublicKeys": { "type": "array", "items": { "type": "object", - "$ref": "#/definitions/OauthProviderParams" - } + "$ref": "#/definitions/SparkLeafPublicKey" + }, + "description": "Newly-derived SigningLeaf public keys, one per leaf, in input order." } - } + }, + "required": ["operatorPackages", "newLeafPublicKeys"] }, - "SignupUsageV2": { + "SparkDepositDerivation": { + "type": "object" + }, + "SparkEncryptedOperatorPackage": { "type": "object", "properties": { - "email": { + "operatorId": { "type": "string", - "x-nullable": true + "description": "Spark operator identifier (UUID)." }, - "phoneNumber": { + "encryptedPackage": { "type": "string", - "x-nullable": true - }, - "apiKeys": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/ApiKeyParamsV2" - } - }, - "authenticators": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/AuthenticatorParamsV2" - } - }, - "oauthProviders": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/OauthProviderParamsV2" - } + "description": "ECIES ciphertext (hex-encoded) opaque to Turnkey after emission." } - } + }, + "required": ["operatorId", "encryptedPackage"] }, - "SimpleClientExtensionResults": { + "SparkFrostCommitment": { "type": "object", "properties": { - "appid": { - "type": "boolean", - "x-nullable": true + "id": { + "type": "string", + "description": "FROST participant identifier, hex-encoded (32-byte scalar)." }, - "appidExclude": { - "type": "boolean", - "x-nullable": true + "hiding": { + "type": "string", + "description": "Hiding commitment D, hex-encoded compressed secp256k1 point." }, - "credProps": { - "$ref": "#/definitions/CredPropsAuthenticationExtensionsClientOutputs", - "x-nullable": true + "binding": { + "type": "string", + "description": "Binding commitment E, hex-encoded compressed secp256k1 point." } - } + }, + "required": ["id", "hiding", "binding"] }, - "SmartContractInterfaceType": { - "type": "string", - "enum": [ - "SMART_CONTRACT_INTERFACE_TYPE_ETHEREUM", - "SMART_CONTRACT_INTERFACE_TYPE_SOLANA" - ] + "SparkHtlcPreimageDerivation": { + "type": "object" }, - "SmsCustomizationParams": { + "SparkIdentityDerivation": { + "type": "object" + }, + "SparkKeyDerivation": { "type": "object", "properties": { - "template": { - "type": "string", - "x-nullable": true, - "description": "Template containing references to .OtpCode i.e Your OTP is {{.OtpCode}}" + "identity": { + "$ref": "#/definitions/SparkIdentityDerivation", + "description": "Spark identity key derivation." + }, + "signingLeaf": { + "$ref": "#/definitions/SparkSigningLeafDerivation", + "description": "Spark signing leaf key derivation, identified by leaf ID." + }, + "deposit": { + "$ref": "#/definitions/SparkDepositDerivation", + "description": "Spark deposit key derivation." + }, + "staticDeposit": { + "$ref": "#/definitions/SparkStaticDepositDerivation", + "description": "Spark static deposit key derivation, identified by index." + }, + "htlcPreimage": { + "$ref": "#/definitions/SparkHtlcPreimageDerivation", + "description": "Spark HTLC preimage key derivation." } } }, - "SolSendTransactionIntent": { + "SparkLeafPublicKey": { "type": "object", "properties": { - "unsignedTransaction": { - "type": "string", - "description": "Base64-encoded serialized unsigned Solana transaction" - }, - "signWith": { - "type": "string", - "description": "A wallet or private key address to sign with. This does not support private key IDs." - }, - "sponsor": { - "type": "boolean", - "x-nullable": true, - "description": "Whether to sponsor this transaction via Gas Station." - }, - "caip2": { + "leafId": { "type": "string", - "enum": [ - "solana:mainnet", - "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", - "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d", - "solana:devnet", - "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1", - "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1wcaWoxPkrZBG" - ], - "description": "CAIP-2 chain ID (e.g., 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' for Solana mainnet). Human-readable Solana aliases ('solana:mainnet', 'solana:devnet') are also accepted and normalized to canonical CAIP-2 values." + "description": "The Spark leaf_id this public key was derived for." }, - "recentBlockhash": { + "publicKey": { "type": "string", - "x-nullable": true, - "description": "user-provided blockhash for replay protection / deadline control. If omitted and sponsor=true, we fetch a fresh blockhash during execution" + "description": "Hex-encoded compressed secp256k1 point (33 bytes) for the SigningLeaf derivation at leaf_id." } }, - "required": [ - "unsignedTransaction", - "signWith", - "caip2" - ] + "required": ["leafId", "publicKey"] }, - "SolSendTransactionIntentV2": { + "SparkLightningReceivePackage": { "type": "object", "properties": { - "unsignedTransaction": { - "type": "string", - "description": "Hex-encoded serialized unsigned Solana transaction (full wire format with zeroed signature placeholders)" + "threshold": { + "type": "integer", + "format": "int64", + "description": "Feldman VSS threshold for reconstructing the preimage." }, - "signWiths": { + "operatorRecipients": { "type": "array", "items": { - "type": "string" + "type": "object", + "$ref": "#/definitions/SparkOperatorRecipient" }, - "description": "Ordered Solana signer addresses Turnkey signs with. Between 1 and 16 signers. For sponsored transactions this must list every required signer of the transaction in transaction order." + "description": "Operators that will receive Feldman shares of the preimage. Order must match the operators' numeric IDs in the Spark operator config - share index is the 1-based position in this list." + } + }, + "required": ["threshold", "operatorRecipients"] + }, + "SparkOperatorRecipient": { + "type": "object", + "properties": { + "operatorId": { + "type": "string", + "description": "Spark operator identifier (UUID)." }, - "sponsor": { - "type": "boolean", - "x-nullable": true, - "description": "Whether to sponsor this transaction via Gas Station." + "encryptionPublicKey": { + "type": "string", + "description": "Operator's ECIES encryption pubkey (hex-encoded compressed secp256k1 point)." + } + }, + "required": ["operatorId", "encryptionPublicKey"] + }, + "SparkPartialSignature": { + "type": "object", + "properties": { + "signatureShare": { + "type": "string", + "description": "Hex-encoded FROST partial signature." }, - "caip2": { + "hiding": { "type": "string", - "enum": [ - "solana:mainnet", - "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", - "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d", - "solana:devnet", - "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1", - "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1wcaWoxPkrZBG" - ], - "description": "CAIP-2 chain ID (e.g., 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' for Solana mainnet). Human-readable Solana aliases ('solana:mainnet', 'solana:devnet') are also accepted and normalized to canonical CAIP-2 values." + "description": "Turnkey's hiding commitment D (hex-encoded compressed secp256k1 point). Forward to the Spark Operator." }, - "recentBlockhash": { + "binding": { + "type": "string", + "description": "Turnkey's binding commitment E (hex-encoded compressed secp256k1 point). Forward to the Spark Operator." + } + }, + "required": ["signatureShare", "hiding", "binding"] + }, + "SparkPrepareLightningReceiveIntent": { + "type": "object", + "properties": { + "signWith": { "type": "string", - "x-nullable": true, - "description": "User-provided blockhash for replay protection / deadline control. If provided, it is used as-is, including for sponsored transactions (the transaction is only broadcastable while the blockhash is current). If omitted and sponsor=true, a fresh blockhash is fetched during execution." + "description": "A Spark wallet account address identifying the wallet." + }, + "lightningReceive": { + "$ref": "#/definitions/SparkLightningReceivePackage", + "description": "Lightning receive package parameters: threshold and operator recipients." } }, - "required": [ - "unsignedTransaction", - "signWiths", - "caip2" - ] + "required": ["signWith", "lightningReceive"] }, - "SolSendTransactionRequest": { + "SparkPrepareLightningReceiveRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_SOL_SEND_TRANSACTION" - ] + "enum": ["ACTIVITY_TYPE_SPARK_PREPARE_LIGHTNING_RECEIVE"] }, "timestampMs": { "type": "string", @@ -17696,1503 +15146,1570 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/definitions/SolSendTransactionIntent" - }, - "generateAppProofs": { - "type": "boolean", - "x-nullable": true + "$ref": "#/definitions/SparkPrepareLightningReceiveIntent" } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "SolSendTransactionResult": { + "SparkPrepareLightningReceiveResult": { "type": "object", "properties": { - "sendTransactionStatusId": { + "operatorPackages": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/SparkEncryptedOperatorPackage" + }, + "description": "Per-operator ECIES-encrypted Feldman share packages." + }, + "paymentHash": { "type": "string", - "description": "The send_transaction_status ID associated with the transaction submission" + "description": "Hex-encoded SHA256(preimage). Forward to the Lightning node." } }, - "required": [ - "sendTransactionStatusId" - ] + "required": ["operatorPackages", "paymentHash"] }, - "SolSendTransactionResultV2": { + "SparkPrepareTransferIntent": { "type": "object", "properties": { - "sendTransactionStatusId": { + "signWith": { "type": "string", - "description": "The send_transaction_status ID associated with the transaction submission" + "description": "A Spark wallet account address identifying the wallet." + }, + "transfer": { + "$ref": "#/definitions/SparkTransferPackage", + "description": "Transfer package parameters for HD key tweak splitting." } }, - "required": [ - "sendTransactionStatusId" - ] - }, - "SolanaConfig": { - "type": "object", - "properties": { - "rentPrefundEnabled": { - "type": "boolean", - "x-nullable": true, - "description": "Whether Solana rent prefunding is enabled for the organization. When omitted, the existing rent-prefund state is left unchanged." - } - } + "required": ["signWith", "transfer"] }, - "SolanaFailureDetails": { + "SparkPrepareTransferRequest": { "type": "object", "properties": { - "source": { + "type": { "type": "string", - "description": "Where the Solana failure occurred, such as simulation or preflight." - }, - "rpcCode": { - "type": "integer", - "format": "int32", - "x-nullable": true, - "description": "The Solana JSON-RPC error code, if available." + "enum": ["ACTIVITY_TYPE_SPARK_PREPARE_TRANSFER"] }, - "rpcMessage": { + "timestampMs": { "type": "string", - "x-nullable": true, - "description": "The Solana JSON-RPC error message, if available." + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, - "transactionErrorJson": { + "organizationId": { "type": "string", - "x-nullable": true, - "description": "The raw Solana transaction error object serialized as JSON, if available." + "description": "Unique identifier for a given Organization." }, - "logs": { + "parameters": { + "$ref": "#/definitions/SparkPrepareTransferIntent" + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "SparkPrepareTransferResult": { + "type": "object", + "properties": { + "operatorPackages": { "type": "array", "items": { - "type": "string" + "type": "object", + "$ref": "#/definitions/SparkEncryptedOperatorPackage" }, - "description": "Program logs returned by Solana simulation or preflight, if available." + "description": "Per-operator ECIES-encrypted packages." }, - "unitsConsumed": { + "transferUserSignature": { "type": "string", - "format": "uint64", - "x-nullable": true, - "description": "Compute units consumed during simulation or preflight, if available." + "description": "Hex-encoded ECDSA-DER signature of the TransferPackage signing payload, signed with the wallet's IDENTITY key." }, - "innerInstructionsJson": { - "type": "string", - "x-nullable": true, - "description": "The raw Solana inner instructions payload serialized as JSON, if available." + "newLeafPublicKeys": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/SparkLeafPublicKey" + }, + "description": "Newly-derived SigningLeaf public keys, one per leaf, in input order." } - } + }, + "required": [ + "operatorPackages", + "transferUserSignature", + "newLeafPublicKeys" + ] }, - "SolanaSendTransactionStatus": { + "SparkSignFrostIntent": { "type": "object", "properties": { - "signature": { + "signWith": { "type": "string", - "x-nullable": true, - "description": "The Solana transaction signature, if available." + "description": "A Spark wallet account address identifying the wallet to sign with." + }, + "signatures": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/SparkSignatureRequest" + }, + "description": "Batched sign requests. Each produces a partial signature plus Turnkey's public commitments." } - } + }, + "required": ["signWith", "signatures"] }, - "SparkClaimLeaf": { + "SparkSignFrostRequest": { "type": "object", "properties": { - "leafId": { + "type": { "type": "string", - "description": "Leaf identifier (UUID)." + "enum": ["ACTIVITY_TYPE_SPARK_SIGN_FROST"] }, - "ciphertext": { + "timestampMs": { "type": "string", - "description": "ECIES ciphertext (hex-encoded) containing the inbound transfer secret. Decrypted inside the enclave using the wallet's Identity key." + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, - "senderSignature": { + "organizationId": { "type": "string", - "description": "Hex-encoded 64-byte compact ECDSA signature binding (leaf_id, transfer_id, ciphertext) to the sender's identity key. Verified inside the enclave before decryption." + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/SparkSignFrostIntent" } }, - "required": [ - "leafId", - "ciphertext", - "senderSignature" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "SparkClaimPackage": { + "SparkSignFrostResult": { "type": "object", "properties": { - "leaves": { + "signatures": { "type": "array", "items": { "type": "object", - "$ref": "#/definitions/SparkClaimLeaf" + "$ref": "#/definitions/SparkPartialSignature" }, - "description": "Leaves being claimed." + "description": "Partial signatures plus Turnkey commitments, one per request, in order." + } + }, + "required": ["signatures"] + }, + "SparkSignatureRequest": { + "type": "object", + "properties": { + "derivation": { + "$ref": "#/definitions/SparkKeyDerivation", + "description": "Which key to sign with." }, - "threshold": { - "type": "integer", - "format": "int64", - "description": "Shamir threshold for reconstructing the per-leaf claim secret." + "message": { + "type": "string", + "description": "Hex-encoded 32-byte sighash to sign." }, - "operatorRecipients": { + "verifyingKey": { + "type": "string", + "description": "Aggregate group verifying key (hex-encoded compressed secp256k1 point), computed as P_ops + P_user. Bound into the nonce HMAC." + }, + "operatorCommitments": { "type": "array", "items": { "type": "object", - "$ref": "#/definitions/SparkOperatorRecipient" + "$ref": "#/definitions/SparkFrostCommitment" }, - "description": "Operators that will receive Shamir shares." - }, - "transferId": { - "type": "string", - "description": "Spark transfer identifier (UUID). Used together with each leaf's sender_signature to verify the sender bound this ciphertext to this transfer." + "description": "Commitments for every non-Turnkey participant. MUST NOT include an entry under Turnkey's identifier. Bound into the nonce HMAC." }, - "senderIdentityPublicKey": { + "adaptorPublicKey": { "type": "string", - "description": "Sender's compressed secp256k1 identity public key (hex-encoded, 33 bytes). Used to verify the per-leaf sender_signature fields." + "x-nullable": true, + "description": "Optional adaptor point T (hex-encoded 33-byte compressed secp256k1 pubkey). When set, Turnkey produces a Schnorr adaptor pre-signature with the FROST challenge bound to `R+T` (where `R` is the aggregate group nonce commitment from FROST). The party holding the discrete log `t` completes the pre-sig to a valid BIP-340 signature by adding `t` (or `-t`, for parity) to the signature scalar `s`. This is primarily used by Spark leaves-swap and other adaptor-bound flows; absent or empty leads to plain FROST signing (the typical case)." } }, "required": [ - "leaves", - "threshold", - "operatorRecipients", - "transferId", - "senderIdentityPublicKey" + "derivation", + "message", + "verifyingKey", + "operatorCommitments" ] }, - "SparkClaimTransferIntent": { + "SparkSigningLeafDerivation": { "type": "object", "properties": { - "signWith": { + "leafId": { "type": "string", - "description": "A Spark wallet account address identifying the wallet." - }, - "claim": { - "$ref": "#/definitions/SparkClaimPackage", - "description": "Claim package parameters." + "description": "Unique identifier for the Spark signing leaf." } }, - "required": [ - "signWith", - "claim" - ] + "required": ["leafId"] }, - "SparkClaimTransferRequest": { + "SparkStaticDepositDerivation": { "type": "object", "properties": { - "type": { + "index": { + "type": "integer", + "format": "int64", + "description": "Index used to derive the static deposit key." + } + }, + "required": ["index"] + }, + "SparkTransferLeaf": { + "type": "object", + "properties": { + "leafId": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_SPARK_CLAIM_TRANSFER" - ] + "description": "Leaf identifier (UUID)." }, - "timestampMs": { + "oldLeafDerivation": { + "$ref": "#/definitions/SparkKeyDerivation", + "description": "Derivation for the existing (pre-transfer) leaf key. Always a SigningLeaf derivation." + }, + "newLeafDerivation": { + "$ref": "#/definitions/SparkKeyDerivation", + "description": "Derivation for the new (post-transfer) leaf key. Always a SigningLeaf derivation. The enclave ECIES-encrypts this private key to receiver_public_key as the per-leaf secret_cipher; HD-derived rather than random so the sender can re-derive on retry (Turnkey's enclave is stateless)." + }, + "refundSignature": { "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + "x-nullable": true, + "description": "Client-produced CPFP refund signature (hex-encoded), passed through verbatim into the per-operator SendLeafKeyTweak. Empty omits the field from the operator package." }, - "organizationId": { + "directRefundSignature": { "type": "string", - "description": "Unique identifier for a given Organization." + "x-nullable": true, + "description": "Client-produced direct refund signature (hex-encoded). Passed through verbatim." }, - "parameters": { - "$ref": "#/definitions/SparkClaimTransferIntent" + "directFromCpfpRefundSignature": { + "type": "string", + "x-nullable": true, + "description": "Client-produced direct-from-CPFP refund signature (hex-encoded). Passed through verbatim." } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["leafId", "oldLeafDerivation", "newLeafDerivation"] }, - "SparkClaimTransferResult": { + "SparkTransferPackage": { "type": "object", "properties": { - "operatorPackages": { + "transferId": { + "type": "string", + "description": "Spark transfer identifier (UUID)." + }, + "leaves": { "type": "array", "items": { "type": "object", - "$ref": "#/definitions/SparkEncryptedOperatorPackage" + "$ref": "#/definitions/SparkTransferLeaf" }, - "description": "Per-operator ECIES-encrypted packages." + "description": "Leaves being transferred." }, - "newLeafPublicKeys": { + "threshold": { + "type": "integer", + "format": "int64", + "description": "Feldman VSS threshold for reconstructing the per-leaf tweak scalar." + }, + "operatorRecipients": { "type": "array", "items": { "type": "object", - "$ref": "#/definitions/SparkLeafPublicKey" + "$ref": "#/definitions/SparkOperatorRecipient" }, - "description": "Newly-derived SigningLeaf public keys, one per leaf, in input order." - } - }, - "required": [ - "operatorPackages", - "newLeafPublicKeys" - ] - }, - "SparkDepositDerivation": { - "type": "object" - }, - "SparkEncryptedOperatorPackage": { - "type": "object", - "properties": { - "operatorId": { - "type": "string", - "description": "Spark operator identifier (UUID)." + "description": "Operators that will receive Feldman shares of the per-leaf tweak. Order must match the operators' numeric IDs in the Spark operator config - share index is the 1-based position in this list." }, - "encryptedPackage": { + "receiverPublicKey": { "type": "string", - "description": "ECIES ciphertext (hex-encoded) opaque to Turnkey after emission." + "description": "Recipient's identity pubkey (hex-encoded compressed secp256k1 point). Each leaf's new_priv is ECIES-encrypted to this key and embedded in the per-operator package for claim-time delivery." } }, "required": [ - "operatorId", - "encryptedPackage" + "transferId", + "leaves", + "threshold", + "operatorRecipients", + "receiverPublicKey" ] }, - "SparkFrostCommitment": { + "StampLoginIntent": { "type": "object", "properties": { - "id": { + "publicKey": { "type": "string", - "description": "FROST participant identifier, hex-encoded (32-byte scalar)." + "description": "Client-side public key generated by the user, which will be conditionally added to org data based on the passkey stamp associated with this request" }, - "hiding": { + "expirationSeconds": { "type": "string", - "description": "Hiding commitment D, hex-encoded compressed secp256k1 point." + "x-nullable": true, + "description": "Expiration window (in seconds) indicating how long the Session is valid for. If not provided, a default of 15 minutes will be used." }, - "binding": { + "invalidateExisting": { + "type": "boolean", + "x-nullable": true, + "description": "Invalidate all other previously generated Login API keys" + }, + "sessionProfileId": { "type": "string", - "description": "Binding commitment E, hex-encoded compressed secp256k1 point." + "x-nullable": true, + "description": "Optional session profile ID to specify which Session Profile to use for this login. If not provided, the default read/write session will be used." } }, - "required": [ - "id", - "hiding", - "binding" - ] + "required": ["publicKey"] }, - "SparkHtlcPreimageDerivation": { - "type": "object" - }, - "SparkIdentityDerivation": { - "type": "object" - }, - "SparkKeyDerivation": { + "StampLoginRequest": { "type": "object", "properties": { - "identity": { - "$ref": "#/definitions/SparkIdentityDerivation", - "description": "Spark identity key derivation." + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_STAMP_LOGIN"] }, - "signingLeaf": { - "$ref": "#/definitions/SparkSigningLeafDerivation", - "description": "Spark signing leaf key derivation, identified by leaf ID." + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, - "deposit": { - "$ref": "#/definitions/SparkDepositDerivation", - "description": "Spark deposit key derivation." + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." }, - "staticDeposit": { - "$ref": "#/definitions/SparkStaticDepositDerivation", - "description": "Spark static deposit key derivation, identified by index." + "parameters": { + "$ref": "#/definitions/StampLoginIntent" }, - "htlcPreimage": { - "$ref": "#/definitions/SparkHtlcPreimageDerivation", - "description": "Spark HTLC preimage key derivation." + "generateAppProofs": { + "type": "boolean", + "x-nullable": true } - } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "SparkLeafPublicKey": { + "StampLoginResult": { "type": "object", "properties": { - "leafId": { - "type": "string", - "description": "The Spark leaf_id this public key was derived for." - }, - "publicKey": { + "session": { "type": "string", - "description": "Hex-encoded compressed secp256k1 point (33 bytes) for the SigningLeaf derivation at leaf_id." + "description": "Signed JWT containing an expiry, public key, session type, user id, and organization id" } }, - "required": [ - "leafId", - "publicKey" - ] + "required": ["session"] }, - "SparkLightningReceivePackage": { + "Status": { "type": "object", "properties": { - "threshold": { + "code": { "type": "integer", - "format": "int64", - "description": "Feldman VSS threshold for reconstructing the preimage." + "format": "int32" }, - "operatorRecipients": { + "message": { + "type": "string" + }, + "details": { "type": "array", "items": { "type": "object", - "$ref": "#/definitions/SparkOperatorRecipient" - }, - "description": "Operators that will receive Feldman shares of the preimage. Order must match the operators' numeric IDs in the Spark operator config - share index is the 1-based position in this list." + "$ref": "#/definitions/Any" + } } - }, - "required": [ - "threshold", - "operatorRecipients" - ] + } }, - "SparkOperatorRecipient": { + "TagType": { + "type": "string", + "enum": ["TAG_TYPE_USER", "TAG_TYPE_PRIVATE_KEY"] + }, + "TokenUsage": { "type": "object", "properties": { - "operatorId": { - "type": "string", - "description": "Spark operator identifier (UUID)." + "type": { + "$ref": "#/definitions/UsageType", + "description": "Type of token usage" }, - "encryptionPublicKey": { + "tokenId": { "type": "string", - "description": "Operator's ECIES encryption pubkey (hex-encoded compressed secp256k1 point)." + "description": "Unique identifier for the verification token" + }, + "signup": { + "$ref": "#/definitions/SignupUsage" + }, + "login": { + "$ref": "#/definitions/LoginUsage" + }, + "signupV2": { + "$ref": "#/definitions/SignupUsageV2" } }, - "required": [ - "operatorId", - "encryptionPublicKey" + "required": ["type", "tokenId"] + }, + "TransactionType": { + "type": "string", + "enum": [ + "TRANSACTION_TYPE_ETHEREUM", + "TRANSACTION_TYPE_SOLANA", + "TRANSACTION_TYPE_TRON", + "TRANSACTION_TYPE_BITCOIN", + "TRANSACTION_TYPE_TEMPO" ] }, - "SparkPartialSignature": { + "TvcApp": { "type": "object", "properties": { - "signatureShare": { + "id": { "type": "string", - "description": "Hex-encoded FROST partial signature." + "description": "Unique Identifier for this TVC App." }, - "hiding": { + "organizationId": { "type": "string", - "description": "Turnkey's hiding commitment D (hex-encoded compressed secp256k1 point). Forward to the Spark Operator." + "description": "Unique Identifier of the Organization for this TVC App" }, - "binding": { - "type": "string", - "description": "Turnkey's binding commitment E (hex-encoded compressed secp256k1 point). Forward to the Spark Operator." - } - }, - "required": [ - "signatureShare", - "hiding", - "binding" - ] - }, - "SparkPrepareLightningReceiveIntent": { - "type": "object", - "properties": { - "signWith": { + "name": { "type": "string", - "description": "A Spark wallet account address identifying the wallet." + "description": "Name for this TVC App." }, - "lightningReceive": { - "$ref": "#/definitions/SparkLightningReceivePackage", - "description": "Lightning receive package parameters: threshold and operator recipients." - } - }, - "required": [ - "signWith", - "lightningReceive" - ] - }, - "SparkPrepareLightningReceiveRequest": { - "type": "object", - "properties": { - "type": { + "quorumPublicKey": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_SPARK_PREPARE_LIGHTNING_RECEIVE" - ] + "description": "Public key for the Quorum Key associated with this TVC App" }, - "timestampMs": { + "manifestSet": { + "$ref": "#/definitions/TvcOperatorSet", + "description": "Manifest Set (people who can approve manifests)" + }, + "shareSet": { + "$ref": "#/definitions/TvcOperatorSet", + "description": "Share Set (people who have a share of the Quorum Key)" + }, + "enableEgress": { + "type": "boolean", + "description": "Whether or not this TVC App has network egress enabled." + }, + "createdAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + }, + "liveDeploymentId": { "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + "x-nullable": true, + "description": "The deployment currently designated to receive traffic. Null if no deployment for this app is deployed." }, - "organizationId": { + "publicDomain": { "type": "string", - "description": "Unique identifier for a given Organization." + "description": "The public domain for ingress to this TVC App (in the format \"app-.turnkey.cloud\")." }, - "parameters": { - "$ref": "#/definitions/SparkPrepareLightningReceiveIntent" + "enableDebugModeDeployments": { + "type": "boolean", + "description": "Whether this app permits debug-mode deployments. Set at app creation via CreateTvcAppIntent.enable_debug_mode_deployments and never updated thereafter. Debug-mode deployments expose logs and emit zero'd attestation PCRs, so remote attestation cannot succeed. The app's quorum key is therefore considered permanently insecure once enabled \u2014 a new app with a fresh quorum key must be created to return to a secure posture." } }, "required": [ - "type", - "timestampMs", + "id", "organizationId", - "parameters" + "name", + "quorumPublicKey", + "manifestSet", + "shareSet", + "enableEgress", + "createdAt", + "updatedAt", + "publicDomain", + "enableDebugModeDeployments" ] }, - "SparkPrepareLightningReceiveResult": { + "TvcContainerSpec": { "type": "object", "properties": { - "operatorPackages": { + "containerUrl": { + "type": "string", + "description": "The URL for this container image." + }, + "path": { + "type": "string", + "description": "The path (in-container) to the executable binary." + }, + "args": { "type": "array", "items": { - "type": "object", - "$ref": "#/definitions/SparkEncryptedOperatorPackage" + "type": "string" }, - "description": "Per-operator ECIES-encrypted Feldman share packages." + "description": "The arguments to pass to the executable." }, - "paymentHash": { - "type": "string", - "description": "Hex-encoded SHA256(preimage). Forward to the Lightning node." - } - }, - "required": [ - "operatorPackages", - "paymentHash" - ] - }, - "SparkPrepareTransferIntent": { - "type": "object", - "properties": { - "signWith": { - "type": "string", - "description": "A Spark wallet account address identifying the wallet." + "hasPullSecret": { + "type": "boolean", + "description": "Whether or not this container requires a pull secret to access." }, - "transfer": { - "$ref": "#/definitions/SparkTransferPackage", - "description": "Transfer package parameters for HD key tweak splitting." + "healthCheckType": { + "$ref": "#/definitions/TvcHealthCheckType", + "description": "The type of health check to perform against this executable." + }, + "healthCheckPort": { + "type": "integer", + "format": "int64", + "description": "The port to use for health checks against this executable." + }, + "publicIngressPort": { + "type": "integer", + "format": "int64", + "description": "The port to use for public ingress to this executable." } }, "required": [ - "signWith", - "transfer" + "containerUrl", + "path", + "args", + "hasPullSecret", + "healthCheckType", + "healthCheckPort", + "publicIngressPort" ] }, - "SparkPrepareTransferRequest": { + "TvcDeployment": { "type": "object", "properties": { - "type": { + "id": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_SPARK_PREPARE_TRANSFER" - ] + "description": "Unique Identifier for this TVC Deployment." }, - "timestampMs": { + "organizationId": { "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + "description": "Unique Identifier of the Organization for this TVC Deployment" }, - "organizationId": { + "appId": { "type": "string", - "description": "Unique identifier for a given Organization." + "description": "Unique Identifier of the TVC App for this deployment" }, - "parameters": { - "$ref": "#/definitions/SparkPrepareTransferIntent" - } - }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] - }, - "SparkPrepareTransferResult": { - "type": "object", - "properties": { - "operatorPackages": { + "manifestSet": { + "$ref": "#/definitions/TvcOperatorSet", + "description": "Set of TVC operators who can approve this deployment" + }, + "shareSet": { + "$ref": "#/definitions/TvcOperatorSet", + "description": "Set of TVC operators who have a share of the Quorum Key" + }, + "manifest": { + "$ref": "#/definitions/TvcManifest", + "description": "The manifest used for this deployment" + }, + "manifestApprovals": { "type": "array", "items": { "type": "object", - "$ref": "#/definitions/SparkEncryptedOperatorPackage" + "$ref": "#/definitions/TvcOperatorApproval" }, - "description": "Per-operator ECIES-encrypted packages." + "description": "List of operator approvals for this manifest" }, - "transferUserSignature": { + "qosVersion": { "type": "string", - "description": "Hex-encoded ECDSA-DER signature of the TransferPackage signing payload, signed with the wallet's IDENTITY key." + "description": "QOS Version used for this deployment" }, - "newLeafPublicKeys": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/SparkLeafPublicKey" - }, - "description": "Newly-derived SigningLeaf public keys, one per leaf, in input order." + "pivotContainer": { + "$ref": "#/definitions/TvcContainerSpec", + "description": "The pivot container spec for this deployment" + }, + "createdAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + }, + "delete": { + "type": "boolean", + "description": "Whether or not the user wants this deployment deleted from the cluster." } }, "required": [ - "operatorPackages", - "transferUserSignature", - "newLeafPublicKeys" + "id", + "organizationId", + "appId", + "manifestSet", + "shareSet", + "manifest", + "manifestApprovals", + "qosVersion", + "pivotContainer", + "createdAt", + "updatedAt", + "delete" ] }, - "SparkSignFrostIntent": { + "TvcDeploymentDebugLogEntry": { "type": "object", "properties": { - "signWith": { - "type": "string", - "description": "A Spark wallet account address identifying the wallet to sign with." + "line": { + "$ref": "#/definitions/LogLine", + "description": "Application log line with its platform timestamp." }, - "signatures": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/SparkSignatureRequest" - }, - "description": "Batched sign requests. Each produces a partial signature plus Turnkey's public commitments." + "replicaLabel": { + "type": "string", + "description": "Public replica label that produced this log line, for example 'replica 2/3'." } }, - "required": [ - "signWith", - "signatures" - ] + "required": ["line", "replicaLabel"] }, - "SparkSignFrostRequest": { + "TvcHealthCheckType": { + "type": "string", + "enum": ["TVC_HEALTH_CHECK_TYPE_HTTP", "TVC_HEALTH_CHECK_TYPE_GRPC"] + }, + "TvcManifest": { "type": "object", "properties": { - "type": { + "id": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_SPARK_SIGN_FROST" - ] + "description": "Unique Identifier for this TVC Manifest." }, - "timestampMs": { + "manifest": { "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + "format": "byte", + "description": "The manifest content (raw UTF-8 JSON bytes)" }, - "organizationId": { - "type": "string", - "description": "Unique identifier for a given Organization." + "createdAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" }, - "parameters": { - "$ref": "#/definitions/SparkSignFrostIntent" + "updatedAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["id", "manifest", "createdAt", "updatedAt"] }, - "SparkSignFrostResult": { + "TvcManifestApproval": { "type": "object", "properties": { - "signatures": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/SparkPartialSignature" - }, - "description": "Partial signatures plus Turnkey commitments, one per request, in order." + "operatorId": { + "type": "string", + "description": "Unique identifier of the operator providing this approval" + }, + "signature": { + "type": "string", + "description": "Signature from the operator approving the manifest" } }, - "required": [ - "signatures" - ] + "required": ["operatorId", "signature"] }, - "SparkSignatureRequest": { + "TvcOperator": { "type": "object", "properties": { - "derivation": { - "$ref": "#/definitions/SparkKeyDerivation", - "description": "Which key to sign with." + "id": { + "type": "string", + "description": "Unique Identifier for this TVC Operator." }, - "message": { + "name": { "type": "string", - "description": "Hex-encoded 32-byte sighash to sign." + "description": "Name of this TVC Operator." }, - "verifyingKey": { + "publicKey": { "type": "string", - "description": "Aggregate group verifying key (hex-encoded compressed secp256k1 point), computed as P_ops + P_user. Bound into the nonce HMAC." + "description": "Public key for this TVC Operator." }, - "operatorCommitments": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/SparkFrostCommitment" - }, - "description": "Commitments for every non-Turnkey participant. MUST NOT include an entry under Turnkey's identifier. Bound into the nonce HMAC." + "createdAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" }, - "adaptorPublicKey": { - "type": "string", - "x-nullable": true, - "description": "Optional adaptor point T (hex-encoded 33-byte compressed secp256k1 pubkey). When set, Turnkey produces a Schnorr adaptor pre-signature with the FROST challenge bound to `R+T` (where `R` is the aggregate group nonce commitment from FROST). The party holding the discrete log `t` completes the pre-sig to a valid BIP-340 signature by adding `t` (or `-t`, for parity) to the signature scalar `s`. This is primarily used by Spark leaves-swap and other adaptor-bound flows; absent or empty leads to plain FROST signing (the typical case)." - } - }, - "required": [ - "derivation", - "message", - "verifyingKey", - "operatorCommitments" - ] + "updatedAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + } + }, + "required": ["id", "name", "publicKey", "createdAt", "updatedAt"] }, - "SparkSigningLeafDerivation": { + "TvcOperatorApproval": { "type": "object", "properties": { - "leafId": { + "id": { "type": "string", - "description": "Unique identifier for the Spark signing leaf." + "description": "Unique ID for this approval" + }, + "manifestId": { + "type": "string", + "description": "Unique Identifier of the TVC Manifest being approved" + }, + "operator": { + "$ref": "#/definitions/TvcOperator", + "description": "The TVC Operator who made this approval" + }, + "approval": { + "type": "string", + "format": "byte", + "description": "Signature of the operator over the deployment manifest" + }, + "createdAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" } }, "required": [ - "leafId" + "id", + "manifestId", + "operator", + "approval", + "createdAt", + "updatedAt" ] }, - "SparkStaticDepositDerivation": { + "TvcOperatorParams": { "type": "object", "properties": { - "index": { - "type": "integer", - "format": "int64", - "description": "Index used to derive the static deposit key." + "name": { + "type": "string", + "description": "The name for this new operator" + }, + "publicKey": { + "type": "string", + "description": "Public key for this operator" } }, - "required": [ - "index" - ] + "required": ["name", "publicKey"] }, - "SparkTransferLeaf": { + "TvcOperatorSet": { "type": "object", "properties": { - "leafId": { + "id": { "type": "string", - "description": "Leaf identifier (UUID)." - }, - "oldLeafDerivation": { - "$ref": "#/definitions/SparkKeyDerivation", - "description": "Derivation for the existing (pre-transfer) leaf key. Always a SigningLeaf derivation." - }, - "newLeafDerivation": { - "$ref": "#/definitions/SparkKeyDerivation", - "description": "Derivation for the new (post-transfer) leaf key. Always a SigningLeaf derivation. The enclave ECIES-encrypts this private key to receiver_public_key as the per-leaf secret_cipher; HD-derived rather than random so the sender can re-derive on retry (Turnkey's enclave is stateless)." + "description": "Unique Identifier for this TVC Operator Set." }, - "refundSignature": { + "name": { "type": "string", - "x-nullable": true, - "description": "Client-produced CPFP refund signature (hex-encoded), passed through verbatim into the per-operator SendLeafKeyTweak. Empty omits the field from the operator package." + "description": "Name of this TVC Operator Set." }, - "directRefundSignature": { + "organizationId": { "type": "string", - "x-nullable": true, - "description": "Client-produced direct refund signature (hex-encoded). Passed through verbatim." + "description": "Unique Identifier of the Organization for this TVC Operator Set" }, - "directFromCpfpRefundSignature": { - "type": "string", - "x-nullable": true, - "description": "Client-produced direct-from-CPFP refund signature (hex-encoded). Passed through verbatim." + "operators": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/TvcOperator" + }, + "description": "List of TVC Operators in this set" + }, + "threshold": { + "type": "integer", + "format": "int64", + "description": "Threshold number of operators required for quorum." + }, + "createdAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" } }, "required": [ - "leafId", - "oldLeafDerivation", - "newLeafDerivation" + "id", + "name", + "organizationId", + "operators", + "threshold", + "createdAt", + "updatedAt" ] }, - "SparkTransferPackage": { + "TvcOperatorSetParams": { "type": "object", "properties": { - "transferId": { + "name": { "type": "string", - "description": "Spark transfer identifier (UUID)." + "description": "Short description for this new operator set" }, - "leaves": { + "newOperators": { "type": "array", "items": { "type": "object", - "$ref": "#/definitions/SparkTransferLeaf" + "$ref": "#/definitions/TvcOperatorParams" }, - "description": "Leaves being transferred." + "description": "Operators to create as part of this new operator set" + }, + "existingOperatorIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Existing operators to use as part of this new operator set" }, "threshold": { "type": "integer", "format": "int64", - "description": "Feldman VSS threshold for reconstructing the per-leaf tweak scalar." + "description": "The threshold of operators needed to reach consensus in this new Operator Set" + } + }, + "required": ["name", "threshold"] + }, + "TxError": { + "type": "object", + "properties": { + "message": { + "type": "string", + "description": "Human-readable error message describing what went wrong." }, - "operatorRecipients": { + "revertChain": { "type": "array", "items": { "type": "object", - "$ref": "#/definitions/SparkOperatorRecipient" + "$ref": "#/definitions/RevertChainEntry" }, - "description": "Operators that will receive Feldman shares of the per-leaf tweak. Order must match the operators' numeric IDs in the Spark operator config - share index is the 1-based position in this list." + "description": "Chain of revert errors from nested contract calls, ordered from outermost to innermost." }, - "receiverPublicKey": { - "type": "string", - "description": "Recipient's identity pubkey (hex-encoded compressed secp256k1 point). Each leaf's new_priv is ECIES-encrypted to this key and embedded in the per-operator package for claim-time delivery." + "solana": { + "$ref": "#/definitions/SolanaFailureDetails", + "x-nullable": true, + "description": "Solana-specific failure details for simulation or preflight errors, if available." + }, + "eth": { + "$ref": "#/definitions/EthFailureDetails", + "x-nullable": true, + "description": "Ethereum-specific failure details, if available." } - }, - "required": [ - "transferId", - "leaves", - "threshold", - "operatorRecipients", - "receiverPublicKey" - ] + } }, - "StampLoginIntent": { + "UnknownRevertError": { "type": "object", "properties": { - "publicKey": { - "type": "string", - "description": "Client-side public key generated by the user, which will be conditionally added to org data based on the passkey stamp associated with this request" - }, - "expirationSeconds": { + "selector": { "type": "string", "x-nullable": true, - "description": "Expiration window (in seconds) indicating how long the Session is valid for. If not provided, a default of 15 minutes will be used." - }, - "invalidateExisting": { - "type": "boolean", - "x-nullable": true, - "description": "Invalidate all other previously generated Login API keys" + "description": "The 4-byte error selector, if available." }, - "sessionProfileId": { + "data": { "type": "string", "x-nullable": true, - "description": "Optional session profile ID to specify which Session Profile to use for this login. If not provided, the default read/write session will be used." + "description": "The raw error data, hex-encoded." + } + } + }, + "UpdateAllowedOriginsIntent": { + "type": "object", + "properties": { + "allowedOrigins": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Additional origins requests are allowed from besides Turnkey origins" } }, - "required": [ - "publicKey" - ] + "required": ["allowedOrigins"] }, - "StampLoginRequest": { + "UpdateAllowedOriginsResult": { + "type": "object" + }, + "UpdateAuthProxyConfigIntent": { "type": "object", "properties": { - "type": { + "allowedOrigins": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Updated list of allowed origins for CORS." + }, + "allowedAuthMethods": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Updated list of allowed proxy authentication methods." + }, + "sendFromEmailAddress": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_STAMP_LOGIN" - ] + "x-nullable": true, + "description": "Custom 'from' address for auth-related emails." }, - "timestampMs": { + "replyToEmailAddress": { "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + "x-nullable": true, + "description": "Custom reply-to address for auth-related emails." }, - "organizationId": { + "emailAuthTemplateId": { "type": "string", - "description": "Unique identifier for a given Organization." + "x-nullable": true, + "description": "Template ID for email-auth messages." + }, + "otpTemplateId": { + "type": "string", + "x-nullable": true, + "description": "Template ID for OTP SMS messages." + }, + "emailCustomizationParams": { + "$ref": "#/definitions/EmailCustomizationParams", + "x-nullable": true, + "description": "Optional parameters for customizing emails. If not provided, the default email will be used." + }, + "smsCustomizationParams": { + "$ref": "#/definitions/SmsCustomizationParams", + "x-nullable": true, + "description": "Overrides for auth-related SMS content." + }, + "walletKitSettings": { + "$ref": "#/definitions/WalletKitSettingsParams", + "x-nullable": true, + "description": "Overrides for react wallet kit related settings." + }, + "otpExpirationSeconds": { + "type": "integer", + "format": "int32", + "x-nullable": true, + "description": "OTP code lifetime in seconds." + }, + "verificationTokenExpirationSeconds": { + "type": "integer", + "format": "int32", + "x-nullable": true, + "description": "Verification-token lifetime in seconds." }, - "parameters": { - "$ref": "#/definitions/StampLoginIntent" + "sessionExpirationSeconds": { + "type": "integer", + "format": "int32", + "x-nullable": true, + "description": "Session lifetime in seconds." }, - "generateAppProofs": { + "otpAlphanumeric": { "type": "boolean", - "x-nullable": true - } - }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] - }, - "StampLoginResult": { - "type": "object", - "properties": { - "session": { - "type": "string", - "description": "Signed JWT containing an expiry, public key, session type, user id, and organization id" - } - }, - "required": [ - "session" - ] - }, - "Status": { - "type": "object", - "properties": { - "code": { + "x-nullable": true, + "description": "Enable alphanumeric OTP codes." + }, + "otpLength": { "type": "integer", - "format": "int32" + "format": "int32", + "x-nullable": true, + "description": "Desired OTP code length (6\u20139)." }, - "message": { - "type": "string" + "sendFromEmailSenderName": { + "type": "string", + "x-nullable": true, + "description": "Custom 'from' email sender for auth-related emails." }, - "details": { + "verificationTokenRequiredForGetAccountPii": { + "type": "boolean", + "x-nullable": true, + "description": "Verification token required for get account with PII (email/phone number). Default false." + }, + "socialLinkingClientIds": { "type": "array", "items": { - "type": "object", - "$ref": "#/definitions/Any" - } + "type": "string" + }, + "description": "Whitelisted OAuth client IDs for social account linking. When a user authenticates via a social provider with an email matching an existing account, the accounts will be linked if the client ID is in this list and the issuer is considered a trusted provider." } } }, - "TagType": { - "type": "string", - "enum": [ - "TAG_TYPE_USER", - "TAG_TYPE_PRIVATE_KEY" - ] - }, - "TokenUsage": { + "UpdateAuthProxyConfigResult": { "type": "object", "properties": { - "type": { - "$ref": "#/definitions/UsageType", - "description": "Type of token usage" - }, - "tokenId": { + "configId": { "type": "string", - "description": "Unique identifier for the verification token" - }, - "signup": { - "$ref": "#/definitions/SignupUsage" - }, - "login": { - "$ref": "#/definitions/LoginUsage" - }, - "signupV2": { - "$ref": "#/definitions/SignupUsageV2" + "description": "Unique identifier for a given User. (representing the turnkey signer user id)" } - }, - "required": [ - "type", - "tokenId" - ] - }, - "TransactionType": { - "type": "string", - "enum": [ - "TRANSACTION_TYPE_ETHEREUM", - "TRANSACTION_TYPE_SOLANA", - "TRANSACTION_TYPE_TRON", - "TRANSACTION_TYPE_BITCOIN", - "TRANSACTION_TYPE_TEMPO" - ] - }, - "TransportEncryptionSuite": { - "type": "string", - "enum": [ - "TRANSPORT_ENCRYPTION_SUITE_ENCLAVE_ENCRYPT_V1" - ] + } }, - "TvcApp": { + "UpdateFiatOnRampCredentialIntent": { "type": "object", "properties": { - "id": { + "fiatOnrampCredentialId": { "type": "string", - "description": "Unique Identifier for this TVC App." + "description": "The ID of the fiat on-ramp credential to update" }, - "organizationId": { - "type": "string", - "description": "Unique Identifier of the Organization for this TVC App" + "onrampProvider": { + "$ref": "#/definitions/FiatOnRampProvider", + "description": "The fiat on-ramp provider" }, - "name": { + "projectId": { "type": "string", - "description": "Name for this TVC App." + "x-nullable": true, + "description": "Project ID for the on-ramp provider. Some providers, like Coinbase, require this additional identifier." }, - "quorumPublicKey": { + "publishableApiKey": { "type": "string", - "description": "Public key for the Quorum Key associated with this TVC App" - }, - "manifestSet": { - "$ref": "#/definitions/TvcOperatorSet", - "description": "Manifest Set (people who can approve manifests)" - }, - "shareSet": { - "$ref": "#/definitions/TvcOperatorSet", - "description": "Share Set (people who have a share of the Quorum Key)" - }, - "enableEgress": { - "type": "boolean", - "description": "Whether or not this TVC App has network egress enabled." - }, - "createdAt": { - "$ref": "#/definitions/external.data.v1.Timestamp" - }, - "updatedAt": { - "$ref": "#/definitions/external.data.v1.Timestamp" + "description": "Publishable API key for the on-ramp provider" }, - "liveDeploymentId": { + "encryptedSecretApiKey": { "type": "string", - "x-nullable": true, - "description": "The deployment currently designated to receive traffic. Null if no deployment for this app is deployed." + "description": "Secret API key for the on-ramp provider encrypted to our on-ramp encryption public key" }, - "publicDomain": { + "encryptedPrivateApiKey": { "type": "string", - "description": "The public domain for ingress to this TVC App (in the format \"app-.turnkey.cloud\")." - }, - "enableDebugModeDeployments": { - "type": "boolean", - "description": "Whether this app permits debug-mode deployments. Set at app creation via CreateTvcAppIntent.enable_debug_mode_deployments and never updated thereafter. Debug-mode deployments expose logs and emit zero'd attestation PCRs, so remote attestation cannot succeed. The app's quorum key is therefore considered permanently insecure once enabled \u2014 a new app with a fresh quorum key must be created to return to a secure posture." + "x-nullable": true, + "description": "Private API key for the on-ramp provider encrypted to our on-ramp encryption public key. Some providers, like Coinbase, require this additional key." } }, "required": [ - "id", - "organizationId", - "name", - "quorumPublicKey", - "manifestSet", - "shareSet", - "enableEgress", - "createdAt", - "updatedAt", - "publicDomain", - "enableDebugModeDeployments" + "fiatOnrampCredentialId", + "onrampProvider", + "publishableApiKey", + "encryptedSecretApiKey" ] }, - "TvcContainerSpec": { + "UpdateFiatOnRampCredentialRequest": { "type": "object", "properties": { - "containerUrl": { + "type": { "type": "string", - "description": "The URL for this container image." + "enum": ["ACTIVITY_TYPE_UPDATE_FIAT_ON_RAMP_CREDENTIAL"] }, - "path": { + "timestampMs": { "type": "string", - "description": "The path (in-container) to the executable binary." - }, - "args": { - "type": "array", - "items": { - "type": "string" - }, - "description": "The arguments to pass to the executable." - }, - "hasPullSecret": { - "type": "boolean", - "description": "Whether or not this container requires a pull secret to access." + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, - "healthCheckType": { - "$ref": "#/definitions/TvcHealthCheckType", - "description": "The type of health check to perform against this executable." + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." }, - "healthCheckPort": { - "type": "integer", - "format": "int64", - "description": "The port to use for health checks against this executable." + "parameters": { + "$ref": "#/definitions/UpdateFiatOnRampCredentialIntent" }, - "publicIngressPort": { - "type": "integer", - "format": "int64", - "description": "The port to use for public ingress to this executable." + "generateAppProofs": { + "type": "boolean", + "x-nullable": true } }, - "required": [ - "containerUrl", - "path", - "args", - "hasPullSecret", - "healthCheckType", - "healthCheckPort", - "publicIngressPort" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "TvcDeployment": { + "UpdateFiatOnRampCredentialResult": { "type": "object", "properties": { - "id": { + "fiatOnRampCredentialId": { "type": "string", - "description": "Unique Identifier for this TVC Deployment." - }, - "organizationId": { + "description": "Unique identifier of the Fiat On-Ramp credential that was updated" + } + }, + "required": ["fiatOnRampCredentialId"] + }, + "UpdateMfaPolicyIntent": { + "type": "object", + "properties": { + "userId": { "type": "string", - "description": "Unique Identifier of the Organization for this TVC Deployment" + "description": "The ID of the User to update the MFA Policy for." }, - "appId": { + "mfaPolicyId": { "type": "string", - "description": "Unique Identifier of the TVC App for this deployment" - }, - "manifestSet": { - "$ref": "#/definitions/TvcOperatorSet", - "description": "Set of TVC operators who can approve this deployment" - }, - "shareSet": { - "$ref": "#/definitions/TvcOperatorSet", - "description": "Set of TVC operators who have a share of the Quorum Key" + "description": "Unique identifier for a given MFA Policy." }, - "manifest": { - "$ref": "#/definitions/TvcManifest", - "description": "The manifest used for this deployment" + "mfaPolicyName": { + "type": "string", + "x-nullable": true, + "description": "Human-readable name for a Policy." }, - "manifestApprovals": { + "condition": { + "type": "string", + "x-nullable": true, + "description": "A condition expression that evaluates to true or false, determining when this MFA policy applies." + }, + "requiredAuthenticationMethods": { "type": "array", "items": { "type": "object", - "$ref": "#/definitions/TvcOperatorApproval" + "$ref": "#/definitions/RequiredAuthenticationMethodParams" }, - "description": "List of operator approvals for this manifest" + "description": "An ordered list of authentication requirements. Each requirement must be satisfied sequentially to complete MFA." }, - "qosVersion": { - "type": "string", - "description": "QOS Version used for this deployment" + "order": { + "type": "integer", + "format": "int64", + "x-nullable": true, + "description": "The order in which this MFA policy is evaluated, starting from 0, relative to other MFA policies. Lower order values are evaluated first." }, - "pivotContainer": { - "$ref": "#/definitions/TvcContainerSpec", - "description": "The pivot container spec for this deployment" + "notes": { + "type": "string", + "x-nullable": true, + "description": "Notes for an MFA Policy." + } + }, + "required": ["userId", "mfaPolicyId"] + }, + "UpdateMfaPolicyRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_UPDATE_MFA_POLICY"] }, - "createdAt": { - "$ref": "#/definitions/external.data.v1.Timestamp" + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, - "updatedAt": { - "$ref": "#/definitions/external.data.v1.Timestamp" + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." }, - "delete": { - "type": "boolean", - "description": "Whether or not the user wants this deployment deleted from the cluster." + "parameters": { + "$ref": "#/definitions/UpdateMfaPolicyIntent" } }, - "required": [ - "id", - "organizationId", - "appId", - "manifestSet", - "shareSet", - "manifest", - "manifestApprovals", - "qosVersion", - "pivotContainer", - "createdAt", - "updatedAt", - "delete" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "TvcDeploymentDebugLogEntry": { + "UpdateMfaPolicyResult": { "type": "object", "properties": { - "line": { - "$ref": "#/definitions/LogLine", - "description": "Application log line with its platform timestamp." + "mfaPolicyId": { + "type": "string", + "description": "Unique identifier for a given MFA Policy." + } + }, + "required": ["mfaPolicyId"] + }, + "UpdateOauth2CredentialIntent": { + "type": "object", + "properties": { + "oauth2CredentialId": { + "type": "string", + "description": "The ID of the OAuth 2.0 credential to update" }, - "replicaLabel": { + "provider": { + "$ref": "#/definitions/Oauth2Provider", + "description": "The OAuth 2.0 provider" + }, + "clientId": { "type": "string", - "description": "Public replica label that produced this log line, for example 'replica 2/3'." + "description": "The Client ID issued by the OAuth 2.0 provider" + }, + "encryptedClientSecret": { + "type": "string", + "description": "The client secret issued by the OAuth 2.0 provider encrypted to the TLS Fetcher quorum key" } }, "required": [ - "line", - "replicaLabel" - ] - }, - "TvcHealthCheckType": { - "type": "string", - "enum": [ - "TVC_HEALTH_CHECK_TYPE_HTTP", - "TVC_HEALTH_CHECK_TYPE_GRPC" + "oauth2CredentialId", + "provider", + "clientId", + "encryptedClientSecret" ] }, - "TvcManifest": { + "UpdateOauth2CredentialRequest": { "type": "object", "properties": { - "id": { + "type": { "type": "string", - "description": "Unique Identifier for this TVC Manifest." + "enum": ["ACTIVITY_TYPE_UPDATE_OAUTH2_CREDENTIAL"] }, - "manifest": { + "timestampMs": { "type": "string", - "format": "byte", - "description": "The manifest content (raw UTF-8 JSON bytes)" + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, - "createdAt": { - "$ref": "#/definitions/external.data.v1.Timestamp" + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." }, - "updatedAt": { - "$ref": "#/definitions/external.data.v1.Timestamp" + "parameters": { + "$ref": "#/definitions/UpdateOauth2CredentialIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true } }, - "required": [ - "id", - "manifest", - "createdAt", - "updatedAt" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "TvcManifestApproval": { + "UpdateOauth2CredentialResult": { "type": "object", "properties": { - "operatorId": { + "oauth2CredentialId": { "type": "string", - "description": "Unique identifier of the operator providing this approval" - }, - "signature": { + "description": "Unique identifier of the OAuth 2.0 credential that was updated" + } + }, + "required": ["oauth2CredentialId"] + }, + "UpdateOrganizationNameIntent": { + "type": "object", + "properties": { + "organizationName": { "type": "string", - "description": "Signature from the operator approving the manifest" + "description": "New name for the Organization." } }, - "required": [ - "operatorId", - "signature" - ] + "required": ["organizationName"] }, - "TvcOperator": { + "UpdateOrganizationNameRequest": { "type": "object", "properties": { - "id": { + "type": { "type": "string", - "description": "Unique Identifier for this TVC Operator." + "enum": ["ACTIVITY_TYPE_UPDATE_ORGANIZATION_NAME"] }, - "name": { + "timestampMs": { "type": "string", - "description": "Name of this TVC Operator." + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, - "publicKey": { + "organizationId": { "type": "string", - "description": "Public key for this TVC Operator." + "description": "Unique identifier for a given Organization." }, - "createdAt": { - "$ref": "#/definitions/external.data.v1.Timestamp" + "parameters": { + "$ref": "#/definitions/UpdateOrganizationNameIntent" }, - "updatedAt": { - "$ref": "#/definitions/external.data.v1.Timestamp" + "generateAppProofs": { + "type": "boolean", + "x-nullable": true } }, - "required": [ - "id", - "name", - "publicKey", - "createdAt", - "updatedAt" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "TvcOperatorApproval": { + "UpdateOrganizationNameResult": { "type": "object", "properties": { - "id": { + "organizationId": { "type": "string", - "description": "Unique ID for this approval" + "description": "Unique identifier for the Organization." }, - "manifestId": { + "organizationName": { "type": "string", - "description": "Unique Identifier of the TVC Manifest being approved" + "description": "The updated organization name." + } + }, + "required": ["organizationId", "organizationName"] + }, + "UpdatePolicyIntent": { + "type": "object", + "properties": { + "policyId": { + "type": "string", + "description": "Unique identifier for a given Policy." }, - "operator": { - "$ref": "#/definitions/TvcOperator", - "description": "The TVC Operator who made this approval" + "policyName": { + "type": "string", + "x-nullable": true, + "description": "Human-readable name for a Policy." }, - "approval": { + "policyEffect": { + "$ref": "#/definitions/Effect", + "x-nullable": true, + "description": "The instruction to DENY or ALLOW an activity (optional)." + }, + "policyCondition": { "type": "string", - "format": "byte", - "description": "Signature of the operator over the deployment manifest" + "x-nullable": true, + "description": "The condition expression that triggers the Effect (optional)." }, - "createdAt": { - "$ref": "#/definitions/external.data.v1.Timestamp" + "policyConsensus": { + "type": "string", + "x-nullable": true, + "description": "The consensus expression that triggers the Effect (optional)." }, - "updatedAt": { - "$ref": "#/definitions/external.data.v1.Timestamp" + "policyNotes": { + "type": "string", + "x-nullable": true, + "description": "Accompanying notes for a Policy (optional)." } }, - "required": [ - "id", - "manifestId", - "operator", - "approval", - "createdAt", - "updatedAt" - ] + "required": ["policyId"] }, - "TvcOperatorParams": { + "UpdatePolicyIntentV2": { "type": "object", "properties": { - "name": { + "policyId": { + "type": "string", + "description": "Unique identifier for a given Policy." + }, + "policyName": { + "type": "string", + "x-nullable": true, + "description": "Human-readable name for a Policy." + }, + "policyEffect": { + "$ref": "#/definitions/Effect", + "x-nullable": true, + "description": "The instruction to DENY or ALLOW an activity (optional)." + }, + "policyCondition": { + "type": "string", + "x-nullable": true, + "description": "The condition expression that triggers the Effect (optional)." + }, + "policyConsensus": { "type": "string", - "description": "The name for this new operator" + "x-nullable": true, + "description": "The consensus expression that triggers the Effect (optional)." }, - "publicKey": { + "policyNotes": { "type": "string", - "description": "Public key for this operator" + "x-nullable": true, + "description": "Accompanying notes for a Policy (optional)." } }, - "required": [ - "name", - "publicKey" - ] + "required": ["policyId"] }, - "TvcOperatorSet": { + "UpdatePolicyRequest": { "type": "object", "properties": { - "id": { + "type": { "type": "string", - "description": "Unique Identifier for this TVC Operator Set." + "enum": ["ACTIVITY_TYPE_UPDATE_POLICY_V2"] }, - "name": { + "timestampMs": { "type": "string", - "description": "Name of this TVC Operator Set." + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, "organizationId": { "type": "string", - "description": "Unique Identifier of the Organization for this TVC Operator Set" - }, - "operators": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/TvcOperator" - }, - "description": "List of TVC Operators in this set" - }, - "threshold": { - "type": "integer", - "format": "int64", - "description": "Threshold number of operators required for quorum." + "description": "Unique identifier for a given Organization." }, - "createdAt": { - "$ref": "#/definitions/external.data.v1.Timestamp" + "parameters": { + "$ref": "#/definitions/UpdatePolicyIntentV2" }, - "updatedAt": { - "$ref": "#/definitions/external.data.v1.Timestamp" + "generateAppProofs": { + "type": "boolean", + "x-nullable": true } }, - "required": [ - "id", - "name", - "organizationId", - "operators", - "threshold", - "createdAt", - "updatedAt" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "TvcOperatorSetParams": { + "UpdatePolicyResult": { "type": "object", "properties": { - "name": { + "policyId": { "type": "string", - "description": "Short description for this new operator set" + "description": "Unique identifier for a given Policy." + } + }, + "required": ["policyId"] + }, + "UpdatePolicyResultV2": { + "type": "object", + "properties": { + "policyId": { + "type": "string", + "description": "Unique identifier for a given Policy." + } + }, + "required": ["policyId"] + }, + "UpdatePrivateKeyTagIntent": { + "type": "object", + "properties": { + "privateKeyTagId": { + "type": "string", + "description": "Unique identifier for a given Private Key Tag." }, - "newOperators": { + "newPrivateKeyTagName": { + "type": "string", + "x-nullable": true, + "description": "The new, human-readable name for the tag with the given ID." + }, + "addPrivateKeyIds": { "type": "array", "items": { - "type": "object", - "$ref": "#/definitions/TvcOperatorParams" + "type": "string" }, - "description": "Operators to create as part of this new operator set" + "description": "A list of Private Keys IDs to add this tag to." }, - "existingOperatorIds": { + "removePrivateKeyIds": { "type": "array", "items": { "type": "string" }, - "description": "Existing operators to use as part of this new operator set" - }, - "threshold": { - "type": "integer", - "format": "int64", - "description": "The threshold of operators needed to reach consensus in this new Operator Set" + "description": "A list of Private Key IDs to remove this tag from." } }, - "required": [ - "name", - "threshold" - ] + "required": ["privateKeyTagId", "addPrivateKeyIds", "removePrivateKeyIds"] }, - "TxError": { + "UpdatePrivateKeyTagRequest": { "type": "object", "properties": { - "message": { + "type": { "type": "string", - "description": "Human-readable error message describing what went wrong." + "enum": ["ACTIVITY_TYPE_UPDATE_PRIVATE_KEY_TAG"] }, - "revertChain": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/RevertChainEntry" - }, - "description": "Chain of revert errors from nested contract calls, ordered from outermost to innermost." + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, - "solana": { - "$ref": "#/definitions/SolanaFailureDetails", - "x-nullable": true, - "description": "Solana-specific failure details for simulation or preflight errors, if available." + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." }, - "eth": { - "$ref": "#/definitions/EthFailureDetails", - "x-nullable": true, - "description": "Ethereum-specific failure details, if available." + "parameters": { + "$ref": "#/definitions/UpdatePrivateKeyTagIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true } - } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "UnknownRevertError": { + "UpdatePrivateKeyTagResult": { "type": "object", "properties": { - "selector": { - "type": "string", - "x-nullable": true, - "description": "The 4-byte error selector, if available." - }, - "data": { + "privateKeyTagId": { "type": "string", - "x-nullable": true, - "description": "The raw error data, hex-encoded." + "description": "Unique identifier for a given Private Key Tag." } - } + }, + "required": ["privateKeyTagId"] }, - "UpdateAllowedOriginsIntent": { + "UpdateRootQuorumIntent": { "type": "object", "properties": { - "allowedOrigins": { + "threshold": { + "type": "integer", + "format": "int32", + "description": "The threshold of unique approvals to reach quorum." + }, + "userIds": { "type": "array", "items": { "type": "string" }, - "description": "Additional origins requests are allowed from besides Turnkey origins" + "description": "The unique identifiers of users who comprise the quorum set." } }, - "required": [ - "allowedOrigins" - ] - }, - "UpdateAllowedOriginsResult": { - "type": "object" + "required": ["threshold", "userIds"] }, - "UpdateAuthProxyConfigIntent": { + "UpdateRootQuorumRequest": { "type": "object", "properties": { - "allowedOrigins": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Updated list of allowed origins for CORS." - }, - "allowedAuthMethods": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Updated list of allowed proxy authentication methods." - }, - "sendFromEmailAddress": { - "type": "string", - "x-nullable": true, - "description": "Custom 'from' address for auth-related emails." - }, - "replyToEmailAddress": { + "type": { "type": "string", - "x-nullable": true, - "description": "Custom reply-to address for auth-related emails." + "enum": ["ACTIVITY_TYPE_UPDATE_ROOT_QUORUM"] }, - "emailAuthTemplateId": { + "timestampMs": { "type": "string", - "x-nullable": true, - "description": "Template ID for email-auth messages." + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, - "otpTemplateId": { + "organizationId": { "type": "string", - "x-nullable": true, - "description": "Template ID for OTP SMS messages." - }, - "emailCustomizationParams": { - "$ref": "#/definitions/EmailCustomizationParams", - "x-nullable": true, - "description": "Optional parameters for customizing emails. If not provided, the default email will be used." - }, - "smsCustomizationParams": { - "$ref": "#/definitions/SmsCustomizationParams", - "x-nullable": true, - "description": "Overrides for auth-related SMS content." + "description": "Unique identifier for a given Organization." }, - "walletKitSettings": { - "$ref": "#/definitions/WalletKitSettingsParams", - "x-nullable": true, - "description": "Overrides for react wallet kit related settings." + "parameters": { + "$ref": "#/definitions/UpdateRootQuorumIntent" }, - "otpExpirationSeconds": { - "type": "integer", - "format": "int32", - "x-nullable": true, - "description": "OTP code lifetime in seconds." + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "UpdateRootQuorumResult": { + "type": "object" + }, + "UpdateTvcAppLiveDeploymentIntent": { + "type": "object", + "properties": { + "deploymentId": { + "type": "string", + "description": "The unique identifier of the TVC deployment to set as live for the app." + } + }, + "required": ["deploymentId"] + }, + "UpdateTvcAppLiveDeploymentRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_UPDATE_TVC_APP_LIVE_DEPLOYMENT"] }, - "verificationTokenExpirationSeconds": { - "type": "integer", - "format": "int32", - "x-nullable": true, - "description": "Verification-token lifetime in seconds." + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, - "sessionExpirationSeconds": { - "type": "integer", - "format": "int32", - "x-nullable": true, - "description": "Session lifetime in seconds." + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." }, - "otpAlphanumeric": { + "parameters": { + "$ref": "#/definitions/UpdateTvcAppLiveDeploymentIntent" + }, + "generateAppProofs": { "type": "boolean", - "x-nullable": true, - "description": "Enable alphanumeric OTP codes." + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "UpdateTvcAppLiveDeploymentResult": { + "type": "object" + }, + "UpdateUserEmailIntent": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "Unique identifier for a given User." }, - "otpLength": { - "type": "integer", - "format": "int32", - "x-nullable": true, - "description": "Desired OTP code length (6\u20139)." + "userEmail": { + "type": "string", + "description": "The user's email address. Setting this to an empty string will remove the user's email." }, - "sendFromEmailSenderName": { + "verificationToken": { "type": "string", "x-nullable": true, - "description": "Custom 'from' email sender for auth-related emails." + "description": "Signed JWT containing a unique id, expiry, verification type, contact" + } + }, + "required": ["userId", "userEmail"] + }, + "UpdateUserEmailRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_UPDATE_USER_EMAIL"] }, - "verificationTokenRequiredForGetAccountPii": { - "type": "boolean", - "x-nullable": true, - "description": "Verification token required for get account with PII (email/phone number). Default false." + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, - "socialLinkingClientIds": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Whitelisted OAuth client IDs for social account linking. When a user authenticates via a social provider with an email matching an existing account, the accounts will be linked if the client ID is in this list and the issuer is considered a trusted provider." + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." }, - "captchaEnabled": { + "parameters": { + "$ref": "#/definitions/UpdateUserEmailIntent" + }, + "generateAppProofs": { "type": "boolean", - "x-nullable": true, - "description": "Whether captcha verification is required on sign up & otp init." + "x-nullable": true } - } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "UpdateAuthProxyConfigResult": { + "UpdateUserEmailResult": { "type": "object", "properties": { - "configId": { + "userId": { "type": "string", - "description": "Unique identifier for a given User. (representing the turnkey signer user id)" + "description": "Unique identifier of the User whose email was updated." } - } + }, + "required": ["userId"] }, - "UpdateFiatOnRampCredentialIntent": { + "UpdateUserIntent": { "type": "object", "properties": { - "fiatOnrampCredentialId": { + "userId": { "type": "string", - "description": "The ID of the fiat on-ramp credential to update" - }, - "onrampProvider": { - "$ref": "#/definitions/FiatOnRampProvider", - "description": "The fiat on-ramp provider" + "description": "Unique identifier for a given User." }, - "projectId": { + "userName": { "type": "string", "x-nullable": true, - "description": "Project ID for the on-ramp provider. Some providers, like Coinbase, require this additional identifier." + "description": "Human-readable name for a User." }, - "publishableApiKey": { + "userEmail": { "type": "string", - "description": "Publishable API key for the on-ramp provider" + "x-nullable": true, + "description": "The user's email address." }, - "encryptedSecretApiKey": { - "type": "string", - "description": "Secret API key for the on-ramp provider encrypted to our on-ramp encryption public key" + "userTagIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "An updated list of User Tags to apply to this User. This field, if not needed, should be an empty array in your request body." }, - "encryptedPrivateApiKey": { + "userPhoneNumber": { "type": "string", "x-nullable": true, - "description": "Private API key for the on-ramp provider encrypted to our on-ramp encryption public key. Some providers, like Coinbase, require this additional key." + "description": "The user's phone number in E.164 format e.g. +13214567890" } }, - "required": [ - "fiatOnrampCredentialId", - "onrampProvider", - "publishableApiKey", - "encryptedSecretApiKey" - ] + "required": ["userId"] }, - "UpdateFiatOnRampCredentialRequest": { + "UpdateUserNameIntent": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "Unique identifier for a given User." + }, + "userName": { + "type": "string", + "description": "Human-readable name for a User." + } + }, + "required": ["userId", "userName"] + }, + "UpdateUserNameRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_UPDATE_FIAT_ON_RAMP_CREDENTIAL" - ] + "enum": ["ACTIVITY_TYPE_UPDATE_USER_NAME"] }, "timestampMs": { "type": "string", @@ -19203,86 +16720,85 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/definitions/UpdateFiatOnRampCredentialIntent" + "$ref": "#/definitions/UpdateUserNameIntent" }, "generateAppProofs": { "type": "boolean", "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "UpdateFiatOnRampCredentialResult": { + "UpdateUserNameResult": { "type": "object", "properties": { - "fiatOnRampCredentialId": { + "userId": { "type": "string", - "description": "Unique identifier of the Fiat On-Ramp credential that was updated" + "description": "Unique identifier of the User whose name was updated." } }, - "required": [ - "fiatOnRampCredentialId" - ] + "required": ["userId"] }, - "UpdateMfaPolicyIntent": { + "UpdateUserPhoneNumberIntent": { "type": "object", "properties": { "userId": { "type": "string", - "description": "The ID of the User to update the MFA Policy for." + "description": "Unique identifier for a given User." }, - "mfaPolicyId": { + "userPhoneNumber": { "type": "string", - "description": "Unique identifier for a given MFA Policy." + "description": "The user's phone number in E.164 format e.g. +13214567890. Setting this to an empty string will remove the user's phone number." }, - "mfaPolicyName": { + "verificationToken": { "type": "string", "x-nullable": true, - "description": "Human-readable name for a Policy." + "description": "Signed JWT containing a unique id, expiry, verification type, contact" + } + }, + "required": ["userId", "userPhoneNumber"] + }, + "UpdateUserPhoneNumberRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_UPDATE_USER_PHONE_NUMBER"] }, - "condition": { + "timestampMs": { "type": "string", - "x-nullable": true, - "description": "A condition expression that evaluates to true or false, determining when this MFA policy applies." + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, - "requiredAuthenticationMethods": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/RequiredAuthenticationMethodParams" - }, - "description": "An ordered list of authentication requirements. Each requirement must be satisfied sequentially to complete MFA." + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." }, - "order": { - "type": "integer", - "format": "int64", - "x-nullable": true, - "description": "The order in which this MFA policy is evaluated, starting from 0, relative to other MFA policies. Lower order values are evaluated first." + "parameters": { + "$ref": "#/definitions/UpdateUserPhoneNumberIntent" }, - "notes": { + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "UpdateUserPhoneNumberResult": { + "type": "object", + "properties": { + "userId": { "type": "string", - "x-nullable": true, - "description": "Notes for an MFA Policy." + "description": "Unique identifier of the User whose phone number was updated." } }, - "required": [ - "userId", - "mfaPolicyId" - ] + "required": ["userId"] }, - "UpdateMfaPolicyRequest": { + "UpdateUserRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_UPDATE_MFA_POLICY" - ] + "enum": ["ACTIVITY_TYPE_UPDATE_USER"] }, "timestampMs": { "type": "string", @@ -19293,63 +16809,60 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/definitions/UpdateMfaPolicyIntent" + "$ref": "#/definitions/UpdateUserIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "UpdateMfaPolicyResult": { + "UpdateUserResult": { "type": "object", "properties": { - "mfaPolicyId": { + "userId": { "type": "string", - "description": "Unique identifier for a given MFA Policy." + "description": "A User ID." } }, - "required": [ - "mfaPolicyId" - ] + "required": ["userId"] }, - "UpdateOauth2CredentialIntent": { + "UpdateUserTagIntent": { "type": "object", "properties": { - "oauth2CredentialId": { + "userTagId": { "type": "string", - "description": "The ID of the OAuth 2.0 credential to update" - }, - "provider": { - "$ref": "#/definitions/Oauth2Provider", - "description": "The OAuth 2.0 provider" + "description": "Unique identifier for a given User Tag." }, - "clientId": { + "newUserTagName": { "type": "string", - "description": "The Client ID issued by the OAuth 2.0 provider" + "x-nullable": true, + "description": "The new, human-readable name for the tag with the given ID." }, - "encryptedClientSecret": { - "type": "string", - "description": "The client secret issued by the OAuth 2.0 provider encrypted to the TLS Fetcher quorum key" + "addUserIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User IDs to add this tag to." + }, + "removeUserIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User IDs to remove this tag from." } }, - "required": [ - "oauth2CredentialId", - "provider", - "clientId", - "encryptedClientSecret" - ] + "required": ["userTagId", "addUserIds", "removeUserIds"] }, - "UpdateOauth2CredentialRequest": { + "UpdateUserTagRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_UPDATE_OAUTH2_CREDENTIAL" - ] + "enum": ["ACTIVITY_TYPE_UPDATE_USER_TAG"] }, "timestampMs": { "type": "string", @@ -19360,52 +16873,45 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/definitions/UpdateOauth2CredentialIntent" + "$ref": "#/definitions/UpdateUserTagIntent" }, "generateAppProofs": { "type": "boolean", "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "UpdateOauth2CredentialResult": { + "UpdateUserTagResult": { "type": "object", "properties": { - "oauth2CredentialId": { + "userTagId": { "type": "string", - "description": "Unique identifier of the OAuth 2.0 credential that was updated" + "description": "Unique identifier for a given User Tag." } }, - "required": [ - "oauth2CredentialId" - ] + "required": ["userTagId"] }, - "UpdateOrganizationNameIntent": { + "UpdateWalletIntent": { "type": "object", "properties": { - "organizationName": { + "walletId": { "type": "string", - "description": "New name for the Organization." + "description": "Unique identifier for a given Wallet." + }, + "walletName": { + "type": "string", + "description": "Human-readable name for a Wallet." } }, - "required": [ - "organizationName" - ] + "required": ["walletId"] }, - "UpdateOrganizationNameRequest": { + "UpdateWalletRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_UPDATE_ORGANIZATION_NAME" - ] + "enum": ["ACTIVITY_TYPE_UPDATE_WALLET"] }, "timestampMs": { "type": "string", @@ -19416,377 +16922,489 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/definitions/UpdateOrganizationNameIntent" + "$ref": "#/definitions/UpdateWalletIntent" }, "generateAppProofs": { "type": "boolean", "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "UpdateOrganizationNameResult": { + "UpdateWalletResult": { "type": "object", "properties": { - "organizationId": { - "type": "string", - "description": "Unique identifier for the Organization." - }, - "organizationName": { + "walletId": { "type": "string", - "description": "The updated organization name." + "description": "A Wallet ID." } }, - "required": [ - "organizationId", - "organizationName" - ] + "required": ["walletId"] }, - "UpdatePolicyIntent": { + "UpdateWebhookEndpointIntent": { "type": "object", "properties": { - "policyId": { - "type": "string", - "description": "Unique identifier for a given Policy." - }, - "policyName": { + "endpointId": { "type": "string", - "x-nullable": true, - "description": "Human-readable name for a Policy." - }, - "policyEffect": { - "$ref": "#/definitions/Effect", - "x-nullable": true, - "description": "The instruction to DENY or ALLOW an activity (optional)." + "description": "Unique identifier of the webhook endpoint to update." }, - "policyCondition": { + "url": { "type": "string", "x-nullable": true, - "description": "The condition expression that triggers the Effect (optional)." + "description": "Updated destination URL for webhook delivery." }, - "policyConsensus": { + "name": { "type": "string", "x-nullable": true, - "description": "The consensus expression that triggers the Effect (optional)." + "description": "Updated human-readable name for this webhook endpoint." }, - "policyNotes": { - "type": "string", + "isActive": { + "type": "boolean", "x-nullable": true, - "description": "Accompanying notes for a Policy (optional)." + "description": "Whether this webhook endpoint is active." } }, - "required": [ - "policyId" - ] + "required": ["endpointId"] }, - "UpdatePolicyIntentV2": { + "UpdateWebhookEndpointRequest": { "type": "object", "properties": { - "policyId": { + "type": { "type": "string", - "description": "Unique identifier for a given Policy." + "enum": ["ACTIVITY_TYPE_UPDATE_WEBHOOK_ENDPOINT"] }, - "policyName": { + "timestampMs": { "type": "string", - "x-nullable": true, - "description": "Human-readable name for a Policy." - }, - "policyEffect": { - "$ref": "#/definitions/Effect", - "x-nullable": true, - "description": "The instruction to DENY or ALLOW an activity (optional)." + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, - "policyCondition": { + "organizationId": { "type": "string", - "x-nullable": true, - "description": "The condition expression that triggers the Effect (optional)." + "description": "Unique identifier for a given Organization." }, - "policyConsensus": { - "type": "string", - "x-nullable": true, - "description": "The consensus expression that triggers the Effect (optional)." + "parameters": { + "$ref": "#/definitions/UpdateWebhookEndpointIntent" }, - "policyNotes": { - "type": "string", - "x-nullable": true, - "description": "Accompanying notes for a Policy (optional)." + "generateAppProofs": { + "type": "boolean", + "x-nullable": true } }, - "required": [ - "policyId" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "UpdatePolicyRequest": { + "UpdateWebhookEndpointResult": { "type": "object", "properties": { - "type": { + "endpointId": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_UPDATE_POLICY_V2" - ] + "description": "Unique identifier of the updated webhook endpoint." }, - "timestampMs": { + "webhookEndpoint": { + "$ref": "#/definitions/WebhookEndpointData", + "description": "The updated webhook endpoint data." + } + }, + "required": ["endpointId", "webhookEndpoint"] + }, + "UpsertGasUsageConfigIntent": { + "type": "object", + "properties": { + "orgWindowLimitUsd": { "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + "description": "Gas sponsorship USD limit for the billing organization window." }, - "organizationId": { + "subOrgWindowLimitUsd": { "type": "string", - "description": "Unique identifier for a given Organization." + "description": "Gas sponsorship USD limit for sub-organizations under the billing organization." }, - "parameters": { - "$ref": "#/definitions/UpdatePolicyIntentV2" + "windowDurationMinutes": { + "type": "string", + "description": "Rolling sponsorship window duration, expressed in minutes. This value can't exceed 30 days (43200 minutes)." }, - "generateAppProofs": { + "enabled": { "type": "boolean", - "x-nullable": true + "x-nullable": true, + "description": "Whether gas sponsorship is enabled for the organization." + }, + "solanaConfig": { + "$ref": "#/definitions/SolanaConfig", + "description": "Optional Solana sponsorship settings. If omitted, the existing Solana sponsorship state is left unchanged." } }, "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" + "orgWindowLimitUsd", + "subOrgWindowLimitUsd", + "windowDurationMinutes" ] }, - "UpdatePolicyResult": { + "UpsertGasUsageConfigResult": { "type": "object", "properties": { - "policyId": { + "gasUsageConfigId": { "type": "string", - "description": "Unique identifier for a given Policy." + "description": "Unique identifier for the gas usage configuration that was created or updated." } }, - "required": [ - "policyId" - ] + "required": ["gasUsageConfigId"] }, - "UpdatePolicyResultV2": { + "UsageType": { + "type": "string", + "enum": ["USAGE_TYPE_SIGNUP", "USAGE_TYPE_LOGIN"] + }, + "User": { "type": "object", "properties": { - "policyId": { + "userId": { "type": "string", - "description": "Unique identifier for a given Policy." + "description": "Unique identifier for a given User." + }, + "userName": { + "type": "string", + "description": "Human-readable name for a User." + }, + "userEmail": { + "type": "string", + "x-nullable": true, + "description": "The user's email address." + }, + "userPhoneNumber": { + "type": "string", + "x-nullable": true, + "description": "The user's phone number in E.164 format e.g. +13214567890" + }, + "authenticators": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/Authenticator" + }, + "description": "A list of Authenticator parameters." + }, + "apiKeys": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/ApiKey" + }, + "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." + }, + "userTags": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User Tag IDs." + }, + "oauthProviders": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/OauthProvider" + }, + "description": "A list of Oauth Providers." + }, + "createdAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + }, + "mfaPolicies": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/MfaPolicy" + }, + "description": "A list of MFA Policies that define multi-factor authentication requirements for this user." } }, "required": [ - "policyId" + "userId", + "userName", + "authenticators", + "apiKeys", + "userTags", + "oauthProviders", + "createdAt", + "updatedAt", + "mfaPolicies" ] }, - "UpdatePrivateKeyTagIntent": { + "UserParams": { "type": "object", "properties": { - "privateKeyTagId": { + "userName": { "type": "string", - "description": "Unique identifier for a given Private Key Tag." + "description": "Human-readable name for a User." }, - "newPrivateKeyTagName": { + "userEmail": { "type": "string", "x-nullable": true, - "description": "The new, human-readable name for the tag with the given ID." + "description": "The user's email address." }, - "addPrivateKeyIds": { + "accessType": { + "$ref": "#/definitions/AccessType", + "description": "The User's permissible access method(s)." + }, + "apiKeys": { "type": "array", "items": { - "type": "string" + "type": "object", + "$ref": "#/definitions/ApiKeyParams" }, - "description": "A list of Private Keys IDs to add this tag to." + "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." }, - "removePrivateKeyIds": { + "authenticators": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/AuthenticatorParams" + }, + "description": "A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body." + }, + "userTags": { "type": "array", "items": { "type": "string" }, - "description": "A list of Private Key IDs to remove this tag from." + "description": "A list of User Tag IDs. This field, if not needed, should be an empty array in your request body." } }, "required": [ - "privateKeyTagId", - "addPrivateKeyIds", - "removePrivateKeyIds" + "userName", + "accessType", + "apiKeys", + "authenticators", + "userTags" ] }, - "UpdatePrivateKeyTagRequest": { + "UserParamsV2": { "type": "object", "properties": { - "type": { + "userName": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_UPDATE_PRIVATE_KEY_TAG" - ] + "description": "Human-readable name for a User." }, - "timestampMs": { + "userEmail": { "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + "x-nullable": true, + "description": "The user's email address." }, - "organizationId": { - "type": "string", - "description": "Unique identifier for a given Organization." + "apiKeys": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/ApiKeyParams" + }, + "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." }, - "parameters": { - "$ref": "#/definitions/UpdatePrivateKeyTagIntent" + "authenticators": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/AuthenticatorParamsV2" + }, + "description": "A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body." }, - "generateAppProofs": { - "type": "boolean", - "x-nullable": true + "userTags": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User Tag IDs. This field, if not needed, should be an empty array in your request body." } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["userName", "apiKeys", "authenticators", "userTags"] }, - "UpdatePrivateKeyTagResult": { + "UserParamsV3": { "type": "object", "properties": { - "privateKeyTagId": { + "userName": { "type": "string", - "description": "Unique identifier for a given Private Key Tag." + "description": "Human-readable name for a User." + }, + "userEmail": { + "type": "string", + "x-nullable": true, + "description": "The user's email address." + }, + "userPhoneNumber": { + "type": "string", + "x-nullable": true, + "description": "The user's phone number in E.164 format e.g. +13214567890" + }, + "apiKeys": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/ApiKeyParamsV2" + }, + "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." + }, + "authenticators": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/AuthenticatorParamsV2" + }, + "description": "A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body." + }, + "oauthProviders": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/OauthProviderParams" + }, + "description": "A list of Oauth providers. This field, if not needed, should be an empty array in your request body." + }, + "userTags": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User Tag IDs. This field, if not needed, should be an empty array in your request body." } }, "required": [ - "privateKeyTagId" + "userName", + "apiKeys", + "authenticators", + "oauthProviders", + "userTags" ] }, - "UpdateRootQuorumIntent": { + "UserParamsV4": { "type": "object", "properties": { - "threshold": { - "type": "integer", - "format": "int32", - "description": "The threshold of unique approvals to reach quorum." + "userName": { + "type": "string", + "description": "Human-readable name for a User." }, - "userIds": { + "userEmail": { + "type": "string", + "x-nullable": true, + "description": "The user's email address." + }, + "userPhoneNumber": { + "type": "string", + "x-nullable": true, + "description": "The user's phone number in E.164 format e.g. +13214567890" + }, + "apiKeys": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/ApiKeyParamsV2" + }, + "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." + }, + "authenticators": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/AuthenticatorParamsV2" + }, + "description": "A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body." + }, + "oauthProviders": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/OauthProviderParamsV2" + }, + "description": "A list of Oauth providers. This field, if not needed, should be an empty array in your request body." + }, + "userTags": { "type": "array", "items": { "type": "string" }, - "description": "The unique identifiers of users who comprise the quorum set." + "description": "A list of User Tag IDs. This field, if not needed, should be an empty array in your request body." } }, "required": [ - "threshold", - "userIds" + "userName", + "apiKeys", + "authenticators", + "oauthProviders", + "userTags" ] }, - "UpdateRootQuorumRequest": { + "ValidateTvcImageRequest": { "type": "object", "properties": { - "type": { - "type": "string", - "enum": [ - "ACTIVITY_TYPE_UPDATE_ROOT_QUORUM" - ] - }, - "timestampMs": { - "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." - }, "organizationId": { "type": "string", "description": "Unique identifier for a given Organization." }, - "parameters": { - "$ref": "#/definitions/UpdateRootQuorumIntent" + "pivotContainerImageUrl": { + "type": "string", + "description": "URL of the container image." }, - "generateAppProofs": { - "type": "boolean", - "x-nullable": true + "pivotContainerEncryptedPullSecret": { + "type": "string", + "x-nullable": true, + "description": "HPKE-encrypted pull secret for private images." } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] - }, - "UpdateRootQuorumResult": { - "type": "object" + "required": ["organizationId", "pivotContainerImageUrl"] }, - "UpdateTvcAppLiveDeploymentIntent": { + "ValidateTvcImageResponse": { "type": "object", "properties": { - "deploymentId": { - "type": "string", - "description": "The unique identifier of the TVC deployment to set as live for the app." + "resolvedImageDigest": { + "type": "string" } - }, - "required": [ - "deploymentId" - ] + } }, - "UpdateTvcAppLiveDeploymentRequest": { + "VerifyOtpIntent": { "type": "object", "properties": { - "type": { + "otpId": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_UPDATE_TVC_APP_LIVE_DEPLOYMENT" - ] + "description": "ID representing the result of an init OTP activity." }, - "timestampMs": { + "otpCode": { "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + "description": "OTP sent out to a user's contact (email or SMS)" }, - "organizationId": { + "expirationSeconds": { "type": "string", - "description": "Unique identifier for a given Organization." - }, - "parameters": { - "$ref": "#/definitions/UpdateTvcAppLiveDeploymentIntent" + "x-nullable": true, + "description": "Expiration window (in seconds) indicating how long the verification token is valid for. If not provided, a default of 1 hour will be used. Maximum value is 86400 seconds (24 hours)" }, - "generateAppProofs": { - "type": "boolean", - "x-nullable": true + "publicKey": { + "type": "string", + "x-nullable": true, + "description": "Client-side public key generated by the user, which will be added to the JWT response and verified in subsequent requests via a client proof signature" } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] - }, - "UpdateTvcAppLiveDeploymentResult": { - "type": "object" + "required": ["otpId", "otpCode"] }, - "UpdateUserEmailIntent": { + "VerifyOtpIntentV2": { "type": "object", "properties": { - "userId": { + "otpId": { "type": "string", - "description": "Unique identifier for a given User." + "description": "UUID representing an OTP flow. A new UUID is created for each init OTP activity." }, - "userEmail": { + "encryptedOtpBundle": { "type": "string", - "description": "The user's email address. Setting this to an empty string will remove the user's email." + "description": "Encrypted bundle containing the OTP code and a client-generated public key. Turnkey's secure enclaves will decrypt this bundle, verify the OTP code, and issue a new Verification Token. Encrypted using the target encryption key provided in the INIT_OTP activity result." }, - "verificationToken": { + "expirationSeconds": { "type": "string", "x-nullable": true, - "description": "Signed JWT containing a unique id, expiry, verification type, contact" + "description": "Expiration window (in seconds) indicating how long the verification token is valid for. If not provided, a default of 1 hour will be used. Maximum value is 86400 seconds (24 hours)" } }, - "required": [ - "userId", - "userEmail" - ] + "required": ["otpId", "encryptedOtpBundle"] }, - "UpdateUserEmailRequest": { + "VerifyOtpRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_UPDATE_USER_EMAIL" - ] + "enum": ["ACTIVITY_TYPE_VERIFY_OTP_V2"] }, "timestampMs": { "type": "string", @@ -19797,940 +17415,908 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/definitions/UpdateUserEmailIntent" + "$ref": "#/definitions/VerifyOtpIntentV2" }, "generateAppProofs": { "type": "boolean", "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "UpdateUserEmailResult": { + "VerifyOtpResult": { "type": "object", "properties": { - "userId": { + "verificationToken": { "type": "string", - "description": "Unique identifier of the User whose email was updated." + "description": "Signed JWT containing a unique id, expiry, verification type, contact. Verification status of a user is updated when the token is consumed (in OTP_LOGIN requests)" } }, - "required": [ - "userId" - ] + "required": ["verificationToken"] }, - "UpdateUserIntent": { + "Vote": { "type": "object", "properties": { + "id": { + "type": "string", + "description": "Unique identifier for a given Vote object." + }, "userId": { "type": "string", "description": "Unique identifier for a given User." }, - "userName": { + "user": { + "$ref": "#/definitions/User", + "description": "Web and/or API user within your Organization." + }, + "activityId": { "type": "string", - "x-nullable": true, - "description": "Human-readable name for a User." + "description": "Unique identifier for a given Activity object." }, - "userEmail": { + "selection": { "type": "string", - "x-nullable": true, - "description": "The user's email address." + "enum": ["VOTE_SELECTION_APPROVED", "VOTE_SELECTION_REJECTED"] }, - "userTagIds": { - "type": "array", - "items": { - "type": "string" - }, - "description": "An updated list of User Tags to apply to this User. This field, if not needed, should be an empty array in your request body." + "message": { + "type": "string", + "description": "The raw message being signed within a Vote." }, - "userPhoneNumber": { + "publicKey": { "type": "string", - "x-nullable": true, - "description": "The user's phone number in E.164 format e.g. +13214567890" + "description": "The public component of a cryptographic key pair used to sign messages and transactions." + }, + "signature": { + "type": "string", + "description": "The signature applied to a particular vote." + }, + "scheme": { + "type": "string", + "description": "Method used to produce a signature." + }, + "createdAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" } }, "required": [ - "userId" + "id", + "userId", + "user", + "activityId", + "selection", + "message", + "publicKey", + "signature", + "scheme", + "createdAt" ] }, - "UpdateUserNameIntent": { + "Wallet": { "type": "object", "properties": { - "userId": { + "walletId": { "type": "string", - "description": "Unique identifier for a given User." + "description": "Unique identifier for a given Wallet." }, - "userName": { + "walletName": { "type": "string", - "description": "Human-readable name for a User." + "description": "Human-readable name for a Wallet." + }, + "createdAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + }, + "exported": { + "type": "boolean", + "description": "True when a given Wallet is exported, false otherwise." + }, + "imported": { + "type": "boolean", + "description": "True when a given Wallet is imported, false otherwise." } }, "required": [ - "userId", - "userName" + "walletId", + "walletName", + "createdAt", + "updatedAt", + "exported", + "imported" ] }, - "UpdateUserNameRequest": { + "WalletAccount": { "type": "object", "properties": { - "type": { + "walletAccountId": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_UPDATE_USER_NAME" - ] + "description": "Unique identifier for a given Wallet Account." }, - "timestampMs": { + "organizationId": { "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + "description": "The Organization the Account belongs to." }, - "organizationId": { + "walletId": { "type": "string", - "description": "Unique identifier for a given Organization." + "description": "The Wallet the Account was derived from." }, - "parameters": { - "$ref": "#/definitions/UpdateUserNameIntent" + "curve": { + "$ref": "#/definitions/Curve", + "description": "Cryptographic curve used to generate the Account." }, - "generateAppProofs": { - "type": "boolean", - "x-nullable": true + "pathFormat": { + "$ref": "#/definitions/PathFormat", + "description": "Path format used to generate the Account." + }, + "path": { + "type": "string", + "description": "Path used to generate the Account." + }, + "addressFormat": { + "$ref": "#/definitions/AddressFormat", + "description": "Address format used to generate the Account." + }, + "address": { + "type": "string", + "description": "Address generated using the Wallet seed and Account parameters." + }, + "createdAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + }, + "publicKey": { + "type": "string", + "x-nullable": true, + "description": "The public component of this wallet account's underlying cryptographic key pair." + }, + "walletDetails": { + "$ref": "#/definitions/Wallet", + "x-nullable": true, + "description": "Wallet details for this account. This is only present when include_wallet_details=true." + }, + "name": { + "type": "string", + "x-nullable": true, + "description": "Human-readable name for this Wallet Account, unique within the organization." } }, "required": [ - "type", - "timestampMs", + "walletAccountId", "organizationId", - "parameters" + "walletId", + "curve", + "pathFormat", + "path", + "addressFormat", + "address", + "createdAt", + "updatedAt" ] }, - "UpdateUserNameResult": { + "WalletAccountParams": { "type": "object", "properties": { - "userId": { + "curve": { + "$ref": "#/definitions/Curve", + "description": "Cryptographic curve used to generate a wallet Account." + }, + "pathFormat": { + "$ref": "#/definitions/PathFormat", + "description": "Path format used to generate a wallet Account." + }, + "path": { "type": "string", - "description": "Unique identifier of the User whose name was updated." + "description": "Path used to generate a wallet Account." + }, + "addressFormat": { + "$ref": "#/definitions/AddressFormat", + "description": "Address format used to generate a wallet Acccount." + }, + "name": { + "type": "string", + "x-nullable": true, + "description": "Optional human-readable name for the account." + } + }, + "required": ["curve", "pathFormat", "path", "addressFormat"] + }, + "WalletKitSettingsParams": { + "type": "object", + "properties": { + "enabledSocialProviders": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of enabled social login providers (e.g., 'apple', 'google', 'facebook')", + "title": "Enabled Social Providers" + }, + "oauthClientIds": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Mapping of social login providers to their Oauth client IDs.", + "title": "Oauth Client IDs" + }, + "oauthRedirectUrl": { + "type": "string", + "description": "Oauth redirect URL to be used for social login flows.", + "title": "Oauth Redirect URL" + } + } + }, + "WalletParams": { + "type": "object", + "properties": { + "walletName": { + "type": "string", + "description": "Human-readable name for a Wallet." + }, + "accounts": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/WalletAccountParams" + }, + "description": "A list of wallet Accounts. This field, if not needed, should be an empty array in your request body." + }, + "mnemonicLength": { + "type": "integer", + "format": "int32", + "x-nullable": true, + "description": "Length of mnemonic to generate the Wallet seed. Defaults to 12. Accepted values: 12, 15, 18, 21, 24." } }, - "required": [ - "userId" - ] + "required": ["walletName", "accounts"] }, - "UpdateUserPhoneNumberIntent": { + "WalletResult": { "type": "object", "properties": { - "userId": { - "type": "string", - "description": "Unique identifier for a given User." - }, - "userPhoneNumber": { - "type": "string", - "description": "The user's phone number in E.164 format e.g. +13214567890. Setting this to an empty string will remove the user's phone number." + "walletId": { + "type": "string" }, - "verificationToken": { - "type": "string", - "x-nullable": true, - "description": "Signed JWT containing a unique id, expiry, verification type, contact" + "addresses": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of account addresses." } }, - "required": [ - "userId", - "userPhoneNumber" - ] + "required": ["walletId", "addresses"] }, - "UpdateUserPhoneNumberRequest": { + "WebAuthnStamp": { "type": "object", "properties": { - "type": { + "credentialId": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_UPDATE_USER_PHONE_NUMBER" - ] + "description": "A base64 url encoded Unique identifier for a given credential." }, - "timestampMs": { + "clientDataJson": { "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + "description": "A base64 encoded payload containing metadata about the signing context and the challenge." }, - "organizationId": { + "authenticatorData": { "type": "string", - "description": "Unique identifier for a given Organization." - }, - "parameters": { - "$ref": "#/definitions/UpdateUserPhoneNumberIntent" + "description": "A base64 encoded payload containing metadata about the authenticator." }, - "generateAppProofs": { - "type": "boolean", - "x-nullable": true - } - }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] - }, - "UpdateUserPhoneNumberResult": { - "type": "object", - "properties": { - "userId": { + "signature": { "type": "string", - "description": "Unique identifier of the User whose phone number was updated." + "description": "The base64 url encoded signature bytes contained within the WebAuthn assertion response." } }, "required": [ - "userId" + "credentialId", + "clientDataJson", + "authenticatorData", + "signature" ] }, - "UpdateUserRequest": { + "WebhookEndpointData": { "type": "object", "properties": { - "type": { - "type": "string", - "enum": [ - "ACTIVITY_TYPE_UPDATE_USER" - ] - }, - "timestampMs": { + "endpointId": { "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + "description": "Unique identifier of the webhook endpoint." }, "organizationId": { "type": "string", "description": "Unique identifier for a given Organization." }, - "parameters": { - "$ref": "#/definitions/UpdateUserIntent" + "url": { + "type": "string", + "description": "The destination URL for webhook delivery." }, - "generateAppProofs": { + "name": { + "type": "string", + "description": "Human-readable name for this webhook endpoint." + }, + "isActive": { "type": "boolean", - "x-nullable": true + "description": "Whether this webhook endpoint is active." + }, + "subscriptions": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/WebhookSubscriptionParams" + }, + "description": "Current subscriptions attached to this endpoint." } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["endpointId", "organizationId", "url", "name", "isActive"] }, - "UpdateUserResult": { + "WebhookSubscriptionParams": { "type": "object", "properties": { - "userId": { + "eventType": { "type": "string", - "description": "A User ID." + "description": "The event type to subscribe to (for example, ACTIVITY_UPDATES, BALANCE_CONFIRMED_UPDATES, or BALANCE_FINALIZED_UPDATES)." + }, + "filtersJson": { + "type": "string", + "x-nullable": true, + "description": "JSON-encoded filter criteria for this subscription." + }, + "isActive": { + "type": "boolean", + "x-nullable": true, + "description": "Whether this subscription is active." } }, - "required": [ - "userId" - ] + "required": ["eventType"] }, - "UpdateUserTagIntent": { + "activity.v1.Address": { "type": "object", "properties": { - "userTagId": { - "type": "string", - "description": "Unique identifier for a given User Tag." - }, - "newUserTagName": { - "type": "string", - "x-nullable": true, - "description": "The new, human-readable name for the tag with the given ID." - }, - "addUserIds": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of User IDs to add this tag to." + "format": { + "$ref": "#/definitions/AddressFormat" }, - "removeUserIds": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of User IDs to remove this tag from." + "address": { + "type": "string" } - }, - "required": [ - "userTagId", - "addUserIds", - "removeUserIds" - ] + } }, - "UpdateUserTagRequest": { + "activity.v1.PolicyEvaluation": { "type": "object", "properties": { - "type": { + "id": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_UPDATE_USER_TAG" - ] + "description": "Unique identifier for a given policy evaluation." }, - "timestampMs": { + "activityId": { "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + "description": "Unique identifier for a given Activity." }, "organizationId": { "type": "string", - "description": "Unique identifier for a given Organization." + "description": "Unique identifier for the Organization the Activity belongs to." }, - "parameters": { - "$ref": "#/definitions/UpdateUserTagIntent" + "voteId": { + "type": "string", + "description": "Unique identifier for the Vote associated with this policy evaluation." }, - "generateAppProofs": { - "type": "boolean", - "x-nullable": true + "policyEvaluations": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/common.v1.PolicyEvaluation" + }, + "description": "Detailed evaluation result for each Policy that was run." + }, + "createdAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" } }, "required": [ - "type", - "timestampMs", + "id", + "activityId", "organizationId", - "parameters" + "voteId", + "policyEvaluations", + "createdAt" ] }, - "UpdateUserTagResult": { + "common.v1.PolicyEvaluation": { "type": "object", "properties": { - "userTagId": { - "type": "string", - "description": "Unique identifier for a given User Tag." + "policyId": { + "type": "string" + }, + "outcome": { + "$ref": "#/definitions/Outcome" } - }, - "required": [ - "userTagId" - ] + } }, - "UpdateWalletAccountNameIntent": { + "data.v1.Address": { "type": "object", "properties": { - "walletAccountId": { - "type": "string", - "description": "Unique identifier for a given Wallet Account." + "format": { + "$ref": "#/definitions/AddressFormat" }, - "name": { - "type": "string", - "description": "Human-readable name for this Wallet Account." + "address": { + "type": "string" } - }, - "required": [ - "walletAccountId", - "name" - ] + } }, - "UpdateWalletAccountNameResult": { - "type": "object", - "properties": { - "walletAccountId": { - "type": "string", - "description": "Unique identifier for a given Wallet Account." - } - }, - "required": [ - "walletAccountId" - ] + "data.v1.SignatureScheme": { + "type": "string", + "enum": ["SIGNATURE_SCHEME_EPHEMERAL_KEY_P256"] }, - "UpdateWalletIntent": { + "data.v1.SmartContractInterface": { "type": "object", "properties": { - "walletId": { + "organizationId": { "type": "string", - "description": "Unique identifier for a given Wallet." + "description": "The Organization the Smart Contract Interface belongs to." }, - "walletName": { + "smartContractInterfaceId": { "type": "string", - "description": "Human-readable name for a Wallet." - } - }, - "required": [ - "walletId" - ] - }, - "UpdateWalletRequest": { - "type": "object", - "properties": { + "description": "Unique identifier for a given Smart Contract Interface (ABI or IDL)." + }, + "smartContractAddress": { + "type": "string", + "description": "The address corresponding to the Smart Contract or Program." + }, + "smartContractInterface": { + "type": "string", + "description": "The JSON corresponding to the Smart Contract Interface (ABI or IDL)." + }, "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_UPDATE_WALLET" - ] + "description": "The type corresponding to the Smart Contract Interface (either ETHEREUM or SOLANA)." }, - "timestampMs": { + "label": { "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + "description": "The label corresponding to the Smart Contract Interface (either ETHEREUM or SOLANA)." }, - "organizationId": { + "notes": { "type": "string", - "description": "Unique identifier for a given Organization." + "description": "The notes corresponding to the Smart Contract Interface (either ETHEREUM or SOLANA)." }, - "parameters": { - "$ref": "#/definitions/UpdateWalletIntent" + "createdAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" }, - "generateAppProofs": { - "type": "boolean", - "x-nullable": true + "updatedAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" } }, "required": [ - "type", - "timestampMs", "organizationId", - "parameters" - ] - }, - "UpdateWalletResult": { - "type": "object", - "properties": { - "walletId": { - "type": "string", - "description": "A Wallet ID." - } - }, - "required": [ - "walletId" + "smartContractInterfaceId", + "smartContractAddress", + "smartContractInterface", + "type", + "label", + "notes", + "createdAt", + "updatedAt" ] }, - "UpdateWebhookEndpointIntent": { + "external.data.v1.Credential": { "type": "object", "properties": { - "endpointId": { + "publicKey": { "type": "string", - "description": "Unique identifier of the webhook endpoint to update." + "description": "The public component of a cryptographic key pair used to sign messages and transactions." }, - "url": { - "type": "string", - "x-nullable": true, - "description": "Updated destination URL for webhook delivery." + "type": { + "$ref": "#/definitions/CredentialType" }, - "name": { + "sessionProfileId": { "type": "string", "x-nullable": true, - "description": "Updated human-readable name for this webhook endpoint." - }, - "isActive": { - "type": "boolean", - "x-nullable": true, - "description": "Whether this webhook endpoint is active." + "description": "The session profile associated with this credential, if any. This field is only applicable for credentials of type CREDENTIAL_TYPE_LOGIN." } }, - "required": [ - "endpointId" - ] + "required": ["publicKey", "type"] }, - "UpdateWebhookEndpointRequest": { + "external.data.v1.Quorum": { "type": "object", "properties": { - "type": { - "type": "string", - "enum": [ - "ACTIVITY_TYPE_UPDATE_WEBHOOK_ENDPOINT" - ] - }, - "timestampMs": { - "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." - }, - "organizationId": { - "type": "string", - "description": "Unique identifier for a given Organization." - }, - "parameters": { - "$ref": "#/definitions/UpdateWebhookEndpointIntent" + "threshold": { + "type": "integer", + "format": "int32", + "description": "Count of unique approvals required to meet quorum." }, - "generateAppProofs": { - "type": "boolean", - "x-nullable": true + "userIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Unique identifiers of quorum set members." } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["threshold", "userIds"] }, - "UpdateWebhookEndpointResult": { + "external.data.v1.Timestamp": { "type": "object", "properties": { - "endpointId": { - "type": "string", - "description": "Unique identifier of the updated webhook endpoint." + "seconds": { + "type": "string" }, - "webhookEndpoint": { - "$ref": "#/definitions/WebhookEndpointData", - "description": "The updated webhook endpoint data." + "nanos": { + "type": "string" } }, - "required": [ - "endpointId", - "webhookEndpoint" - ] + "required": ["seconds", "nanos"] }, - "UpsertGasUsageConfigIntent": { + "v1.Tag": { "type": "object", "properties": { - "orgWindowLimitUsd": { + "tagId": { "type": "string", - "description": "Gas sponsorship USD limit for the billing organization window." + "description": "Unique identifier for a given Tag." }, - "subOrgWindowLimitUsd": { + "tagName": { "type": "string", - "description": "Gas sponsorship USD limit for sub-organizations under the billing organization." + "description": "Human-readable name for a Tag." }, - "windowDurationMinutes": { - "type": "string", - "description": "Rolling sponsorship window duration, expressed in minutes. This value can't exceed 30 days (43200 minutes)." + "tagType": { + "$ref": "#/definitions/TagType" }, - "enabled": { - "type": "boolean", - "x-nullable": true, - "description": "Whether gas sponsorship is enabled for the organization." + "createdAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" }, - "solanaConfig": { - "$ref": "#/definitions/SolanaConfig", - "description": "Optional Solana sponsorship settings. If omitted, the existing Solana sponsorship state is left unchanged." + "updatedAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" } }, - "required": [ - "orgWindowLimitUsd", - "subOrgWindowLimitUsd", - "windowDurationMinutes" - ] + "required": ["tagId", "tagName", "tagType", "createdAt", "updatedAt"] }, - "UpsertGasUsageConfigResult": { + "ClaimEarnFeesIntent": { "type": "object", "properties": { - "gasUsageConfigId": { + "wrapperAddress": { "type": "string", - "description": "Unique identifier for the gas usage configuration that was created or updated." + "description": "Address of the deployed Earn wrapper to claim fees for. Must be one of the org's deployed wrappers." } }, - "required": [ - "gasUsageConfigId" - ] + "required": ["wrapperAddress"] }, - "UpsertSwapConfigIntent": { + "ClaimEarnFeesRequest": { "type": "object", "properties": { - "feeReceiverWalletAddress": { + "type": { "type": "string", - "x-nullable": true + "enum": ["ACTIVITY_TYPE_CLAIM_EARN_FEES"] }, - "feeBps": { + "timestampMs": { "type": "string", - "x-nullable": true, - "description": "Client fee in basis points applied to swaps; used for all pairs unless stable_fee_bps is set." + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, - "provider": { + "organizationId": { "type": "string", - "x-nullable": true + "description": "Unique identifier for a given Organization." }, - "stableFeeBps": { - "type": "string", - "x-nullable": true, - "description": "Optional override applied when both swap assets are stablecoins; falls back to fee_bps when unset." + "parameters": { + "$ref": "#/definitions/ClaimEarnFeesIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true } - } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "UpsertSwapConfigResult": { + "ClaimEarnFeesResult": { "type": "object", "properties": { - "feeReceiverWalletAddress": { - "type": "string", - "x-nullable": true - }, - "feeBps": { - "type": "string", - "x-nullable": true - }, - "stableFeeBps": { + "claimRequestId": { "type": "string", - "x-nullable": true + "description": "Identifier to poll claim status and tx hash via GetClaimEarnFeesStatus." } - } - }, - "UsageType": { - "type": "string", - "enum": [ - "USAGE_TYPE_SIGNUP", - "USAGE_TYPE_LOGIN" - ] + }, + "required": ["claimRequestId"] }, - "User": { + "EarnDeployWrapperIntent": { "type": "object", "properties": { - "userId": { + "vaultAddress": { "type": "string", - "description": "Unique identifier for a given User." + "description": "Address of the underlying yield vault to wrap (from the ListEarnVaults catalog)." }, - "userName": { + "chainCaip2": { "type": "string", - "description": "Human-readable name for a User." + "enum": [ + "eip155:1", + "eip155:8453", + "eip155:42161", + "eip155:137", + "eip155:56", + "eip155:4217" + ], + "description": "CAIP-2 chain ID the vault lives on (e.g., 'eip155:8453' for Base)." }, - "userEmail": { + "clientFeeBps": { "type": "string", - "x-nullable": true, - "description": "The user's email address." + "description": "Your performance fee on gross yield, in basis points (e.g., '2000' for 20%). Your fee plus Turnkey's fee cannot exceed 50% of yield." }, - "userPhoneNumber": { + "clientFeeWallet": { "type": "string", - "x-nullable": true, - "description": "The user's phone number in E.164 format e.g. +13214567890" - }, - "authenticators": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/Authenticator" - }, - "description": "A list of Authenticator parameters." - }, - "apiKeys": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/ApiKey" - }, - "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." - }, - "userTags": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of User Tag IDs." - }, - "oauthProviders": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/OauthProvider" - }, - "description": "A list of Oauth Providers." - }, - "createdAt": { - "$ref": "#/definitions/external.data.v1.Timestamp" - }, - "updatedAt": { - "$ref": "#/definitions/external.data.v1.Timestamp" - }, - "mfaPolicies": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/MfaPolicy" - }, - "description": "A list of MFA Policies that define multi-factor authentication requirements for this user." + "description": "The wallet address that receives the client's fee payouts on-chain. Must be a Turnkey-managed wallet address." } }, "required": [ - "userId", - "userName", - "authenticators", - "apiKeys", - "userTags", - "oauthProviders", - "createdAt", - "updatedAt", - "mfaPolicies" + "vaultAddress", + "chainCaip2", + "clientFeeBps", + "clientFeeWallet" ] }, - "UserParams": { + "EarnDeployWrapperRequest": { "type": "object", "properties": { - "userName": { + "type": { "type": "string", - "description": "Human-readable name for a User." + "enum": ["ACTIVITY_TYPE_EARN_DEPLOY_WRAPPER"] }, - "userEmail": { + "timestampMs": { "type": "string", - "x-nullable": true, - "description": "The user's email address." + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, - "accessType": { - "$ref": "#/definitions/AccessType", - "description": "The User's permissible access method(s)." + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." }, - "apiKeys": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/ApiKeyParams" - }, - "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." + "parameters": { + "$ref": "#/definitions/EarnDeployWrapperIntent" }, - "authenticators": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/AuthenticatorParams" - }, - "description": "A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body." + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "EarnDeployWrapperResult": { + "type": "object", + "properties": { + "wrapperAddress": { + "type": "string", + "description": "Address of the deployed fee wrapper (the deposit target)." }, - "userTags": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of User Tag IDs. This field, if not needed, should be an empty array in your request body." + "splitterAddress": { + "type": "string", + "description": "Address of the deployed fee splitter (PaymentSplitter for Morpho, RevenueSplitterOwner for Aave)." + }, + "deployRequestId": { + "type": "string", + "description": "Identifier to poll deploy status." } }, - "required": [ - "userName", - "accessType", - "apiKeys", - "authenticators", - "userTags" - ] + "required": ["wrapperAddress", "splitterAddress", "deployRequestId"] }, - "UserParamsV2": { + "EarnDepositIntent": { "type": "object", "properties": { - "userName": { + "wrapperAddress": { "type": "string", - "description": "Human-readable name for a User." + "description": "Address of the deployed Earn wrapper to deposit into, from ListEarnVaults/ListEarnPositions. Must be one of the org's deployed wrappers." }, - "userEmail": { + "signWith": { + "type": "string", + "description": "A Wallet account address or Private Key address to deposit from and sign with. Must be an on-chain address; Private Key identifiers are not supported." + }, + "assets": { + "type": "string", + "description": "Amount of the underlying asset to deposit, in raw on-chain units (e.g., '1000000' for 1 USDC at 6 decimals)." + }, + "chainCaip2": { "type": "string", + "enum": [ + "eip155:1", + "eip155:8453", + "eip155:42161", + "eip155:137", + "eip155:56", + "eip155:4217" + ], + "description": "CAIP-2 chain ID the vault lives on (e.g., 'eip155:8453' for Base)." + }, + "sponsor": { + "type": "boolean", "x-nullable": true, - "description": "The user's email address." + "description": "Whether to sponsor this transaction via Gas Station." + } + }, + "required": ["wrapperAddress", "signWith", "assets", "chainCaip2"] + }, + "EarnDepositRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_EARN_DEPOSIT"] }, - "apiKeys": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/ApiKeyParams" - }, - "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, - "authenticators": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/AuthenticatorParamsV2" - }, - "description": "A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body." + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." }, - "userTags": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of User Tag IDs. This field, if not needed, should be an empty array in your request body." + "parameters": { + "$ref": "#/definitions/EarnDepositIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true } }, - "required": [ - "userName", - "apiKeys", - "authenticators", - "userTags" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "UserParamsV3": { + "EarnDepositResult": { "type": "object", "properties": { - "userName": { + "depositRequestId": { "type": "string", - "description": "Human-readable name for a User." + "description": "Identifier to poll deposit status and tx hash via GetEarnDepositStatus." + } + }, + "required": ["depositRequestId"] + }, + "EarnEnabledVault": { + "type": "object", + "properties": { + "vaultAddress": { + "type": "string", + "description": "Address of the underlying yield vault." }, - "userEmail": { + "wrapperAddress": { "type": "string", - "x-nullable": true, - "description": "The user's email address." + "description": "Address of the deployed fee wrapper (the deposit target)." }, - "userPhoneNumber": { + "provider": { + "$ref": "#/definitions/EarnProvider", + "description": "Yield provider for the vault." + }, + "caip19": { "type": "string", - "x-nullable": true, - "description": "The user's phone number in E.164 format e.g. +13214567890" + "description": "CAIP-19 asset ID of the vault's underlying asset (e.g. 'eip155:8453/erc20:0x833589...'); the chain is encoded in the identifier." }, - "apiKeys": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/ApiKeyParamsV2" - }, - "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." + "apyPct": { + "type": "string", + "description": "Gross annual percentage yield, expressed as a decimal fraction (before Turnkey and client fees)." }, - "authenticators": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/AuthenticatorParamsV2" - }, - "description": "A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body." + "totalDeposited": { + "type": "string", + "description": "Total deposited through this wrapper (wrapper TVL), in raw on-chain units of the underlying asset." }, - "oauthProviders": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/OauthProviderParams" - }, - "description": "A list of Oauth providers. This field, if not needed, should be an empty array in your request body." + "display": { + "$ref": "#/definitions/EarnValueDisplay", + "description": "Normalized total-deposited values for display only (usd + crypto). Do not do arithmetic with these; use total_deposited instead." }, - "userTags": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of User Tag IDs. This field, if not needed, should be an empty array in your request body." + "netApyPct": { + "type": "string", + "description": "Annual percentage yield net of the Turnkey and client performance fees, expressed as a decimal fraction." + }, + "clientFeeBps": { + "type": "string", + "description": "Client performance fee taken on yield, in basis points. Currently org-wide; moving to a per-vault setting." + }, + "depositsDisabled": { + "type": "boolean", + "description": "When true, deposits to this wrapper are rejected; withdrawals are unaffected. Toggled via EarnSetWrapperState." + }, + "name": { + "type": "string", + "description": "Human-readable vault name from the provider (e.g. 'Steakhouse Prime USDC' for Morpho; the reserve symbol for Aave)." + }, + "curator": { + "type": "string", + "description": "Vault curator name(s), comma-separated when a vault has multiple. Empty for providers without curators (e.g. Aave)." + }, + "claimableClientFee": { + "type": "string", + "x-nullable": true, + "description": "The client's claimable performance fee (releasable now), in raw on-chain units of the underlying asset (the caip19 asset). Turnkey's fee is excluded. Only returned to the parent org; unset when a sub-org queries." + }, + "claimableClientFeeDisplay": { + "$ref": "#/definitions/EarnValueDisplay", + "description": "Normalized claimable_client_fee for display only (usd + crypto). Do not do arithmetic with these; use claimable_client_fee. Unset when a sub-org queries." } - }, - "required": [ - "userName", - "apiKeys", - "authenticators", - "oauthProviders", - "userTags" - ] + } }, - "UserParamsV4": { + "EarnPosition": { "type": "object", "properties": { - "userName": { + "vaultAddress": { "type": "string", - "description": "Human-readable name for a User." + "description": "Address of the underlying yield vault." }, - "userEmail": { + "wrapperAddress": { "type": "string", - "x-nullable": true, - "description": "The user's email address." + "description": "Address of the fee wrapper holding the position." }, - "userPhoneNumber": { + "provider": { + "$ref": "#/definitions/EarnProvider", + "description": "Yield provider for the vault." + }, + "caip19": { "type": "string", - "x-nullable": true, - "description": "The user's phone number in E.164 format e.g. +13214567890" + "description": "CAIP-19 asset ID of the vault's underlying asset (e.g. 'eip155:8453/erc20:0x833589...'); the chain is encoded in the identifier." }, - "apiKeys": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/ApiKeyParamsV2" - }, - "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." + "currentValue": { + "type": "string", + "description": "Current value of the position in the underlying asset, in raw on-chain units (already net of the wrapper fee)." }, - "authenticators": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/AuthenticatorParamsV2" - }, - "description": "A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body." + "totalDeposited": { + "type": "string", + "description": "Lifetime total deposited into this position, in raw on-chain units." }, - "oauthProviders": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/OauthProviderParamsV2" - }, - "description": "A list of Oauth providers. This field, if not needed, should be an empty array in your request body." + "totalWithdrawn": { + "type": "string", + "description": "Lifetime total withdrawn from this position, in raw on-chain units." }, - "userTags": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of User Tag IDs. This field, if not needed, should be an empty array in your request body." + "display": { + "$ref": "#/definitions/EarnPositionDisplay", + "description": "USD + crypto renderings for display only. Do not do arithmetic with these." + }, + "depositsDisabled": { + "type": "boolean", + "description": "When true, deposits to this wrapper are rejected; withdrawals are unaffected. Toggled via EarnSetWrapperState." } - }, - "required": [ - "userName", - "apiKeys", - "authenticators", - "oauthProviders", - "userTags" - ] + } }, - "ValidateTvcImageRequest": { + "EarnPositionDisplay": { "type": "object", "properties": { - "organizationId": { + "currentValueUsd": { "type": "string", - "description": "Unique identifier for a given Organization." + "description": "Current value in USD, for display only." }, - "pivotContainerImageUrl": { + "totalDepositedUsd": { "type": "string", - "description": "URL of the container image." + "description": "Total deposited in USD, for display only." }, - "pivotContainerEncryptedPullSecret": { - "type": "string", - "x-nullable": true, - "description": "HPKE-encrypted pull secret for private images." - } - }, - "required": [ - "organizationId", - "pivotContainerImageUrl" - ] - }, - "ValidateTvcImageResponse": { - "type": "object", - "properties": { - "resolvedImageDigest": { - "type": "string" - } - } - }, - "VerifyOtpIntent": { - "type": "object", - "properties": { - "otpId": { + "totalWithdrawnUsd": { "type": "string", - "description": "ID representing the result of an init OTP activity." + "description": "Total withdrawn in USD, for display only." }, - "otpCode": { + "currentValueCrypto": { "type": "string", - "description": "OTP sent out to a user's contact (email or SMS)" + "description": "Current value in the asset's own units, for display only." }, - "expirationSeconds": { + "totalDepositedCrypto": { "type": "string", - "x-nullable": true, - "description": "Expiration window (in seconds) indicating how long the verification token is valid for. If not provided, a default of 1 hour will be used. Maximum value is 86400 seconds (24 hours)" + "description": "Total deposited in the asset's own units, for display only." }, - "publicKey": { + "totalWithdrawnCrypto": { "type": "string", - "x-nullable": true, - "description": "Client-side public key generated by the user, which will be added to the JWT response and verified in subsequent requests via a client proof signature" + "description": "Total withdrawn in the asset's own units, for display only." } - }, - "required": [ - "otpId", - "otpCode" - ] + } }, - "VerifyOtpIntentV2": { + "EarnProvider": { + "type": "string", + "enum": ["EARN_PROVIDER_MORPHO", "EARN_PROVIDER_AAVE"] + }, + "EarnSetWrapperStateIntent": { "type": "object", "properties": { - "otpId": { - "type": "string", - "description": "UUID representing an OTP flow. A new UUID is created for each init OTP activity." - }, - "encryptedOtpBundle": { + "wrapperAddress": { "type": "string", - "description": "Encrypted bundle containing the OTP code and a client-generated public key. Turnkey's secure enclaves will decrypt this bundle, verify the OTP code, and issue a new Verification Token. Encrypted using the target encryption key provided in the INIT_OTP activity result." + "description": "Address of the deployed Earn wrapper to update, from ListEarnVaults/ListEarnPositions. Must be one of the org's deployed wrappers." }, - "expirationSeconds": { - "type": "string", + "depositsDisabled": { + "type": "boolean", "x-nullable": true, - "description": "Expiration window (in seconds) indicating how long the verification token is valid for. If not provided, a default of 1 hour will be used. Maximum value is 86400 seconds (24 hours)" + "description": "When true, deposits to this wrapper are rejected; withdrawals are unaffected. Set to false to re-enable deposits." } }, - "required": [ - "otpId", - "encryptedOtpBundle" - ] + "required": ["wrapperAddress", "depositsDisabled"] }, - "VerifyOtpRequest": { + "EarnSetWrapperStateRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_VERIFY_OTP_V2" - ] + "enum": ["ACTIVITY_TYPE_EARN_SET_WRAPPER_STATE"] }, "timestampMs": { "type": "string", @@ -20741,603 +18327,374 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/definitions/VerifyOtpIntentV2" + "$ref": "#/definitions/EarnSetWrapperStateIntent" }, "generateAppProofs": { "type": "boolean", "x-nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] - }, - "VerifyOtpResult": { - "type": "object", - "properties": { - "verificationToken": { - "type": "string", - "description": "Signed JWT containing a unique id, expiry, verification type, contact. Verification status of a user is updated when the token is consumed (in OTP_LOGIN requests)" - } - }, - "required": [ - "verificationToken" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "Vote": { + "EarnSetWrapperStateResult": { "type": "object", "properties": { - "id": { - "type": "string", - "description": "Unique identifier for a given Vote object." - }, - "userId": { - "type": "string", - "description": "Unique identifier for a given User." - }, - "user": { - "$ref": "#/definitions/User", - "description": "Web and/or API user within your Organization." - }, - "activityId": { - "type": "string", - "description": "Unique identifier for a given Activity object." - }, - "selection": { - "type": "string", - "enum": [ - "VOTE_SELECTION_APPROVED", - "VOTE_SELECTION_REJECTED" - ] - }, - "message": { - "type": "string", - "description": "The raw message being signed within a Vote." - }, - "publicKey": { - "type": "string", - "description": "The public component of a cryptographic key pair used to sign messages and transactions." - }, - "signature": { - "type": "string", - "description": "The signature applied to a particular vote." - }, - "scheme": { + "wrapperAddress": { "type": "string", - "description": "Method used to produce a signature." + "description": "Address of the updated Earn wrapper." }, - "createdAt": { - "$ref": "#/definitions/external.data.v1.Timestamp" + "depositsDisabled": { + "type": "boolean", + "description": "The wrapper's deposit state after this activity." } }, - "required": [ - "id", - "userId", - "user", - "activityId", - "selection", - "message", - "publicKey", - "signature", - "scheme", - "createdAt" - ] + "required": ["wrapperAddress", "depositsDisabled"] }, - "Wallet": { + "EarnValueDisplay": { "type": "object", "properties": { - "walletId": { + "usd": { "type": "string", - "description": "Unique identifier for a given Wallet." + "description": "USD value, for display only." }, - "walletName": { + "crypto": { "type": "string", - "description": "Human-readable name for a Wallet." - }, - "createdAt": { - "$ref": "#/definitions/external.data.v1.Timestamp" - }, - "updatedAt": { - "$ref": "#/definitions/external.data.v1.Timestamp" - }, - "exported": { - "type": "boolean", - "description": "True when a given Wallet is exported, false otherwise." - }, - "imported": { - "type": "boolean", - "description": "True when a given Wallet is imported, false otherwise." + "description": "Normalized amount in the asset's own units, for display only." } - }, - "required": [ - "walletId", - "walletName", - "createdAt", - "updatedAt", - "exported", - "imported" - ] + } }, - "WalletAccount": { + "EarnVault": { "type": "object", "properties": { - "walletAccountId": { + "vaultAddress": { "type": "string", - "description": "Unique identifier for a given Wallet Account." + "description": "Address of the underlying yield vault." }, - "organizationId": { - "type": "string", - "description": "The Organization the Account belongs to." + "provider": { + "$ref": "#/definitions/EarnProvider", + "description": "Yield provider for the vault." }, - "walletId": { + "caip19": { "type": "string", - "description": "The Wallet the Account was derived from." - }, - "curve": { - "$ref": "#/definitions/Curve", - "description": "Cryptographic curve used to generate the Account." - }, - "pathFormat": { - "$ref": "#/definitions/PathFormat", - "description": "Path format used to generate the Account." + "description": "CAIP-19 asset ID of the vault's underlying asset (e.g. 'eip155:8453/erc20:0x833589...'); the chain is encoded in the identifier." }, - "path": { + "tvl": { "type": "string", - "description": "Path used to generate the Account." - }, - "addressFormat": { - "$ref": "#/definitions/AddressFormat", - "description": "Address format used to generate the Account." + "description": "Total value locked in the vault, in raw on-chain units of the underlying asset. The catalog is sorted by the USD value of this." }, - "address": { + "apyPct": { "type": "string", - "description": "Address generated using the Wallet seed and Account parameters." + "description": "Current annual percentage yield, expressed as a decimal fraction (e.g., '0.0812' for 8.12%)." }, - "createdAt": { - "$ref": "#/definitions/external.data.v1.Timestamp" + "enabled": { + "type": "boolean", + "description": "Whether the organization has enabled this vault." }, - "updatedAt": { - "$ref": "#/definitions/external.data.v1.Timestamp" + "display": { + "$ref": "#/definitions/EarnValueDisplay", + "description": "Normalized TVL values for display purposes only (usd + crypto). Do not do arithmetic with these; use tvl instead." }, - "publicKey": { + "name": { "type": "string", - "x-nullable": true, - "description": "The public component of this wallet account's underlying cryptographic key pair." - }, - "walletDetails": { - "$ref": "#/definitions/Wallet", - "x-nullable": true, - "description": "Wallet details for this account. This is only present when include_wallet_details=true." + "description": "Human-readable vault name from the provider (e.g. 'Steakhouse Prime USDC' for Morpho; the reserve symbol for Aave)." }, - "name": { + "curator": { "type": "string", - "x-nullable": true, - "description": "Human-readable name for this Wallet Account, unique within the organization." + "description": "Vault curator name(s), comma-separated when a vault has multiple. Empty for providers without curators (e.g. Aave)." } - }, - "required": [ - "walletAccountId", - "organizationId", - "walletId", - "curve", - "pathFormat", - "path", - "addressFormat", - "address", - "createdAt", - "updatedAt" - ] + } }, - "WalletAccountParams": { + "EarnWithdrawIntent": { "type": "object", "properties": { - "curve": { - "$ref": "#/definitions/Curve", - "description": "Cryptographic curve used to generate a wallet Account." + "wrapperAddress": { + "type": "string", + "description": "Address of the deployed Earn wrapper holding the position to withdraw from, from ListEarnPositions. Must be one of the org's deployed wrappers." }, - "pathFormat": { - "$ref": "#/definitions/PathFormat", - "description": "Path format used to generate a wallet Account." + "signWith": { + "type": "string", + "description": "A Wallet account address or Private Key address to withdraw to and sign with. Must be an on-chain address; Private Key identifiers are not supported." }, - "path": { + "chainCaip2": { "type": "string", - "description": "Path used to generate a wallet Account." + "enum": [ + "eip155:1", + "eip155:8453", + "eip155:42161", + "eip155:137", + "eip155:56", + "eip155:4217" + ], + "description": "CAIP-2 chain ID the vault lives on (e.g., 'eip155:8453' for Base)." }, - "addressFormat": { - "$ref": "#/definitions/AddressFormat", - "description": "Address format used to generate a wallet Acccount." + "sponsor": { + "type": "boolean", + "x-nullable": true, + "description": "Whether to sponsor this transaction via Gas Station." }, - "name": { + "amountValue": { "type": "string", - "x-nullable": true, - "description": "Optional human-readable name for the account." + "description": "The amount of the underlying asset to withdraw, in raw on-chain units. Pass 'MAX' to withdraw the entire position." } }, - "required": [ - "curve", - "pathFormat", - "path", - "addressFormat" - ] + "required": ["wrapperAddress", "signWith", "chainCaip2", "amountValue"] }, - "WalletKitSettingsParams": { + "EarnWithdrawRequest": { "type": "object", "properties": { - "enabledSocialProviders": { - "type": "array", - "items": { - "type": "string" - }, - "description": "List of enabled social login providers (e.g., 'apple', 'google', 'facebook')", - "title": "Enabled Social Providers" + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_EARN_WITHDRAW"] }, - "oauthClientIds": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "Mapping of social login providers to their Oauth client IDs.", - "title": "Oauth Client IDs" + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, - "oauthRedirectUrl": { + "organizationId": { "type": "string", - "description": "Oauth redirect URL to be used for social login flows.", - "title": "Oauth Redirect URL" + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/EarnWithdrawIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true } - } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "WalletParams": { + "EarnWithdrawResult": { "type": "object", "properties": { - "walletName": { + "withdrawRequestId": { "type": "string", - "description": "Human-readable name for a Wallet." - }, - "accounts": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/WalletAccountParams" - }, - "description": "A list of wallet Accounts. This field, if not needed, should be an empty array in your request body." - }, - "mnemonicLength": { - "type": "integer", - "format": "int32", - "x-nullable": true, - "description": "Length of mnemonic to generate the Wallet seed. Defaults to 12. Accepted values: 12, 15, 18, 21, 24." + "description": "Identifier to poll withdrawal status and tx hash via GetEarnWithdrawStatus." } }, - "required": [ - "walletName", - "accounts" - ] + "required": ["withdrawRequestId"] }, - "WalletResult": { + "GetEarnDeployStatusRequest": { "type": "object", "properties": { - "walletId": { - "type": "string" + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." }, - "addresses": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of account addresses." + "deployRequestId": { + "type": "string", + "description": "The deploy_request_id returned by EarnDeployWrapper." } }, - "required": [ - "walletId", - "addresses" - ] + "required": ["organizationId", "deployRequestId"] }, - "WebAuthnStamp": { + "GetEarnDeployStatusResponse": { "type": "object", "properties": { - "credentialId": { - "type": "string", - "description": "A base64 url encoded Unique identifier for a given credential." - }, - "clientDataJson": { + "status": { "type": "string", - "description": "A base64 encoded payload containing metadata about the signing context and the challenge." + "enum": ["PENDING", "COMPLETED", "FAILED"], + "description": "Status of the wrapper deployment." }, - "authenticatorData": { + "deployTxHash": { "type": "string", - "description": "A base64 encoded payload containing metadata about the authenticator." + "x-nullable": true, + "description": "Transaction hash of the deployment, once available." }, - "signature": { + "error": { "type": "string", - "description": "The base64 url encoded signature bytes contained within the WebAuthn assertion response." + "x-nullable": true, + "description": "Reason the deployment transaction failed, when status is FAILED." } }, - "required": [ - "credentialId", - "clientDataJson", - "authenticatorData", - "signature" - ] + "required": ["status"] }, - "WebhookEndpointData": { + "GetEarnDepositStatusRequest": { "type": "object", "properties": { - "endpointId": { - "type": "string", - "description": "Unique identifier of the webhook endpoint." - }, "organizationId": { "type": "string", "description": "Unique identifier for a given Organization." }, - "url": { - "type": "string", - "description": "The destination URL for webhook delivery." - }, - "name": { + "depositRequestId": { "type": "string", - "description": "Human-readable name for this webhook endpoint." - }, - "isActive": { - "type": "boolean", - "description": "Whether this webhook endpoint is active." - }, - "subscriptions": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/WebhookSubscriptionParams" - }, - "description": "Current subscriptions attached to this endpoint." + "description": "The deposit_request_id returned by EarnDeposit." } }, - "required": [ - "endpointId", - "organizationId", - "url", - "name", - "isActive" - ] + "required": ["organizationId", "depositRequestId"] }, - "WebhookSubscriptionParams": { + "GetEarnDepositStatusResponse": { "type": "object", "properties": { - "eventType": { + "status": { "type": "string", - "description": "The event type to subscribe to (for example, ACTIVITY_UPDATES, BALANCE_CONFIRMED_UPDATES, or BALANCE_FINALIZED_UPDATES)." + "enum": ["PENDING", "COMPLETED", "FAILED"], + "description": "Status of the deposit." }, - "filtersJson": { + "depositTxHash": { "type": "string", "x-nullable": true, - "description": "JSON-encoded filter criteria for this subscription." + "description": "Transaction hash of the deposit, once available." }, - "isActive": { - "type": "boolean", + "error": { + "type": "string", "x-nullable": true, - "description": "Whether this subscription is active." + "description": "Reason the deposit transaction failed, when status is FAILED." } }, - "required": [ - "eventType" - ] + "required": ["status"] }, - "activity.v1.Address": { + "GetEarnWithdrawStatusRequest": { "type": "object", "properties": { - "format": { - "$ref": "#/definitions/AddressFormat" + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." }, - "address": { - "type": "string" + "withdrawRequestId": { + "type": "string", + "description": "The withdraw_request_id returned by EarnWithdraw." } - } + }, + "required": ["organizationId", "withdrawRequestId"] }, - "activity.v1.PolicyEvaluation": { + "GetEarnWithdrawStatusResponse": { "type": "object", "properties": { - "id": { - "type": "string", - "description": "Unique identifier for a given policy evaluation." - }, - "activityId": { + "status": { "type": "string", - "description": "Unique identifier for a given Activity." + "enum": ["PENDING", "COMPLETED", "FAILED"], + "description": "Status of the withdrawal." }, - "organizationId": { + "withdrawTxHash": { "type": "string", - "description": "Unique identifier for the Organization the Activity belongs to." + "x-nullable": true, + "description": "Transaction hash of the withdrawal, once available." }, - "voteId": { + "error": { "type": "string", - "description": "Unique identifier for the Vote associated with this policy evaluation." - }, - "policyEvaluations": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/common.v1.PolicyEvaluation" - }, - "description": "Detailed evaluation result for each Policy that was run." - }, - "createdAt": { - "$ref": "#/definitions/external.data.v1.Timestamp" + "x-nullable": true, + "description": "Reason the withdrawal transaction failed, when status is FAILED." } }, - "required": [ - "id", - "activityId", - "organizationId", - "voteId", - "policyEvaluations", - "createdAt" - ] + "required": ["status"] }, - "common.v1.PolicyEvaluation": { + "ListEarnEnabledVaultsRequest": { "type": "object", "properties": { - "policyId": { - "type": "string" + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." }, - "outcome": { - "$ref": "#/definitions/Outcome" + "provider": { + "$ref": "#/definitions/EarnProvider", + "description": "Optional filter: only return enabled vaults from this provider. Leave EARN_PROVIDER_UNSPECIFIED to return all providers." + }, + "caip19": { + "type": "string", + "x-nullable": true, + "description": "Optional filter: only return enabled vaults whose underlying asset matches this CAIP-19 asset ID (e.g. 'eip155:8453/erc20:0x833589...'). The chain is taken from the CAIP-19 identifier." } - } + }, + "required": ["organizationId"] }, - "data.v1.Address": { + "ListEarnEnabledVaultsResponse": { "type": "object", "properties": { - "format": { - "$ref": "#/definitions/AddressFormat" - }, - "address": { - "type": "string" + "enabledVaults": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/EarnEnabledVault" + }, + "description": "The organization's deployed wrappers." } } }, - "data.v1.SignatureScheme": { - "type": "string", - "enum": [ - "SIGNATURE_SCHEME_EPHEMERAL_KEY_P256" - ] - }, - "data.v1.SmartContractInterface": { + "ListEarnPositionsRequest": { "type": "object", "properties": { "organizationId": { "type": "string", - "description": "The Organization the Smart Contract Interface belongs to." - }, - "smartContractInterfaceId": { - "type": "string", - "description": "Unique identifier for a given Smart Contract Interface (ABI or IDL)." - }, - "smartContractAddress": { - "type": "string", - "description": "The address corresponding to the Smart Contract or Program." - }, - "smartContractInterface": { - "type": "string", - "description": "The JSON corresponding to the Smart Contract Interface (ABI or IDL)." - }, - "type": { - "type": "string", - "description": "The type corresponding to the Smart Contract Interface (either ETHEREUM or SOLANA)." - }, - "label": { - "type": "string", - "description": "The label corresponding to the Smart Contract Interface (either ETHEREUM or SOLANA)." + "description": "Unique identifier for a given Organization." }, - "notes": { + "walletAddress": { "type": "string", - "description": "The notes corresponding to the Smart Contract Interface (either ETHEREUM or SOLANA)." - }, - "createdAt": { - "$ref": "#/definitions/external.data.v1.Timestamp" - }, - "updatedAt": { - "$ref": "#/definitions/external.data.v1.Timestamp" + "description": "The wallet address to return positions for." } }, - "required": [ - "organizationId", - "smartContractInterfaceId", - "smartContractAddress", - "smartContractInterface", - "type", - "label", - "notes", - "createdAt", - "updatedAt" - ] + "required": ["organizationId", "walletAddress"] }, - "external.data.v1.Credential": { + "ListEarnPositionsResponse": { "type": "object", "properties": { - "publicKey": { + "positions": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/EarnPosition" + }, + "description": "The wallet's active Earn positions." + } + } + }, + "ListEarnVaultsRequest": { + "type": "object", + "properties": { + "organizationId": { "type": "string", - "description": "The public component of a cryptographic key pair used to sign messages and transactions." + "description": "Unique identifier for a given Organization. Annotates which vaults the organization has already enabled." }, - "type": { - "$ref": "#/definitions/CredentialType" + "provider": { + "$ref": "#/definitions/EarnProvider", + "description": "Optional filter: only return vaults from this provider. Leave EARN_PROVIDER_UNSPECIFIED to return all providers." }, - "sessionProfileId": { + "caip19": { "type": "string", - "x-nullable": true, - "description": "The session profile associated with this credential, if any. This field is only applicable for credentials of type CREDENTIAL_TYPE_LOGIN." + "description": "CAIP-19 asset ID (e.g. 'eip155:8453/erc20:0x833589...') to return vaults for. Only vaults whose underlying asset matches are returned; the chain is taken from the CAIP-19 identifier." + }, + "paginationOptions": { + "$ref": "#/definitions/Pagination", + "description": "Pagination over the TVL-sorted catalog. before/after are opaque cursors from a prior page's page_info (start_cursor/end_cursor); do not construct them by hand." } }, - "required": [ - "publicKey", - "type" - ] + "required": ["organizationId", "caip19"] }, - "external.data.v1.Quorum": { + "ListEarnVaultsResponse": { "type": "object", "properties": { - "threshold": { - "type": "integer", - "format": "int32", - "description": "Count of unique approvals required to meet quorum." - }, - "userIds": { + "vaults": { "type": "array", "items": { - "type": "string" + "type": "object", + "$ref": "#/definitions/EarnVault" }, - "description": "Unique identifiers of quorum set members." - } - }, - "required": [ - "threshold", - "userIds" - ] - }, - "external.data.v1.Timestamp": { - "type": "object", - "properties": { - "seconds": { - "type": "string" + "description": "The catalog of wrappable vaults, sorted by TVL (USD) descending. To page, pass page_info.end_cursor as the pagination after cursor." }, - "nanos": { - "type": "string" + "pageInfo": { + "$ref": "#/definitions/PageInfo", + "description": "Pagination metadata for the returned page. Pass end_cursor as the next request's after cursor (or start_cursor as the before cursor) to page through the catalog. Cursors are opaque; do not parse them." } - }, - "required": [ - "seconds", - "nanos" - ] + } }, - "v1.Tag": { + "PageInfo": { "type": "object", "properties": { - "tagId": { - "type": "string", - "description": "Unique identifier for a given Tag." - }, - "tagName": { - "type": "string", - "description": "Human-readable name for a Tag." + "hasNextPage": { + "type": "boolean" }, - "tagType": { - "$ref": "#/definitions/TagType" + "hasPreviousPage": { + "type": "boolean" }, - "createdAt": { - "$ref": "#/definitions/external.data.v1.Timestamp" + "startCursor": { + "type": "string", + "x-nullable": true }, - "updatedAt": { - "$ref": "#/definitions/external.data.v1.Timestamp" + "endCursor": { + "type": "string", + "x-nullable": true } - }, - "required": [ - "tagId", - "tagName", - "tagType", - "createdAt", - "updatedAt" - ] + } } }, "securityDefinitions": { @@ -21378,36 +18735,19 @@ }, { "name": "WALLETS AND PRIVATE KEYS", - "tags": [ - "Wallets", - "Signing", - "Private Keys", - "Private Key Tags" - ] + "tags": ["Wallets", "Signing", "Private Keys", "Private Key Tags"] }, { "name": "USERS", - "tags": [ - "Users", - "User Tags", - "User Recovery", - "User Auth" - ] + "tags": ["Users", "User Tags", "User Recovery", "User Auth"] }, { "name": "CREDENTIALS", - "tags": [ - "Authenticators", - "API Keys", - "Sessions" - ] + "tags": ["Authenticators", "API Keys", "Sessions"] }, { "name": "ACTIVITIES", - "tags": [ - "Activities", - "Consensus" - ] + "tags": ["Activities", "Consensus"] } ] } diff --git a/scripts/openapi-gen/openapi.json b/scripts/openapi-gen/openapi.json index 78703238..fccdc013 100644 --- a/scripts/openapi-gen/openapi.json +++ b/scripts/openapi-gen/openapi.json @@ -80,9 +80,7 @@ "paths": { "/public/v1/query/get_activity": { "post": { - "tags": [ - "Activities" - ], + "tags": ["Activities"], "summary": "Get activity", "description": "Get details about an activity.", "operationId": "GetActivity", @@ -112,9 +110,7 @@ }, "/public/v1/query/get_api_key": { "post": { - "tags": [ - "API keys" - ], + "tags": ["API keys"], "summary": "Get API key", "description": "Get details about an API key.", "operationId": "GetApiKey", @@ -144,9 +140,7 @@ }, "/public/v1/query/get_api_keys": { "post": { - "tags": [ - "API keys" - ], + "tags": ["API keys"], "summary": "Get API keys", "description": "Get details about API keys for a user.", "operationId": "GetApiKeys", @@ -176,9 +170,7 @@ }, "/public/v1/query/get_app_status": { "post": { - "tags": [ - "TVC" - ], + "tags": ["TVC"], "summary": "Get TVC App status", "description": "Get live runtime status for a TVC App from the cluster.", "operationId": "GetAppStatus", @@ -208,9 +200,7 @@ }, "/public/v1/query/get_authenticator": { "post": { - "tags": [ - "Authenticators" - ], + "tags": ["Authenticators"], "summary": "Get authenticator", "description": "Get details about an authenticator.", "operationId": "GetAuthenticator", @@ -240,9 +230,7 @@ }, "/public/v1/query/get_authenticators": { "post": { - "tags": [ - "Authenticators" - ], + "tags": ["Authenticators"], "summary": "Get authenticators", "description": "Get details about authenticators for a user.", "operationId": "GetAuthenticators", @@ -272,9 +260,7 @@ }, "/public/v1/query/get_boot_proof": { "post": { - "tags": [ - "Boot Proof" - ], + "tags": ["Boot Proof"], "summary": "Get a specific boot proof", "description": "Get the boot proof for a given ephemeral key.", "operationId": "GetBootProof", @@ -302,107 +288,9 @@ } } }, - "/public/v1/query/get_earn_deploy_status": { - "post": { - "tags": [ - "Earn" - ], - "summary": "Get Earn deploy status", - "description": "Poll the status of a wrapper deployment by its deploy_request_id.", - "operationId": "GetEarnDeployStatus", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GetEarnDeployStatusRequest" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "A successful response.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GetEarnDeployStatusResponse" - } - } - } - } - } - } - }, - "/public/v1/query/get_earn_deposit_status": { - "post": { - "tags": [ - "Earn" - ], - "summary": "Get Earn deposit status", - "description": "Poll the status of a deposit by its deposit_request_id (for the async/sponsored deposit path).", - "operationId": "GetEarnDepositStatus", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GetEarnDepositStatusRequest" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "A successful response.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GetEarnDepositStatusResponse" - } - } - } - } - } - } - }, - "/public/v1/query/get_earn_withdraw_status": { - "post": { - "tags": [ - "Earn" - ], - "summary": "Get Earn withdraw status", - "description": "Poll the status of a withdrawal by its withdraw_request_id.", - "operationId": "GetEarnWithdrawStatus", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GetEarnWithdrawStatusRequest" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "A successful response.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GetEarnWithdrawStatusResponse" - } - } - } - } - } - } - }, "/public/v1/query/get_gas_usage": { "post": { - "tags": [ - "Broadcasting" - ], + "tags": ["Broadcasting"], "summary": "Get gas usage", "description": "Get gas usage and gas limits for either the parent organization or a sub-organization.", "operationId": "GetGasUsage", @@ -432,9 +320,7 @@ }, "/public/v1/query/get_ip_allowlist": { "post": { - "tags": [ - "IP Allowlist" - ], + "tags": ["IP Allowlist"], "summary": "Get IP Allowlist", "description": "Get IP allowlist and rules for an organization.", "operationId": "GetIpAllowlist", @@ -464,9 +350,7 @@ }, "/public/v1/query/get_latest_boot_proof": { "post": { - "tags": [ - "Boot Proof" - ], + "tags": ["Boot Proof"], "summary": "Get the latest boot proof for an app", "description": "Get the latest boot proof for a given enclave app name.", "operationId": "GetLatestBootProof", @@ -496,9 +380,7 @@ }, "/public/v1/query/get_mfa_policies": { "post": { - "tags": [ - "MFA Policies" - ], + "tags": ["MFA Policies"], "summary": "Get MFA policies", "description": "Get all MFA policies for a user.", "operationId": "GetMfaPolicies", @@ -528,9 +410,7 @@ }, "/public/v1/query/get_mfa_policy": { "post": { - "tags": [ - "MFA Policies" - ], + "tags": ["MFA Policies"], "summary": "Get MFA policy", "description": "Get a single MFA policy for a user.", "operationId": "GetMfaPolicy", @@ -560,9 +440,7 @@ }, "/public/v1/query/get_mfa_status": { "post": { - "tags": [ - "MFA Policies" - ], + "tags": ["MFA Policies"], "summary": "Get MFA status", "description": "Get the MFA status of an activity for a specific user or all voting users.", "operationId": "GetMfaStatus", @@ -592,9 +470,7 @@ }, "/public/v1/query/get_nonces": { "post": { - "tags": [ - "Broadcasting" - ], + "tags": ["Broadcasting"], "summary": "Get nonces", "description": "Get nonce values for an address on a given network. Can fetch the standard on-chain nonce and/or the gas station nonce used for sponsored transactions.", "operationId": "GetNonces", @@ -653,9 +529,7 @@ }, "/public/v1/query/get_oauth_providers": { "post": { - "tags": [ - "User Auth" - ], + "tags": ["User Auth"], "summary": "Get Oauth providers", "description": "Get details about Oauth providers for a user.", "operationId": "GetOauthProviders", @@ -685,9 +559,7 @@ }, "/public/v1/query/get_onramp_transaction_status": { "post": { - "tags": [ - "On Ramp" - ], + "tags": ["On Ramp"], "summary": "Get On Ramp transaction status", "description": "Get the status of an on ramp transaction.", "operationId": "GetOnRampTransactionStatus", @@ -717,9 +589,7 @@ }, "/public/v1/query/get_organization_configs": { "post": { - "tags": [ - "Organizations" - ], + "tags": ["Organizations"], "summary": "Get configs", "description": "Get quorum settings and features for an organization.", "operationId": "GetOrganizationConfigs", @@ -749,9 +619,7 @@ }, "/public/v1/query/get_policy": { "post": { - "tags": [ - "Policies" - ], + "tags": ["Policies"], "summary": "Get policy", "description": "Get details about a policy.", "operationId": "GetPolicy", @@ -781,9 +649,7 @@ }, "/public/v1/query/get_policy_evaluations": { "post": { - "tags": [ - "Activities" - ], + "tags": ["Activities"], "summary": "Get policy evaluations", "description": "Get the policy evaluations for an activity.", "operationId": "GetPolicyEvaluations", @@ -813,9 +679,7 @@ }, "/public/v1/query/get_private_key": { "post": { - "tags": [ - "Private Keys" - ], + "tags": ["Private Keys"], "summary": "Get private key", "description": "Get details about a private key.", "operationId": "GetPrivateKey", @@ -845,9 +709,7 @@ }, "/public/v1/query/get_send_transaction_status": { "post": { - "tags": [ - "Send Transactions" - ], + "tags": ["Send Transactions"], "summary": "Get send transaction status", "description": "Get the status of a send transaction request.", "operationId": "GetSendTransactionStatus", @@ -877,9 +739,7 @@ }, "/public/v1/query/get_session_profile": { "post": { - "tags": [ - "Session Profiles" - ], + "tags": ["Session Profiles"], "summary": "Get session profile", "description": "Get a single session profile for an organization.", "operationId": "GetSessionProfile", @@ -909,9 +769,7 @@ }, "/public/v1/query/get_session_profiles": { "post": { - "tags": [ - "Session Profiles" - ], + "tags": ["Session Profiles"], "summary": "Get session profiles", "description": "Get all session profiles for an organization.", "operationId": "GetSessionProfiles", @@ -941,9 +799,7 @@ }, "/public/v1/query/get_smart_contract_interface": { "post": { - "tags": [ - "Policies" - ], + "tags": ["Policies"], "summary": "Get smart contract interface", "description": "Get details about a smart contract interface.", "operationId": "GetSmartContractInterface", @@ -973,9 +829,7 @@ }, "/public/v1/query/get_tvc_app": { "post": { - "tags": [ - "TVC" - ], + "tags": ["TVC"], "summary": "Get TVC App", "description": "Get details about a single TVC App", "operationId": "GetTvcApp", @@ -1005,9 +859,7 @@ }, "/public/v1/query/get_tvc_deployment": { "post": { - "tags": [ - "TVC" - ], + "tags": ["TVC"], "summary": "Get TVC Deployment", "description": "Get details about a single TVC Deployment", "operationId": "GetTvcDeployment", @@ -1037,9 +889,7 @@ }, "/public/v1/query/get_tvc_deployment_debug_logs": { "post": { - "tags": [ - "TVC" - ], + "tags": ["TVC"], "summary": "Get TVC Deployment debug logs", "description": "Get a bounded window of application logs from a debug-mode TVC deployment. Returned lines are collected from every running replica and sorted by platform timestamp.", "operationId": "GetTvcDeploymentDebugLogs", @@ -1069,9 +919,7 @@ }, "/public/v1/query/get_user": { "post": { - "tags": [ - "Users" - ], + "tags": ["Users"], "summary": "Get user", "description": "Get details about a user.", "operationId": "GetUser", @@ -1101,9 +949,7 @@ }, "/public/v1/query/get_wallet": { "post": { - "tags": [ - "Wallets" - ], + "tags": ["Wallets"], "summary": "Get wallet", "description": "Get details about a wallet.", "operationId": "GetWallet", @@ -1133,9 +979,7 @@ }, "/public/v1/query/get_wallet_account": { "post": { - "tags": [ - "Wallets" - ], + "tags": ["Wallets"], "summary": "Get wallet account", "description": "Get a single wallet account.", "operationId": "GetWalletAccount", @@ -1165,9 +1009,7 @@ }, "/public/v1/query/get_wallet_address_balances": { "post": { - "tags": [ - "Wallets" - ], + "tags": ["Wallets"], "summary": "Get balances", "description": "Get balances of supported assets for an address on the specified network. Only non-zero balances are returned.", "operationId": "GetWalletAddressBalances", @@ -1197,9 +1039,7 @@ }, "/public/v1/query/list_activities": { "post": { - "tags": [ - "Activities" - ], + "tags": ["Activities"], "summary": "List activities", "description": "List all activities within an organization.", "operationId": "GetActivities", @@ -1229,9 +1069,7 @@ }, "/public/v1/query/list_app_proofs": { "post": { - "tags": [ - "App Proof" - ], + "tags": ["App Proof"], "summary": "List App Proofs for an activity", "description": "List the App Proofs for the given activity.", "operationId": "GetAppProofs", @@ -1259,107 +1097,9 @@ } } }, - "/public/v1/query/list_earn_enabled_vaults": { - "post": { - "tags": [ - "Earn" - ], - "summary": "Get Earn enabled vaults", - "description": "Get the organization's deployed wrappers with on-chain total deposited and live APY. The management view, distinct from per-wallet positions.", - "operationId": "ListEarnEnabledVaults", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ListEarnEnabledVaultsRequest" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "A successful response.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ListEarnEnabledVaultsResponse" - } - } - } - } - } - } - }, - "/public/v1/query/list_earn_positions": { - "post": { - "tags": [ - "Earn" - ], - "summary": "Get Earn positions", - "description": "Get the active Earn positions for a specific wallet, including current value, cost basis, yield, and projected fees.", - "operationId": "ListEarnPositions", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ListEarnPositionsRequest" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "A successful response.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ListEarnPositionsResponse" - } - } - } - } - } - } - }, - "/public/v1/query/list_earn_vaults": { - "post": { - "tags": [ - "Earn" - ], - "summary": "Get Earn vault catalog", - "description": "Get the catalog of all wrappable yield vaults across supported chains, enriched with live TVL and APY. Annotates which vaults the organization has already enabled.", - "operationId": "ListEarnVaults", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ListEarnVaultsRequest" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "A successful response.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ListEarnVaultsResponse" - } - } - } - } - } - } - }, "/public/v1/query/list_fiat_on_ramp_credentials": { "post": { - "tags": [ - "On Ramp" - ], + "tags": ["On Ramp"], "summary": "List Fiat On Ramp Credentials", "description": "List all fiat on ramp provider credentials within an organization.", "operationId": "ListFiatOnRampCredentials", @@ -1389,9 +1129,7 @@ }, "/public/v1/query/list_oauth2_credentials": { "post": { - "tags": [ - "User Auth" - ], + "tags": ["User Auth"], "summary": "List OAuth 2.0 Credentials", "description": "List all OAuth 2.0 credentials within an organization.", "operationId": "ListOauth2Credentials", @@ -1421,9 +1159,7 @@ }, "/public/v1/query/list_policies": { "post": { - "tags": [ - "Policies" - ], + "tags": ["Policies"], "summary": "List policies", "description": "List all policies within an organization.", "operationId": "GetPolicies", @@ -1453,9 +1189,7 @@ }, "/public/v1/query/list_private_key_tags": { "post": { - "tags": [ - "Private Key Tags" - ], + "tags": ["Private Key Tags"], "summary": "List private key tags", "description": "List all private key tags within an organization.", "operationId": "ListPrivateKeyTags", @@ -1485,9 +1219,7 @@ }, "/public/v1/query/list_private_keys": { "post": { - "tags": [ - "Private Keys" - ], + "tags": ["Private Keys"], "summary": "List private keys", "description": "List all private keys within an organization.", "operationId": "GetPrivateKeys", @@ -1517,9 +1249,7 @@ }, "/public/v1/query/list_smart_contract_interfaces": { "post": { - "tags": [ - "Policies" - ], + "tags": ["Policies"], "summary": "List smart contract interfaces", "description": "List all smart contract interfaces within an organization.", "operationId": "GetSmartContractInterfaces", @@ -1549,9 +1279,7 @@ }, "/public/v1/query/list_suborgs": { "post": { - "tags": [ - "Organizations" - ], + "tags": ["Organizations"], "summary": "Get sub-organizations", "description": "Get all suborg IDs associated given a parent org ID and an optional filter.", "operationId": "GetSubOrgIds", @@ -1581,9 +1309,7 @@ }, "/public/v1/query/list_supported_assets": { "post": { - "tags": [ - "Wallets" - ], + "tags": ["Wallets"], "summary": "List supported assets", "description": "List supported assets for the specified network.", "operationId": "ListSupportedAssets", @@ -1613,9 +1339,7 @@ }, "/public/v1/query/list_tvc_app_deployments": { "post": { - "tags": [ - "TVC" - ], + "tags": ["TVC"], "summary": "List TVC Deployments", "description": "List all deployments for a given TVC App", "operationId": "GetTvcAppDeployments", @@ -1645,9 +1369,7 @@ }, "/public/v1/query/list_tvc_apps": { "post": { - "tags": [ - "TVC" - ], + "tags": ["TVC"], "summary": "List TVC Apps", "description": "List all TVC Apps within an organization.", "operationId": "GetTvcApps", @@ -1677,9 +1399,7 @@ }, "/public/v1/query/list_user_tags": { "post": { - "tags": [ - "User Tags" - ], + "tags": ["User Tags"], "summary": "List user tags", "description": "List all user tags within an organization.", "operationId": "ListUserTags", @@ -1709,9 +1429,7 @@ }, "/public/v1/query/list_users": { "post": { - "tags": [ - "Users" - ], + "tags": ["Users"], "summary": "List users", "description": "List all users within an organization.", "operationId": "GetUsers", @@ -1741,9 +1459,7 @@ }, "/public/v1/query/list_verified_suborgs": { "post": { - "tags": [ - "Organizations" - ], + "tags": ["Organizations"], "summary": "Get verified sub-organizations", "description": "Get all email or phone verified suborg IDs associated given a parent org ID.", "operationId": "GetVerifiedSubOrgIds", @@ -1773,9 +1489,7 @@ }, "/public/v1/query/list_wallet_accounts": { "post": { - "tags": [ - "Wallets" - ], + "tags": ["Wallets"], "summary": "List wallets accounts", "description": "List all accounts within a wallet.", "operationId": "GetWalletAccounts", @@ -1805,9 +1519,7 @@ }, "/public/v1/query/list_wallets": { "post": { - "tags": [ - "Wallets" - ], + "tags": ["Wallets"], "summary": "List wallets", "description": "List all wallets within an organization.", "operationId": "GetWallets", @@ -1837,9 +1549,7 @@ }, "/public/v1/query/list_webhook_endpoints": { "post": { - "tags": [ - "Organizations" - ], + "tags": ["Organizations"], "summary": "List webhook endpoints", "description": "List webhook endpoints within an organization.", "operationId": "ListWebhookEndpoints", @@ -1869,9 +1579,7 @@ }, "/public/v1/query/validate_tvc_image": { "post": { - "tags": [ - "TVC" - ], + "tags": ["TVC"], "summary": "Validate Container Image for TVC", "description": "Validate a container image URL and pull secret for TVC deployment", "operationId": "ValidateTvcImage", @@ -1901,9 +1609,7 @@ }, "/public/v1/query/whoami": { "post": { - "tags": [ - "Sessions" - ], + "tags": ["Sessions"], "summary": "Who am I?", "description": "Get basic information about your current API or WebAuthN user and their organization. Affords sub-organization look ups via parent organization for WebAuthN or API key users.", "operationId": "GetWhoami", @@ -1933,9 +1639,7 @@ }, "/public/v1/submit/approve_activity": { "post": { - "tags": [ - "Consensus" - ], + "tags": ["Consensus"], "summary": "Approve activity", "description": "Approve an activity.", "operationId": "ApproveActivity", @@ -1963,43 +1667,9 @@ } } }, - "/public/v1/submit/claim_earn_fees": { - "post": { - "tags": [ - "Earn" - ], - "summary": "Claim earn fees", - "description": "Claim earn fees through the activity pipeline.", - "operationId": "ClaimEarnFees", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ClaimEarnFeesRequest" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "A successful response.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ActivityResponse" - } - } - } - } - } - } - }, "/public/v1/submit/create_api_keys": { "post": { - "tags": [ - "API Keys" - ], + "tags": ["API Keys"], "summary": "Create API keys", "description": "Add API keys to an existing user.", "operationId": "CreateApiKeys", @@ -2029,9 +1699,7 @@ }, "/public/v1/submit/create_authenticators": { "post": { - "tags": [ - "Authenticators" - ], + "tags": ["Authenticators"], "summary": "Create authenticators", "description": "Create authenticators to authenticate requests to Turnkey.", "operationId": "CreateAuthenticators", @@ -2061,9 +1729,7 @@ }, "/public/v1/submit/create_fiat_on_ramp_credential": { "post": { - "tags": [ - "On Ramp" - ], + "tags": ["On Ramp"], "summary": "Create a Fiat On Ramp Credential", "description": "Create a fiat on ramp provider credential", "operationId": "CreateFiatOnRampCredential", @@ -2093,9 +1759,7 @@ }, "/public/v1/submit/create_invitations": { "post": { - "tags": [ - "Invitations" - ], + "tags": ["Invitations"], "summary": "Create invitations", "description": "Create invitations to join an existing organization.", "operationId": "CreateInvitations", @@ -2125,9 +1789,7 @@ }, "/public/v1/submit/create_mfa_policy": { "post": { - "tags": [ - "MFA Policies" - ], + "tags": ["MFA Policies"], "summary": "Create MFA policy", "description": "Create a new MFA policy for a user.", "operationId": "CreateMfaPolicy", @@ -2157,9 +1819,7 @@ }, "/public/v1/submit/create_oauth2_credential": { "post": { - "tags": [ - "User Auth" - ], + "tags": ["User Auth"], "summary": "Create an OAuth 2.0 Credential", "description": "Enable authentication for end users with an OAuth 2.0 provider", "operationId": "CreateOauth2Credential", @@ -2189,9 +1849,7 @@ }, "/public/v1/submit/create_oauth_providers": { "post": { - "tags": [ - "User Auth" - ], + "tags": ["User Auth"], "summary": "Create Oauth providers", "description": "Create Oauth providers for a specified user.", "operationId": "CreateOauthProviders", @@ -2221,9 +1879,7 @@ }, "/public/v1/submit/create_policies": { "post": { - "tags": [ - "Policies" - ], + "tags": ["Policies"], "summary": "Create policies", "description": "Create new policies.", "operationId": "CreatePolicies", @@ -2253,9 +1909,7 @@ }, "/public/v1/submit/create_policy": { "post": { - "tags": [ - "Policies" - ], + "tags": ["Policies"], "summary": "Create policy", "description": "Create a new policy.", "operationId": "CreatePolicy", @@ -2285,9 +1939,7 @@ }, "/public/v1/submit/create_private_key_tag": { "post": { - "tags": [ - "Private Key Tags" - ], + "tags": ["Private Key Tags"], "summary": "Create private key tag", "description": "Create a private key tag and add it to private keys.", "operationId": "CreatePrivateKeyTag", @@ -2317,9 +1969,7 @@ }, "/public/v1/submit/create_private_keys": { "post": { - "tags": [ - "Private Keys" - ], + "tags": ["Private Keys"], "summary": "Create private keys", "description": "Create new private keys.", "operationId": "CreatePrivateKeys", @@ -2349,9 +1999,7 @@ }, "/public/v1/submit/create_read_only_session": { "post": { - "tags": [ - "Sessions" - ], + "tags": ["Sessions"], "summary": "Create read only session", "description": "Create a read only session for a user (valid for 1 hour).", "operationId": "CreateReadOnlySession", @@ -2381,9 +2029,7 @@ }, "/public/v1/submit/create_read_write_session": { "post": { - "tags": [ - "Sessions" - ], + "tags": ["Sessions"], "summary": "Create read write session", "description": "Create a read write session for a user.", "operationId": "CreateReadWriteSession", @@ -2413,9 +2059,7 @@ }, "/public/v1/submit/create_session_profile": { "post": { - "tags": [ - "Session Profiles" - ], + "tags": ["Session Profiles"], "summary": "Create session profile", "description": "Create a new session profile for an organization.", "operationId": "CreateSessionProfile", @@ -2445,9 +2089,7 @@ }, "/public/v1/submit/create_smart_contract_interface": { "post": { - "tags": [ - "Policies" - ], + "tags": ["Policies"], "summary": "Create smart contract interface", "description": "Create an ABI/IDL in JSON.", "operationId": "CreateSmartContractInterface", @@ -2477,9 +2119,7 @@ }, "/public/v1/submit/create_sub_organization": { "post": { - "tags": [ - "Organizations" - ], + "tags": ["Organizations"], "summary": "Create sub-organization", "description": "Create a new sub-organization.", "operationId": "CreateSubOrganization", @@ -2509,9 +2149,7 @@ }, "/public/v1/submit/create_tvc_app": { "post": { - "tags": [ - "TVC" - ], + "tags": ["TVC"], "summary": "Create a TVC App", "description": "Create a new TVC application", "operationId": "CreateTvcApp", @@ -2541,9 +2179,7 @@ }, "/public/v1/submit/create_tvc_deployment": { "post": { - "tags": [ - "TVC" - ], + "tags": ["TVC"], "summary": "Create a TVC Deployment", "description": "Create a new TVC Deployment", "operationId": "CreateTvcDeployment", @@ -2573,9 +2209,7 @@ }, "/public/v1/submit/create_tvc_manifest_approvals": { "post": { - "tags": [ - "TVC" - ], + "tags": ["TVC"], "summary": "Create TVC Manifest Approvals", "description": "Post one or more manifest approvals for a TVC Manifest", "operationId": "CreateTvcManifestApprovals", @@ -2605,9 +2239,7 @@ }, "/public/v1/submit/create_user_tag": { "post": { - "tags": [ - "User Tags" - ], + "tags": ["User Tags"], "summary": "Create user tag", "description": "Create a user tag and add it to users.", "operationId": "CreateUserTag", @@ -2637,9 +2269,7 @@ }, "/public/v1/submit/create_users": { "post": { - "tags": [ - "Users" - ], + "tags": ["Users"], "summary": "Create users", "description": "Create users in an existing organization.", "operationId": "CreateUsers", @@ -2669,9 +2299,7 @@ }, "/public/v1/submit/create_wallet": { "post": { - "tags": [ - "Wallets" - ], + "tags": ["Wallets"], "summary": "Create wallet", "description": "Create a wallet and derive addresses.", "operationId": "CreateWallet", @@ -2701,9 +2329,7 @@ }, "/public/v1/submit/create_wallet_accounts": { "post": { - "tags": [ - "Wallets" - ], + "tags": ["Wallets"], "summary": "Create wallet accounts", "description": "Derive additional addresses using an existing wallet.", "operationId": "CreateWalletAccounts", @@ -2733,9 +2359,7 @@ }, "/public/v1/submit/create_webhook_endpoint": { "post": { - "tags": [ - "Organizations" - ], + "tags": ["Organizations"], "summary": "Create webhook endpoint", "description": "Create a webhook endpoint for an organization.", "operationId": "CreateWebhookEndpoint", @@ -2765,9 +2389,7 @@ }, "/public/v1/submit/delete_api_keys": { "post": { - "tags": [ - "API Keys" - ], + "tags": ["API Keys"], "summary": "Delete API keys", "description": "Remove api keys from a user.", "operationId": "DeleteApiKeys", @@ -2797,9 +2419,7 @@ }, "/public/v1/submit/delete_authenticators": { "post": { - "tags": [ - "Authenticators" - ], + "tags": ["Authenticators"], "summary": "Delete authenticators", "description": "Remove authenticators from a user.", "operationId": "DeleteAuthenticators", @@ -2829,9 +2449,7 @@ }, "/public/v1/submit/delete_fiat_on_ramp_credential": { "post": { - "tags": [ - "On Ramp" - ], + "tags": ["On Ramp"], "summary": "Delete a Fiat On Ramp Credential", "description": "Delete a fiat on ramp provider credential", "operationId": "DeleteFiatOnRampCredential", @@ -2861,9 +2479,7 @@ }, "/public/v1/submit/delete_invitation": { "post": { - "tags": [ - "Invitations" - ], + "tags": ["Invitations"], "summary": "Delete invitation", "description": "Delete an existing invitation.", "operationId": "DeleteInvitation", @@ -2893,9 +2509,7 @@ }, "/public/v1/submit/delete_mfa_policy": { "post": { - "tags": [ - "MFA Policies" - ], + "tags": ["MFA Policies"], "summary": "Delete MFA policy", "description": "Delete an MFA policy for a user.", "operationId": "DeleteMfaPolicy", @@ -2925,9 +2539,7 @@ }, "/public/v1/submit/delete_oauth2_credential": { "post": { - "tags": [ - "User Auth" - ], + "tags": ["User Auth"], "summary": "Delete an OAuth 2.0 Credential", "description": "Disable authentication for end users with an OAuth 2.0 provider", "operationId": "DeleteOauth2Credential", @@ -2957,9 +2569,7 @@ }, "/public/v1/submit/delete_oauth_providers": { "post": { - "tags": [ - "User Auth" - ], + "tags": ["User Auth"], "summary": "Delete Oauth providers", "description": "Remove Oauth providers for a specified user.", "operationId": "DeleteOauthProviders", @@ -2989,9 +2599,7 @@ }, "/public/v1/submit/delete_policies": { "post": { - "tags": [ - "Policies" - ], + "tags": ["Policies"], "summary": "Delete policies", "description": "Delete existing policies.", "operationId": "DeletePolicies", @@ -3021,9 +2629,7 @@ }, "/public/v1/submit/delete_policy": { "post": { - "tags": [ - "Policies" - ], + "tags": ["Policies"], "summary": "Delete policy", "description": "Delete an existing policy.", "operationId": "DeletePolicy", @@ -3053,9 +2659,7 @@ }, "/public/v1/submit/delete_private_key_tags": { "post": { - "tags": [ - "Private Key Tags" - ], + "tags": ["Private Key Tags"], "summary": "Delete private key tags", "description": "Delete private key tags within an organization.", "operationId": "DeletePrivateKeyTags", @@ -3085,9 +2689,7 @@ }, "/public/v1/submit/delete_private_keys": { "post": { - "tags": [ - "Private Keys" - ], + "tags": ["Private Keys"], "summary": "Delete private keys", "description": "Delete private keys for an organization.", "operationId": "DeletePrivateKeys", @@ -3117,9 +2719,7 @@ }, "/public/v1/submit/delete_smart_contract_interface": { "post": { - "tags": [ - "Policies" - ], + "tags": ["Policies"], "summary": "Delete smart contract interface", "description": "Delete a smart contract interface.", "operationId": "DeleteSmartContractInterface", @@ -3149,9 +2749,7 @@ }, "/public/v1/submit/delete_sub_organization": { "post": { - "tags": [ - "Organizations" - ], + "tags": ["Organizations"], "summary": "Delete sub-organization", "description": "Delete a sub-organization.", "operationId": "DeleteSubOrganization", @@ -3181,9 +2779,7 @@ }, "/public/v1/submit/delete_tvc_app_and_deployments": { "post": { - "tags": [ - "TVC" - ], + "tags": ["TVC"], "summary": "Delete a TVC App and all of its deployments", "description": "Delete a TVC App and all of its deployments", "operationId": "DeleteTvcAppAndDeployments", @@ -3213,9 +2809,7 @@ }, "/public/v1/submit/delete_tvc_deployment": { "post": { - "tags": [ - "TVC" - ], + "tags": ["TVC"], "summary": "Delete a TVC Deployment", "description": "Delete a TVC Deployment", "operationId": "DeleteTvcDeployment", @@ -3245,9 +2839,7 @@ }, "/public/v1/submit/delete_user_tags": { "post": { - "tags": [ - "User Tags" - ], + "tags": ["User Tags"], "summary": "Delete user tags", "description": "Delete user tags within an organization.", "operationId": "DeleteUserTags", @@ -3277,9 +2869,7 @@ }, "/public/v1/submit/delete_users": { "post": { - "tags": [ - "Users" - ], + "tags": ["Users"], "summary": "Delete users", "description": "Delete users within an organization.", "operationId": "DeleteUsers", @@ -3309,9 +2899,7 @@ }, "/public/v1/submit/delete_wallet_accounts": { "post": { - "tags": [ - "Wallets" - ], + "tags": ["Wallets"], "summary": "Delete wallet accounts", "description": "Delete wallet accounts for an organization.", "operationId": "DeleteWalletAccounts", @@ -3341,9 +2929,7 @@ }, "/public/v1/submit/delete_wallets": { "post": { - "tags": [ - "Wallets" - ], + "tags": ["Wallets"], "summary": "Delete wallets", "description": "Delete wallets for an organization.", "operationId": "DeleteWallets", @@ -3373,9 +2959,7 @@ }, "/public/v1/submit/delete_webhook_endpoint": { "post": { - "tags": [ - "Organizations" - ], + "tags": ["Organizations"], "summary": "Delete webhook endpoint", "description": "Delete a webhook endpoint for an organization.", "operationId": "DeleteWebhookEndpoint", @@ -3403,19 +2987,17 @@ } } }, - "/public/v1/submit/earn_deploy_wrapper": { + "/public/v1/submit/email_auth": { "post": { - "tags": [ - "Earn" - ], - "summary": "Deploy Earn wrapper", - "description": "Enable a yield vault for an organization by deploying its fee wrapper. Must be called before any deposits into the vault.", - "operationId": "EarnDeployWrapper", + "tags": ["User Auth"], + "summary": "Perform email auth", + "description": "Authenticate a user via email.", + "operationId": "EmailAuth", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EarnDeployWrapperRequest" + "$ref": "#/components/schemas/EmailAuthRequest" } } }, @@ -3435,19 +3017,17 @@ } } }, - "/public/v1/submit/earn_deposit": { + "/public/v1/submit/eth_send_transaction": { "post": { - "tags": [ - "Earn" - ], - "summary": "Deposit into Earn vault", - "description": "Deposit assets from a wallet into an enabled yield vault.", - "operationId": "EarnDeposit", + "tags": ["Broadcasting"], + "summary": "Broadcast EVM transaction", + "description": "Submit a transaction intent describing an EVM transaction you would like to broadcast.", + "operationId": "EthSendTransaction", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EarnDepositRequest" + "$ref": "#/components/schemas/EthSendTransactionRequest" } } }, @@ -3467,19 +3047,17 @@ } } }, - "/public/v1/submit/earn_set_wrapper_state": { + "/public/v1/submit/export_private_key": { "post": { - "tags": [ - "Earn" - ], - "summary": "Set Earn wrapper state", - "description": "Enable or disable deposits to a deployed Earn wrapper. Withdrawals are always allowed.", - "operationId": "EarnSetWrapperState", + "tags": ["Private Keys"], + "summary": "Export private key", + "description": "Export a private key.", + "operationId": "ExportPrivateKey", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EarnSetWrapperStateRequest" + "$ref": "#/components/schemas/ExportPrivateKeyRequest" } } }, @@ -3499,19 +3077,17 @@ } } }, - "/public/v1/submit/earn_withdraw": { + "/public/v1/submit/export_wallet": { "post": { - "tags": [ - "Earn" - ], - "summary": "Withdraw from Earn vault", - "description": "Withdraw assets or redeem shares from an enabled yield vault.", - "operationId": "EarnWithdraw", + "tags": ["Wallets"], + "summary": "Export wallet", + "description": "Export a wallet.", + "operationId": "ExportWallet", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EarnWithdrawRequest" + "$ref": "#/components/schemas/ExportWalletRequest" } } }, @@ -3531,19 +3107,17 @@ } } }, - "/public/v1/submit/email_auth": { + "/public/v1/submit/export_wallet_account": { "post": { - "tags": [ - "User Auth" - ], - "summary": "Perform email auth", - "description": "Authenticate a user via email.", - "operationId": "EmailAuth", + "tags": ["Wallets"], + "summary": "Export wallet account", + "description": "Export a wallet account.", + "operationId": "ExportWalletAccount", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EmailAuthRequest" + "$ref": "#/components/schemas/ExportWalletAccountRequest" } } }, @@ -3563,139 +3137,9 @@ } } }, - "/public/v1/submit/eth_send_transaction": { + "/public/v1/submit/import_private_key": { "post": { - "tags": [ - "Broadcasting" - ], - "summary": "Broadcast EVM transaction", - "description": "Submit a transaction intent describing an EVM transaction you would like to broadcast.", - "operationId": "EthSendTransaction", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EthSendTransactionRequest" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "A successful response.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ActivityResponse" - } - } - } - } - } - } - }, - "/public/v1/submit/export_private_key": { - "post": { - "tags": [ - "Private Keys" - ], - "summary": "Export private key", - "description": "Export a private key.", - "operationId": "ExportPrivateKey", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ExportPrivateKeyRequest" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "A successful response.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ActivityResponse" - } - } - } - } - } - } - }, - "/public/v1/submit/export_wallet": { - "post": { - "tags": [ - "Wallets" - ], - "summary": "Export wallet", - "description": "Export a wallet.", - "operationId": "ExportWallet", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ExportWalletRequest" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "A successful response.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ActivityResponse" - } - } - } - } - } - } - }, - "/public/v1/submit/export_wallet_account": { - "post": { - "tags": [ - "Wallets" - ], - "summary": "Export wallet account", - "description": "Export a wallet account.", - "operationId": "ExportWalletAccount", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ExportWalletAccountRequest" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "A successful response.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ActivityResponse" - } - } - } - } - } - } - }, - "/public/v1/submit/import_private_key": { - "post": { - "tags": [ - "Private Keys" - ], + "tags": ["Private Keys"], "summary": "Import private key", "description": "Import a private key.", "operationId": "ImportPrivateKey", @@ -3725,9 +3169,7 @@ }, "/public/v1/submit/import_wallet": { "post": { - "tags": [ - "Wallets" - ], + "tags": ["Wallets"], "summary": "Import wallet", "description": "Import a wallet.", "operationId": "ImportWallet", @@ -3757,9 +3199,7 @@ }, "/public/v1/submit/init_fiat_on_ramp": { "post": { - "tags": [ - "On Ramp" - ], + "tags": ["On Ramp"], "summary": "Init fiat on ramp", "description": "Initiate a fiat on ramp flow.", "operationId": "InitFiatOnRamp", @@ -3789,9 +3229,7 @@ }, "/public/v1/submit/init_import_private_key": { "post": { - "tags": [ - "Private Keys" - ], + "tags": ["Private Keys"], "summary": "Init import private key", "description": "Initialize a new private key import.", "operationId": "InitImportPrivateKey", @@ -3821,9 +3259,7 @@ }, "/public/v1/submit/init_import_wallet": { "post": { - "tags": [ - "Wallets" - ], + "tags": ["Wallets"], "summary": "Init import wallet", "description": "Initialize a new wallet import.", "operationId": "InitImportWallet", @@ -3853,9 +3289,7 @@ }, "/public/v1/submit/init_otp": { "post": { - "tags": [ - "User Verification" - ], + "tags": ["User Verification"], "summary": "Init generic OTP", "description": "Initiate a generic OTP activity.", "operationId": "InitOtp", @@ -3885,9 +3319,7 @@ }, "/public/v1/submit/init_otp_auth": { "post": { - "tags": [ - "User Auth" - ], + "tags": ["User Auth"], "summary": "Init OTP auth", "description": "Initiate an OTP auth activity.", "operationId": "InitOtpAuth", @@ -3917,9 +3349,7 @@ }, "/public/v1/submit/init_user_email_recovery": { "post": { - "tags": [ - "User Recovery" - ], + "tags": ["User Recovery"], "summary": "Init email recovery", "description": "Initialize a new email recovery.", "operationId": "InitUserEmailRecovery", @@ -3949,9 +3379,7 @@ }, "/public/v1/submit/oauth": { "post": { - "tags": [ - "User Auth" - ], + "tags": ["User Auth"], "summary": "Oauth", "description": "Authenticate a user with an OIDC token (Oauth).", "operationId": "Oauth", @@ -3981,9 +3409,7 @@ }, "/public/v1/submit/oauth2_authenticate": { "post": { - "tags": [ - "User Auth" - ], + "tags": ["User Auth"], "summary": "OAuth 2.0 authentication", "description": "Authenticate a user with an OAuth 2.0 provider and receive an OIDC token to use with the LoginWithOAuth or CreateSubOrganization activities", "operationId": "Oauth2Authenticate", @@ -4013,9 +3439,7 @@ }, "/public/v1/submit/oauth_login": { "post": { - "tags": [ - "Sessions" - ], + "tags": ["Sessions"], "summary": "Login with Oauth", "description": "Create an Oauth session for a user.", "operationId": "OauthLogin", @@ -4045,9 +3469,7 @@ }, "/public/v1/submit/otp_auth": { "post": { - "tags": [ - "User Auth" - ], + "tags": ["User Auth"], "summary": "OTP auth", "description": "Authenticate a user with an OTP code sent via email or SMS.", "operationId": "OtpAuth", @@ -4077,9 +3499,7 @@ }, "/public/v1/submit/otp_login": { "post": { - "tags": [ - "Sessions" - ], + "tags": ["Sessions"], "summary": "Login with OTP", "description": "Create an OTP session for a user.", "operationId": "OtpLogin", @@ -4109,9 +3529,7 @@ }, "/public/v1/submit/recover_user": { "post": { - "tags": [ - "User Recovery" - ], + "tags": ["User Recovery"], "summary": "Recover a user", "description": "Complete the process of recovering a user by adding an authenticator.", "operationId": "RecoverUser", @@ -4141,9 +3559,7 @@ }, "/public/v1/submit/reject_activity": { "post": { - "tags": [ - "Consensus" - ], + "tags": ["Consensus"], "summary": "Reject activity", "description": "Reject an activity.", "operationId": "RejectActivity", @@ -4173,9 +3589,7 @@ }, "/public/v1/submit/remove_ip_allowlist": { "post": { - "tags": [ - "IP Allowlist" - ], + "tags": ["IP Allowlist"], "summary": "Remove IP Allowlist", "description": "Delete IP allowlist and all associated rules for organization or API key. After removal, access will be determined by organization-level allowlist (for API keys) or allowed from all IPs (for organizations).", "operationId": "RemoveIpAllowlist", @@ -4205,9 +3619,7 @@ }, "/public/v1/submit/remove_organization_feature": { "post": { - "tags": [ - "Features" - ], + "tags": ["Features"], "summary": "Remove organization feature", "description": "Remove an organization feature. This activity must be approved by the current root quorum.", "operationId": "RemoveOrganizationFeature", @@ -4237,9 +3649,7 @@ }, "/public/v1/submit/restore_tvc_deployment": { "post": { - "tags": [ - "TVC" - ], + "tags": ["TVC"], "summary": "Restore a TVC Deployment", "description": "Restore a deleted TVC Deployment", "operationId": "RestoreTvcDeployment", @@ -4269,9 +3679,7 @@ }, "/public/v1/submit/set_ip_allowlist": { "post": { - "tags": [ - "IP Allowlist" - ], + "tags": ["IP Allowlist"], "summary": "Set IP Allowlist", "description": "Create or update IP allowlist and rules for organization or API key. The IP allowlist restricts API access to specific CIDR blocks. Organization-level allowlists apply to all API keys unless overridden by a key-specific allowlist.", "operationId": "SetIpAllowlist", @@ -4301,9 +3709,7 @@ }, "/public/v1/submit/set_organization_feature": { "post": { - "tags": [ - "Features" - ], + "tags": ["Features"], "summary": "Set organization feature", "description": "Set an organization feature. This activity must be approved by the current root quorum.", "operationId": "SetOrganizationFeature", @@ -4333,9 +3739,7 @@ }, "/public/v1/submit/set_tvc_app_live_deployment": { "post": { - "tags": [ - "TVC" - ], + "tags": ["TVC"], "summary": "Set TVC App live deployment", "description": "Set the live deployment for a TVC App", "operationId": "UpdateTvcAppLiveDeployment", @@ -4365,9 +3769,7 @@ }, "/public/v1/submit/sign_raw_payload": { "post": { - "tags": [ - "Signing" - ], + "tags": ["Signing"], "summary": "Sign raw payload", "description": "Sign a raw payload.", "operationId": "SignRawPayload", @@ -4397,9 +3799,7 @@ }, "/public/v1/submit/sign_raw_payloads": { "post": { - "tags": [ - "Signing" - ], + "tags": ["Signing"], "summary": "Sign raw payloads", "description": "Sign multiple raw payloads with the same signing parameters.", "operationId": "SignRawPayloads", @@ -4429,9 +3829,7 @@ }, "/public/v1/submit/sign_transaction": { "post": { - "tags": [ - "Signing" - ], + "tags": ["Signing"], "summary": "Sign transaction", "description": "Sign a transaction.", "operationId": "SignTransaction", @@ -4461,9 +3859,7 @@ }, "/public/v1/submit/sol_send_transaction": { "post": { - "tags": [ - "Broadcasting" - ], + "tags": ["Broadcasting"], "summary": "Broadcast SVM transaction", "description": "Submit a transaction intent describing an SVM transaction you would like to broadcast.", "operationId": "SolSendTransaction", @@ -4493,9 +3889,7 @@ }, "/public/v1/submit/spark_claim_transfer": { "post": { - "tags": [ - "Signing" - ], + "tags": ["Signing"], "summary": "Claim Spark transfer", "description": "Construct receiver-side encrypted operator packages to claim a Spark transfer. Does not perform FROST signing.", "operationId": "SparkClaimTransfer", @@ -4525,9 +3919,7 @@ }, "/public/v1/submit/spark_prepare_lightning_receive": { "post": { - "tags": [ - "Signing" - ], + "tags": ["Signing"], "summary": "Spark prepare Lightning receive", "description": "Generate a Lightning preimage and distribute Feldman shares to operators for a Spark Lightning receive. Does not perform FROST signing.", "operationId": "SparkPrepareLightningReceive", @@ -4557,9 +3949,7 @@ }, "/public/v1/submit/spark_prepare_transfer": { "post": { - "tags": [ - "Signing" - ], + "tags": ["Signing"], "summary": "Prepare Spark transfer", "description": "Construct sender-side encrypted operator packages for a Spark BTC transfer. Does not perform FROST signing.", "operationId": "SparkPrepareTransfer", @@ -4589,9 +3979,7 @@ }, "/public/v1/submit/spark_sign_frost": { "post": { - "tags": [ - "Signing" - ], + "tags": ["Signing"], "summary": "Sign Frost Spark", "description": "Perform pure FROST partial signing for a Spark wallet. Produces partial signatures without constructing operator packages.", "operationId": "SparkSignFrost", @@ -4621,9 +4009,7 @@ }, "/public/v1/submit/stamp_login": { "post": { - "tags": [ - "Sessions" - ], + "tags": ["Sessions"], "summary": "Login with a stamp", "description": "Create a session for a user through stamping client side (API key, wallet client, or passkey client).", "operationId": "StampLogin", @@ -4653,9 +4039,7 @@ }, "/public/v1/submit/update_fiat_on_ramp_credential": { "post": { - "tags": [ - "On Ramp" - ], + "tags": ["On Ramp"], "summary": "Update a Fiat On Ramp Credential", "description": "Update a fiat on ramp provider credential", "operationId": "UpdateFiatOnRampCredential", @@ -4685,9 +4069,7 @@ }, "/public/v1/submit/update_mfa_policy": { "post": { - "tags": [ - "MFA Policies" - ], + "tags": ["MFA Policies"], "summary": "Update MFA policy", "description": "Update an MFA policy for a user.", "operationId": "UpdateMfaPolicy", @@ -4717,9 +4099,7 @@ }, "/public/v1/submit/update_oauth2_credential": { "post": { - "tags": [ - "User Auth" - ], + "tags": ["User Auth"], "summary": "Update an OAuth 2.0 Credential", "description": "Update an OAuth 2.0 provider credential", "operationId": "UpdateOauth2Credential", @@ -4749,9 +4129,7 @@ }, "/public/v1/submit/update_organization_name": { "post": { - "tags": [ - "Organizations" - ], + "tags": ["Organizations"], "summary": "Update organization name", "description": "Update the name of an organization.", "operationId": "UpdateOrganizationName", @@ -4781,9 +4159,7 @@ }, "/public/v1/submit/update_policy": { "post": { - "tags": [ - "Policies" - ], + "tags": ["Policies"], "summary": "Update policy", "description": "Update an existing policy.", "operationId": "UpdatePolicy", @@ -4813,9 +4189,7 @@ }, "/public/v1/submit/update_private_key_tag": { "post": { - "tags": [ - "Private Key Tags" - ], + "tags": ["Private Key Tags"], "summary": "Update private key tag", "description": "Update human-readable name or associated private keys. Note that this activity is atomic: all of the updates will succeed at once, or all of them will fail.", "operationId": "UpdatePrivateKeyTag", @@ -4845,9 +4219,7 @@ }, "/public/v1/submit/update_root_quorum": { "post": { - "tags": [ - "Organizations" - ], + "tags": ["Organizations"], "summary": "Update root quorum", "description": "Set the threshold and members of the root quorum. This activity must be approved by the current root quorum.", "operationId": "UpdateRootQuorum", @@ -4877,9 +4249,7 @@ }, "/public/v1/submit/update_user": { "post": { - "tags": [ - "Users" - ], + "tags": ["Users"], "summary": "Update user", "description": "Update a user in an existing organization.", "operationId": "UpdateUser", @@ -4909,9 +4279,7 @@ }, "/public/v1/submit/update_user_email": { "post": { - "tags": [ - "Users" - ], + "tags": ["Users"], "summary": "Update user's email", "description": "Update a user's email in an existing organization.", "operationId": "UpdateUserEmail", @@ -4941,9 +4309,7 @@ }, "/public/v1/submit/update_user_name": { "post": { - "tags": [ - "Users" - ], + "tags": ["Users"], "summary": "Update user's name", "description": "Update a user's name in an existing organization.", "operationId": "UpdateUserName", @@ -4973,9 +4339,7 @@ }, "/public/v1/submit/update_user_phone_number": { "post": { - "tags": [ - "Users" - ], + "tags": ["Users"], "summary": "Update user's phone number", "description": "Update a user's phone number in an existing organization.", "operationId": "UpdateUserPhoneNumber", @@ -5005,9 +4369,7 @@ }, "/public/v1/submit/update_user_tag": { "post": { - "tags": [ - "User Tags" - ], + "tags": ["User Tags"], "summary": "Update user tag", "description": "Update human-readable name or associated users. Note that this activity is atomic: all of the updates will succeed at once, or all of them will fail.", "operationId": "UpdateUserTag", @@ -5037,9 +4399,7 @@ }, "/public/v1/submit/update_wallet": { "post": { - "tags": [ - "Wallets" - ], + "tags": ["Wallets"], "summary": "Update wallet", "description": "Update a wallet for an organization.", "operationId": "UpdateWallet", @@ -5069,9 +4429,7 @@ }, "/public/v1/submit/update_webhook_endpoint": { "post": { - "tags": [ - "Organizations" - ], + "tags": ["Organizations"], "summary": "Update webhook endpoint", "description": "Update a webhook endpoint for an organization.", "operationId": "UpdateWebhookEndpoint", @@ -5101,9 +4459,7 @@ }, "/public/v1/submit/verify_otp": { "post": { - "tags": [ - "User Verification" - ], + "tags": ["User Verification"], "summary": "Verify generic OTP", "description": "Verify a generic OTP.", "operationId": "VerifyOtp", @@ -5147,1651 +4503,902 @@ } } } - } - }, - "components": { - "securitySchemes": { - "ApiKeyAuth": { - "type": "apiKey", - "name": "X-Stamp", - "in": "header" - }, - "AttestedAuth": { - "type": "apiKey", - "name": "X-Stamp-Attested", - "in": "header" - }, - "AuthenticatorAuth": { - "type": "apiKey", - "name": "X-Stamp-WebAuthn", - "in": "header" - } }, - "schemas": { - "AcceptInvitationIntent": { - "type": "object", - "properties": { - "invitationId": { - "type": "string", - "description": "Unique identifier for a given Invitation object." - }, - "userId": { - "type": "string", - "description": "Unique identifier for a given User." + "/public/v1/query/get_earn_deploy_status": { + "post": { + "tags": ["Earn"], + "summary": "Get Earn deploy status", + "description": "Poll the status of a wrapper deployment by its deploy_request_id.", + "operationId": "GetEarnDeployStatus", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetEarnDeployStatusRequest" + } + } }, - "authenticator": { - "$ref": "#/components/schemas/AuthenticatorParams" - } + "required": true }, - "required": [ - "invitationId", - "userId", - "authenticator" - ] - }, - "AcceptInvitationIntentV2": { - "type": "object", - "properties": { - "invitationId": { - "type": "string", - "description": "Unique identifier for a given Invitation object." - }, - "userId": { - "type": "string", - "description": "Unique identifier for a given User." - }, - "authenticator": { - "$ref": "#/components/schemas/AuthenticatorParamsV2" + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetEarnDeployStatusResponse" + } + } + } } - }, - "required": [ - "invitationId", - "userId", - "authenticator" - ] - }, - "AcceptInvitationResult": { - "type": "object", - "properties": { - "invitationId": { - "type": "string", - "description": "Unique identifier for a given Invitation." + } + } + }, + "/public/v1/query/get_earn_deposit_status": { + "post": { + "tags": ["Earn"], + "summary": "Get Earn deposit status", + "description": "Poll the status of a deposit by its deposit_request_id (for the async/sponsored deposit path).", + "operationId": "GetEarnDepositStatus", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetEarnDepositStatusRequest" + } + } }, - "userId": { - "type": "string", - "description": "Unique identifier for a given User." - } + "required": true }, - "required": [ - "invitationId", - "userId" - ] - }, - "AccessType": { - "type": "string", - "enum": [ - "ACCESS_TYPE_WEB", - "ACCESS_TYPE_API", - "ACCESS_TYPE_ALL" - ] - }, - "ActivateBillingTierIntent": { - "type": "object", - "properties": { - "productId": { - "type": "string", - "description": "The product that the customer wants to subscribe to." - }, - "orbPlanId": { - "type": "string", - "nullable": true + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetEarnDepositStatusResponse" + } + } + } } - }, - "required": [ - "productId" - ] - }, - "ActivateBillingTierResult": { - "type": "object", - "properties": { - "productId": { - "type": "string", - "description": "The id of the product being subscribed to." - } - }, - "required": [ - "productId" - ] - }, - "Activity": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "Unique identifier for a given Activity object." - }, - "organizationId": { - "type": "string", - "description": "Unique identifier for a given Organization." - }, - "status": { - "$ref": "#/components/schemas/ActivityStatus" - }, - "type": { - "$ref": "#/components/schemas/ActivityType" - }, - "intent": { - "$ref": "#/components/schemas/Intent" - }, - "result": { - "$ref": "#/components/schemas/Result" - }, - "votes": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Vote" - }, - "description": "A list of objects representing a particular User's approval or rejection of a Consensus request, including all relevant metadata." - }, - "appProofs": { - "type": "array", - "items": { - "$ref": "#/components/schemas/AppProof" - }, - "description": "A list of App Proofs generated by enclaves during activity execution, providing verifiable attestations of performed operations." - }, - "fingerprint": { - "type": "string", - "description": "An artifact verifying a User's action." - }, - "canApprove": { - "type": "boolean" - }, - "canReject": { - "type": "boolean" - }, - "createdAt": { - "$ref": "#/components/schemas/external.data.v1.Timestamp" - }, - "updatedAt": { - "$ref": "#/components/schemas/external.data.v1.Timestamp" - }, - "failure": { - "$ref": "#/components/schemas/Status" - } - }, - "required": [ - "id", - "organizationId", - "status", - "type", - "intent", - "result", - "votes", - "fingerprint", - "canApprove", - "canReject", - "createdAt", - "updatedAt" - ] - }, - "ActivityResponse": { - "type": "object", - "properties": { - "activity": { - "$ref": "#/components/schemas/Activity" - } - }, - "required": [ - "activity" - ] - }, - "ActivityStatus": { - "type": "string", - "enum": [ - "ACTIVITY_STATUS_CREATED", - "ACTIVITY_STATUS_PENDING", - "ACTIVITY_STATUS_COMPLETED", - "ACTIVITY_STATUS_FAILED", - "ACTIVITY_STATUS_CONSENSUS_NEEDED", - "ACTIVITY_STATUS_REJECTED", - "ACTIVITY_STATUS_AUTHENTICATORS_NEEDED" - ] - }, - "ActivityType": { - "type": "string", - "enum": [ - "ACTIVITY_TYPE_CREATE_API_KEYS", - "ACTIVITY_TYPE_CREATE_USERS", - "ACTIVITY_TYPE_CREATE_PRIVATE_KEYS", - "ACTIVITY_TYPE_SIGN_RAW_PAYLOAD", - "ACTIVITY_TYPE_CREATE_INVITATIONS", - "ACTIVITY_TYPE_ACCEPT_INVITATION", - "ACTIVITY_TYPE_CREATE_POLICY", - "ACTIVITY_TYPE_DISABLE_PRIVATE_KEY", - "ACTIVITY_TYPE_DELETE_USERS", - "ACTIVITY_TYPE_DELETE_API_KEYS", - "ACTIVITY_TYPE_DELETE_INVITATION", - "ACTIVITY_TYPE_DELETE_ORGANIZATION", - "ACTIVITY_TYPE_DELETE_POLICY", - "ACTIVITY_TYPE_CREATE_USER_TAG", - "ACTIVITY_TYPE_DELETE_USER_TAGS", - "ACTIVITY_TYPE_CREATE_ORGANIZATION", - "ACTIVITY_TYPE_SIGN_TRANSACTION", - "ACTIVITY_TYPE_APPROVE_ACTIVITY", - "ACTIVITY_TYPE_REJECT_ACTIVITY", - "ACTIVITY_TYPE_DELETE_AUTHENTICATORS", - "ACTIVITY_TYPE_CREATE_AUTHENTICATORS", - "ACTIVITY_TYPE_CREATE_PRIVATE_KEY_TAG", - "ACTIVITY_TYPE_DELETE_PRIVATE_KEY_TAGS", - "ACTIVITY_TYPE_SET_PAYMENT_METHOD", - "ACTIVITY_TYPE_ACTIVATE_BILLING_TIER", - "ACTIVITY_TYPE_DELETE_PAYMENT_METHOD", - "ACTIVITY_TYPE_CREATE_POLICY_V2", - "ACTIVITY_TYPE_CREATE_POLICY_V3", - "ACTIVITY_TYPE_CREATE_API_ONLY_USERS", - "ACTIVITY_TYPE_UPDATE_ROOT_QUORUM", - "ACTIVITY_TYPE_UPDATE_USER_TAG", - "ACTIVITY_TYPE_UPDATE_PRIVATE_KEY_TAG", - "ACTIVITY_TYPE_CREATE_AUTHENTICATORS_V2", - "ACTIVITY_TYPE_CREATE_ORGANIZATION_V2", - "ACTIVITY_TYPE_CREATE_USERS_V2", - "ACTIVITY_TYPE_ACCEPT_INVITATION_V2", - "ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION", - "ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V2", - "ACTIVITY_TYPE_UPDATE_ALLOWED_ORIGINS", - "ACTIVITY_TYPE_CREATE_PRIVATE_KEYS_V2", - "ACTIVITY_TYPE_UPDATE_USER", - "ACTIVITY_TYPE_UPDATE_POLICY", - "ACTIVITY_TYPE_SET_PAYMENT_METHOD_V2", - "ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V3", - "ACTIVITY_TYPE_CREATE_WALLET", - "ACTIVITY_TYPE_CREATE_WALLET_ACCOUNTS", - "ACTIVITY_TYPE_INIT_USER_EMAIL_RECOVERY", - "ACTIVITY_TYPE_RECOVER_USER", - "ACTIVITY_TYPE_SET_ORGANIZATION_FEATURE", - "ACTIVITY_TYPE_REMOVE_ORGANIZATION_FEATURE", - "ACTIVITY_TYPE_SIGN_RAW_PAYLOAD_V2", - "ACTIVITY_TYPE_SIGN_TRANSACTION_V2", - "ACTIVITY_TYPE_EXPORT_PRIVATE_KEY", - "ACTIVITY_TYPE_EXPORT_WALLET", - "ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V4", - "ACTIVITY_TYPE_EMAIL_AUTH", - "ACTIVITY_TYPE_EXPORT_WALLET_ACCOUNT", - "ACTIVITY_TYPE_INIT_IMPORT_WALLET", - "ACTIVITY_TYPE_IMPORT_WALLET", - "ACTIVITY_TYPE_INIT_IMPORT_PRIVATE_KEY", - "ACTIVITY_TYPE_IMPORT_PRIVATE_KEY", - "ACTIVITY_TYPE_CREATE_POLICIES", - "ACTIVITY_TYPE_SIGN_RAW_PAYLOADS", - "ACTIVITY_TYPE_CREATE_READ_ONLY_SESSION", - "ACTIVITY_TYPE_CREATE_OAUTH_PROVIDERS", - "ACTIVITY_TYPE_DELETE_OAUTH_PROVIDERS", - "ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V5", - "ACTIVITY_TYPE_OAUTH", - "ACTIVITY_TYPE_CREATE_API_KEYS_V2", - "ACTIVITY_TYPE_CREATE_READ_WRITE_SESSION", - "ACTIVITY_TYPE_EMAIL_AUTH_V2", - "ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V6", - "ACTIVITY_TYPE_DELETE_PRIVATE_KEYS", - "ACTIVITY_TYPE_DELETE_WALLETS", - "ACTIVITY_TYPE_CREATE_READ_WRITE_SESSION_V2", - "ACTIVITY_TYPE_DELETE_SUB_ORGANIZATION", - "ACTIVITY_TYPE_INIT_OTP_AUTH", - "ACTIVITY_TYPE_OTP_AUTH", - "ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V7", - "ACTIVITY_TYPE_UPDATE_WALLET", - "ACTIVITY_TYPE_UPDATE_POLICY_V2", - "ACTIVITY_TYPE_CREATE_USERS_V3", - "ACTIVITY_TYPE_INIT_OTP_AUTH_V2", - "ACTIVITY_TYPE_INIT_OTP", - "ACTIVITY_TYPE_VERIFY_OTP", - "ACTIVITY_TYPE_OTP_LOGIN", - "ACTIVITY_TYPE_STAMP_LOGIN", - "ACTIVITY_TYPE_OAUTH_LOGIN", - "ACTIVITY_TYPE_UPDATE_USER_NAME", - "ACTIVITY_TYPE_UPDATE_USER_EMAIL", - "ACTIVITY_TYPE_UPDATE_USER_PHONE_NUMBER", - "ACTIVITY_TYPE_INIT_FIAT_ON_RAMP", - "ACTIVITY_TYPE_CREATE_SMART_CONTRACT_INTERFACE", - "ACTIVITY_TYPE_DELETE_SMART_CONTRACT_INTERFACE", - "ACTIVITY_TYPE_ENABLE_AUTH_PROXY", - "ACTIVITY_TYPE_DISABLE_AUTH_PROXY", - "ACTIVITY_TYPE_UPDATE_AUTH_PROXY_CONFIG", - "ACTIVITY_TYPE_CREATE_OAUTH2_CREDENTIAL", - "ACTIVITY_TYPE_UPDATE_OAUTH2_CREDENTIAL", - "ACTIVITY_TYPE_DELETE_OAUTH2_CREDENTIAL", - "ACTIVITY_TYPE_OAUTH2_AUTHENTICATE", - "ACTIVITY_TYPE_DELETE_WALLET_ACCOUNTS", - "ACTIVITY_TYPE_DELETE_POLICIES", - "ACTIVITY_TYPE_ETH_SEND_RAW_TRANSACTION", - "ACTIVITY_TYPE_ETH_SEND_TRANSACTION", - "ACTIVITY_TYPE_CREATE_FIAT_ON_RAMP_CREDENTIAL", - "ACTIVITY_TYPE_UPDATE_FIAT_ON_RAMP_CREDENTIAL", - "ACTIVITY_TYPE_DELETE_FIAT_ON_RAMP_CREDENTIAL", - "ACTIVITY_TYPE_EMAIL_AUTH_V3", - "ACTIVITY_TYPE_INIT_USER_EMAIL_RECOVERY_V2", - "ACTIVITY_TYPE_INIT_OTP_AUTH_V3", - "ACTIVITY_TYPE_INIT_OTP_V2", - "ACTIVITY_TYPE_UPSERT_GAS_USAGE_CONFIG", - "ACTIVITY_TYPE_CREATE_TVC_APP", - "ACTIVITY_TYPE_CREATE_TVC_DEPLOYMENT", - "ACTIVITY_TYPE_CREATE_TVC_MANIFEST_APPROVALS", - "ACTIVITY_TYPE_SOL_SEND_TRANSACTION", - "ACTIVITY_TYPE_INIT_OTP_V3", - "ACTIVITY_TYPE_VERIFY_OTP_V2", - "ACTIVITY_TYPE_OTP_LOGIN_V2", - "ACTIVITY_TYPE_UPDATE_ORGANIZATION_NAME", - "ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V8", - "ACTIVITY_TYPE_CREATE_OAUTH_PROVIDERS_V2", - "ACTIVITY_TYPE_CREATE_USERS_V4", - "ACTIVITY_TYPE_CREATE_WEBHOOK_ENDPOINT", - "ACTIVITY_TYPE_UPDATE_WEBHOOK_ENDPOINT", - "ACTIVITY_TYPE_DELETE_WEBHOOK_ENDPOINT", - "ACTIVITY_TYPE_SET_IP_ALLOWLIST", - "ACTIVITY_TYPE_REMOVE_IP_ALLOWLIST", - "ACTIVITY_TYPE_UPDATE_TVC_APP_LIVE_DEPLOYMENT", - "ACTIVITY_TYPE_DELETE_TVC_DEPLOYMENT", - "ACTIVITY_TYPE_DELETE_TVC_APP_AND_DEPLOYMENTS", - "ACTIVITY_TYPE_RESTORE_TVC_DEPLOYMENT", - "ACTIVITY_TYPE_SPARK_SIGN_FROST", - "ACTIVITY_TYPE_SPARK_PREPARE_TRANSFER", - "ACTIVITY_TYPE_SPARK_CLAIM_TRANSFER", - "ACTIVITY_TYPE_SPARK_PREPARE_LIGHTNING_RECEIVE", - "ACTIVITY_TYPE_POST_TVC_QUORUM_KEY_SHARE", - "ACTIVITY_TYPE_ETH_SEND_TRANSACTION_V2", - "ACTIVITY_TYPE_CREATE_MFA_POLICY", - "ACTIVITY_TYPE_UPDATE_MFA_POLICY", - "ACTIVITY_TYPE_DELETE_MFA_POLICY", - "ACTIVITY_TYPE_CREATE_SESSION_PROFILE", - "ACTIVITY_TYPE_EARN_DEPLOY_WRAPPER", - "ACTIVITY_TYPE_EARN_DEPOSIT", - "ACTIVITY_TYPE_EARN_WITHDRAW", - "ACTIVITY_TYPE_EXECUTE_SWAP", - "ACTIVITY_TYPE_UPSERT_SWAP_CONFIG", - "ACTIVITY_TYPE_CREATE_TVC_OPERATOR", - "ACTIVITY_TYPE_CREATE_TVC_QUORUM_KEY", - "ACTIVITY_TYPE_RE_ENCRYPT_TVC_QUORUM_KEY_SHARE", - "ACTIVITY_TYPE_INIT_IMPORT_SECRETS", - "ACTIVITY_TYPE_SOL_SEND_TRANSACTION_V2", - "ACTIVITY_TYPE_CLAIM_SWAP_FEES", - "ACTIVITY_TYPE_EARN_SET_WRAPPER_STATE", - "ACTIVITY_TYPE_CLAIM_EARN_FEES", - "ACTIVITY_TYPE_UPDATE_WALLET_ACCOUNT_NAME" - ] - }, - "AddressFormat": { - "type": "string", - "enum": [ - "ADDRESS_FORMAT_UNCOMPRESSED", - "ADDRESS_FORMAT_COMPRESSED", - "ADDRESS_FORMAT_ETHEREUM", - "ADDRESS_FORMAT_SOLANA", - "ADDRESS_FORMAT_COSMOS", - "ADDRESS_FORMAT_TRON", - "ADDRESS_FORMAT_SUI", - "ADDRESS_FORMAT_APTOS", - "ADDRESS_FORMAT_BITCOIN_MAINNET_P2PKH", - "ADDRESS_FORMAT_BITCOIN_MAINNET_P2SH", - "ADDRESS_FORMAT_BITCOIN_MAINNET_P2WPKH", - "ADDRESS_FORMAT_BITCOIN_MAINNET_P2WSH", - "ADDRESS_FORMAT_BITCOIN_MAINNET_P2TR", - "ADDRESS_FORMAT_BITCOIN_TESTNET_P2PKH", - "ADDRESS_FORMAT_BITCOIN_TESTNET_P2SH", - "ADDRESS_FORMAT_BITCOIN_TESTNET_P2WPKH", - "ADDRESS_FORMAT_BITCOIN_TESTNET_P2WSH", - "ADDRESS_FORMAT_BITCOIN_TESTNET_P2TR", - "ADDRESS_FORMAT_BITCOIN_SIGNET_P2PKH", - "ADDRESS_FORMAT_BITCOIN_SIGNET_P2SH", - "ADDRESS_FORMAT_BITCOIN_SIGNET_P2WPKH", - "ADDRESS_FORMAT_BITCOIN_SIGNET_P2WSH", - "ADDRESS_FORMAT_BITCOIN_SIGNET_P2TR", - "ADDRESS_FORMAT_BITCOIN_REGTEST_P2PKH", - "ADDRESS_FORMAT_BITCOIN_REGTEST_P2SH", - "ADDRESS_FORMAT_BITCOIN_REGTEST_P2WPKH", - "ADDRESS_FORMAT_BITCOIN_REGTEST_P2WSH", - "ADDRESS_FORMAT_BITCOIN_REGTEST_P2TR", - "ADDRESS_FORMAT_SEI", - "ADDRESS_FORMAT_XLM", - "ADDRESS_FORMAT_DOGE_MAINNET", - "ADDRESS_FORMAT_DOGE_TESTNET", - "ADDRESS_FORMAT_TON_V3R2", - "ADDRESS_FORMAT_TON_V4R2", - "ADDRESS_FORMAT_TON_V5R1", - "ADDRESS_FORMAT_XRP", - "ADDRESS_FORMAT_SPARK_MAINNET", - "ADDRESS_FORMAT_SPARK_REGTEST" - ] - }, - "Any": { - "type": "object", - "properties": { - "@type": { - "type": "string" - } - }, - "additionalProperties": {} - }, - "ApiKey": { - "type": "object", - "properties": { - "credential": { - "$ref": "#/components/schemas/external.data.v1.Credential" - }, - "apiKeyId": { - "type": "string", - "description": "Unique identifier for a given API Key." - }, - "apiKeyName": { - "type": "string", - "description": "Human-readable name for an API Key." - }, - "createdAt": { - "$ref": "#/components/schemas/external.data.v1.Timestamp" - }, - "updatedAt": { - "$ref": "#/components/schemas/external.data.v1.Timestamp" - }, - "expirationSeconds": { - "type": "string", - "format": "uint64", - "description": "Optional window (in seconds) indicating how long the API Key should last.", - "nullable": true - } - }, - "required": [ - "credential", - "apiKeyId", - "apiKeyName", - "createdAt", - "updatedAt" - ] - }, - "ApiKeyCurve": { - "type": "string", - "enum": [ - "API_KEY_CURVE_P256", - "API_KEY_CURVE_SECP256K1", - "API_KEY_CURVE_ED25519" - ] - }, - "ApiKeyParams": { - "type": "object", - "properties": { - "apiKeyName": { - "type": "string", - "description": "Human-readable name for an API Key." - }, - "publicKey": { - "type": "string", - "description": "The public component of a cryptographic key pair used to sign messages and transactions." - }, - "expirationSeconds": { - "type": "string", - "description": "Optional window (in seconds) indicating how long the API Key should last.", - "nullable": true - } - }, - "required": [ - "apiKeyName", - "publicKey" - ] - }, - "ApiKeyParamsV2": { - "type": "object", - "properties": { - "apiKeyName": { - "type": "string", - "description": "Human-readable name for an API Key." - }, - "publicKey": { - "type": "string", - "description": "The public component of a cryptographic key pair used to sign messages and transactions." - }, - "curveType": { - "$ref": "#/components/schemas/ApiKeyCurve" - }, - "expirationSeconds": { - "type": "string", - "description": "Optional window (in seconds) indicating how long the API Key should last.", - "nullable": true - } - }, - "required": [ - "apiKeyName", - "publicKey", - "curveType" - ] - }, - "ApiOnlyUserParams": { - "type": "object", - "properties": { - "userName": { - "type": "string", - "description": "The name of the new API-only User." - }, - "userEmail": { - "type": "string", - "description": "The email address for this API-only User (optional).", - "nullable": true - }, - "userTags": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of tags assigned to the new API-only User. This field, if not needed, should be an empty array in your request body." - }, - "apiKeys": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ApiKeyParams" - }, - "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." - } - }, - "required": [ - "userName", - "userTags", - "apiKeys" - ] - }, - "AppProof": { - "type": "object", - "properties": { - "scheme": { - "$ref": "#/components/schemas/data.v1.SignatureScheme" - }, - "publicKey": { - "type": "string", - "description": "Ephemeral public key." - }, - "proofPayload": { - "type": "string", - "description": "JSON serialized AppProofPayload." - }, - "signature": { - "type": "string", - "description": "Signature over hashed proof_payload." - } - }, - "required": [ - "scheme", - "publicKey", - "proofPayload", - "signature" - ] - }, - "AppStatus": { - "type": "object", - "properties": { - "appId": { - "type": "string", - "description": "Unique identifier for this TVC App" - }, - "deployments": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DeploymentStatus" - }, - "description": "List of deployment statuses for this app" - }, - "targetedDeploymentId": { - "type": "string", - "description": "The deployment ID currently serving traffic for this app" - } - }, - "required": [ - "appId", - "deployments", - "targetedDeploymentId" - ] - }, - "ApproveActivityIntent": { - "type": "object", - "properties": { - "fingerprint": { - "type": "string", - "description": "An artifact verifying a User's action." - } - }, - "required": [ - "fingerprint" - ] - }, - "ApproveActivityRequest": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "ACTIVITY_TYPE_APPROVE_ACTIVITY" - ] - }, - "timestampMs": { - "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." - }, - "organizationId": { - "type": "string", - "description": "Unique identifier for a given Organization." - }, - "parameters": { - "$ref": "#/components/schemas/ApproveActivityIntent" - }, - "generateAppProofs": { - "type": "boolean", - "nullable": true - } - }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] - }, - "AssetBalance": { - "type": "object", - "properties": { - "caip19": { - "type": "string", - "description": "The caip-19 asset identifier" - }, - "symbol": { - "type": "string", - "description": "The asset symbol" - }, - "balance": { - "type": "string", - "description": "The balance in atomic units" - }, - "decimals": { - "type": "integer", - "format": "int32", - "description": "The number of decimals this asset uses" - }, - "display": { - "$ref": "#/components/schemas/AssetBalanceDisplay" - }, - "name": { - "type": "string", - "description": "The asset name" - } - } - }, - "AssetBalanceDisplay": { - "type": "object", - "properties": { - "usd": { - "type": "string", - "description": "USD value for display purposes only. Do not do any arithmetic or calculations with these, as the results could be imprecise." - }, - "crypto": { - "type": "string", - "description": "Normalized crypto value for display purposes only. Do not do any arithmetic or calculations with these, as the results could be imprecise." - } - } - }, - "AssetMetadata": { - "type": "object", - "properties": { - "caip19": { - "type": "string", - "description": "The caip-19 asset identifier" - }, - "symbol": { - "type": "string", - "description": "The asset symbol" - }, - "decimals": { - "type": "integer", - "format": "int32", - "description": "The number of decimals this asset uses" - }, - "logoUrl": { - "type": "string", - "description": "The url of the asset logo" - }, - "name": { - "type": "string", - "description": "The asset name" - } - } - }, - "Attestation": { - "type": "object", - "properties": { - "credentialId": { - "type": "string", - "description": "The cbor encoded then base64 url encoded id of the credential." - }, - "clientDataJson": { - "type": "string", - "description": "A base64 url encoded payload containing metadata about the signing context and the challenge." - }, - "attestationObject": { - "type": "string", - "description": "A base64 url encoded payload containing authenticator data and any attestation the webauthn provider chooses." - }, - "transports": { - "type": "array", - "items": { - "$ref": "#/components/schemas/AuthenticatorTransport" - }, - "description": "The type of authenticator transports." - } - }, - "required": [ - "credentialId", - "clientDataJson", - "attestationObject", - "transports" - ] - }, - "AuthenticationMethod": { - "type": "object", - "properties": { - "type": { - "$ref": "#/components/schemas/AuthenticationType" - }, - "id": { - "type": "string", - "description": "Optional specific authenticator ID required (e.g., for requiring a specific session profile id)", - "nullable": true - } - }, - "required": [ - "type" - ] - }, - "AuthenticationMethodParams": { - "type": "object", - "properties": { - "type": { - "$ref": "#/components/schemas/AuthenticationType" - }, - "id": { - "type": "string", - "description": "Optional specific authenticator ID required (e.g., UUID of a passkey authenticator). If not provided, any authenticator of the specified type can be used.", - "nullable": true - } - }, - "required": [ - "type" - ] - }, - "AuthenticationType": { - "type": "string", - "enum": [ - "AUTHENTICATION_TYPE_EMAIL_OTP", - "AUTHENTICATION_TYPE_SMS_OTP", - "AUTHENTICATION_TYPE_PASSKEY", - "AUTHENTICATION_TYPE_API_KEY", - "AUTHENTICATION_TYPE_OAUTH", - "AUTHENTICATION_TYPE_SESSION" - ] - }, - "Authenticator": { - "type": "object", - "properties": { - "transports": { - "type": "array", - "items": { - "$ref": "#/components/schemas/AuthenticatorTransport" - }, - "description": "Types of transports that may be used by an Authenticator (e.g., USB, NFC, BLE)." - }, - "attestationType": { - "type": "string" - }, - "aaguid": { - "type": "string", - "description": "Identifier indicating the type of the Security Key." - }, - "credentialId": { - "type": "string", - "description": "Unique identifier for a WebAuthn credential." - }, - "model": { - "type": "string", - "description": "The type of Authenticator device." - }, - "credential": { - "$ref": "#/components/schemas/external.data.v1.Credential" - }, - "authenticatorId": { - "type": "string", - "description": "Unique identifier for a given Authenticator." - }, - "authenticatorName": { - "type": "string", - "description": "Human-readable name for an Authenticator." - }, - "createdAt": { - "$ref": "#/components/schemas/external.data.v1.Timestamp" - }, - "updatedAt": { - "$ref": "#/components/schemas/external.data.v1.Timestamp" - } - }, - "required": [ - "transports", - "attestationType", - "aaguid", - "credentialId", - "model", - "credential", - "authenticatorId", - "authenticatorName", - "createdAt", - "updatedAt" - ] - }, - "AuthenticatorAttestationResponse": { - "type": "object", - "properties": { - "clientDataJson": { - "type": "string" - }, - "attestationObject": { - "type": "string" - }, - "transports": { - "type": "array", - "items": { - "$ref": "#/components/schemas/AuthenticatorTransport" + } + } + }, + "/public/v1/query/get_earn_withdraw_status": { + "post": { + "tags": ["Earn"], + "summary": "Get Earn withdraw status", + "description": "Poll the status of a withdrawal by its withdraw_request_id.", + "operationId": "GetEarnWithdrawStatus", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetEarnWithdrawStatusRequest" + } } }, - "authenticatorAttachment": { - "type": "string", - "enum": [ - "cross-platform", - "platform" - ], - "nullable": true - } - }, - "required": [ - "clientDataJson", - "attestationObject" - ] - }, - "AuthenticatorParams": { - "type": "object", - "properties": { - "authenticatorName": { - "type": "string", - "description": "Human-readable name for an Authenticator." - }, - "userId": { - "type": "string", - "description": "Unique identifier for a given User." - }, - "attestation": { - "$ref": "#/components/schemas/PublicKeyCredentialWithAttestation" - }, - "challenge": { - "type": "string", - "description": "Challenge presented for authentication purposes." - } + "required": true }, - "required": [ - "authenticatorName", - "userId", - "attestation", - "challenge" - ] - }, - "AuthenticatorParamsV2": { - "type": "object", - "properties": { - "authenticatorName": { - "type": "string", - "description": "Human-readable name for an Authenticator." - }, - "challenge": { - "type": "string", - "description": "Challenge presented for authentication purposes." - }, - "attestation": { - "$ref": "#/components/schemas/Attestation" + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetEarnWithdrawStatusResponse" + } + } + } } - }, - "required": [ - "authenticatorName", - "challenge", - "attestation" - ] - }, - "AuthenticatorTransport": { - "type": "string", - "enum": [ - "AUTHENTICATOR_TRANSPORT_BLE", - "AUTHENTICATOR_TRANSPORT_INTERNAL", - "AUTHENTICATOR_TRANSPORT_NFC", - "AUTHENTICATOR_TRANSPORT_USB", - "AUTHENTICATOR_TRANSPORT_HYBRID" - ] - }, - "BootProof": { - "type": "object", - "properties": { - "ephemeralPublicKeyHex": { - "type": "string", - "description": "The hex encoded Ephemeral Public Key." - }, - "awsAttestationDocB64": { - "type": "string", - "description": "The DER encoded COSE Sign1 struct Attestation doc." - }, - "qosManifestB64": { - "type": "string", - "description": "The base64 encoded QOS manifest. Encoding depends on qos_manifest_version." - }, - "qosManifestEnvelopeB64": { - "type": "string", - "description": "The base64 encoded QOS manifest envelope. Encoding depends on qos_manifest_version." - }, - "deploymentLabel": { - "type": "string", - "description": "The label under which the enclave app was deployed." - }, - "enclaveApp": { - "type": "string", - "description": "Name of the enclave app" - }, - "owner": { - "type": "string", - "description": "Owner of the app i.e. 'tkhq'" - }, - "createdAt": { - "$ref": "#/components/schemas/external.data.v1.Timestamp" + } + } + }, + "/public/v1/query/list_earn_enabled_vaults": { + "post": { + "tags": ["Earn"], + "summary": "Get Earn enabled vaults", + "description": "Get the organization's deployed wrappers with on-chain total deposited and live APY. The management view, distinct from per-wallet positions.", + "operationId": "ListEarnEnabledVaults", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListEarnEnabledVaultsRequest" + } + } }, - "qosManifestVersion": { - "type": "string", - "description": "QOS manifest schema version.", - "nullable": true - } + "required": true }, - "required": [ - "ephemeralPublicKeyHex", - "awsAttestationDocB64", - "qosManifestB64", - "qosManifestEnvelopeB64", - "deploymentLabel", - "enclaveApp", - "owner", - "createdAt" - ] - }, - "BootProofResponse": { - "type": "object", - "properties": { - "bootProof": { - "$ref": "#/components/schemas/BootProof" + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListEarnEnabledVaultsResponse" + } + } + } } + } + } + }, + "/public/v1/query/list_earn_positions": { + "post": { + "tags": ["Earn"], + "summary": "Get Earn positions", + "description": "Get the active Earn positions for a specific wallet, including current value, cost basis, yield, and projected fees.", + "operationId": "ListEarnPositions", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListEarnPositionsRequest" + } + } + }, + "required": true }, - "required": [ - "bootProof" - ] - }, - "ClaimEarnFeesIntent": { - "type": "object", - "properties": { - "wrapperAddress": { - "type": "string", - "description": "Address of the deployed Earn wrapper to claim fees for. Must be one of the org's deployed wrappers." + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListEarnPositionsResponse" + } + } + } } - }, - "required": [ - "wrapperAddress" - ] - }, - "ClaimEarnFeesRequest": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "ACTIVITY_TYPE_CLAIM_EARN_FEES" - ] - }, - "timestampMs": { - "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." - }, - "organizationId": { - "type": "string", - "description": "Unique identifier for a given Organization." - }, - "parameters": { - "$ref": "#/components/schemas/ClaimEarnFeesIntent" + } + } + }, + "/public/v1/query/list_earn_vaults": { + "post": { + "tags": ["Earn"], + "summary": "Get Earn vault catalog", + "description": "Get the catalog of all wrappable yield vaults across supported chains, enriched with live TVL and APY. Annotates which vaults the organization has already enabled.", + "operationId": "ListEarnVaults", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListEarnVaultsRequest" + } + } }, - "generateAppProofs": { - "type": "boolean", - "nullable": true - } + "required": true }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] - }, - "ClaimEarnFeesResult": { - "type": "object", - "properties": { - "claimRequestId": { - "type": "string", - "description": "Identifier to poll claim status and tx hash via GetClaimEarnFeesStatus." + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListEarnVaultsResponse" + } + } + } } + } + } + }, + "/public/v1/submit/claim_earn_fees": { + "post": { + "tags": ["Earn"], + "summary": "Claim earn fees", + "description": "Claim earn fees through the activity pipeline.", + "operationId": "ClaimEarnFees", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ClaimEarnFeesRequest" + } + } + }, + "required": true }, - "required": [ - "claimRequestId" - ] - }, - "ClaimSwapFeesIntent": { - "type": "object" - }, - "ClaimSwapFeesResult": { - "type": "object", - "properties": { - "requestId": { - "type": "string", - "description": "Relay claim request ID submitted through the permit endpoint." + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } } - }, - "required": [ - "requestId" - ] - }, - "ClientSignature": { - "type": "object", - "properties": { - "publicKey": { - "type": "string", - "description": "The public component of a cryptographic key pair used to create the signature." - }, - "scheme": { - "$ref": "#/components/schemas/ClientSignatureScheme" + } + } + }, + "/public/v1/submit/earn_deploy_wrapper": { + "post": { + "tags": ["Earn"], + "summary": "Deploy Earn wrapper", + "description": "Enable a yield vault for an organization by deploying its fee wrapper. Must be called before any deposits into the vault.", + "operationId": "EarnDeployWrapper", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EarnDeployWrapperRequest" + } + } }, - "message": { - "type": "string", - "description": "The message that was signed." + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/earn_deposit": { + "post": { + "tags": ["Earn"], + "summary": "Deposit into Earn vault", + "description": "Deposit assets from a wallet into an enabled yield vault.", + "operationId": "EarnDeposit", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EarnDepositRequest" + } + } }, - "signature": { - "type": "string", - "description": "The cryptographic signature over the message." + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } } + } + } + }, + "/public/v1/submit/earn_set_wrapper_state": { + "post": { + "tags": ["Earn"], + "summary": "Set Earn wrapper state", + "description": "Enable or disable deposits to a deployed Earn wrapper. Withdrawals are always allowed.", + "operationId": "EarnSetWrapperState", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EarnSetWrapperStateRequest" + } + } + }, + "required": true }, - "required": [ - "publicKey", - "scheme", - "message", - "signature" - ] - }, - "ClientSignatureScheme": { - "type": "string", - "enum": [ - "CLIENT_SIGNATURE_SCHEME_API_P256" - ] - }, - "Config": { - "type": "object", - "properties": { - "features": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Feature" + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/earn_withdraw": { + "post": { + "tags": ["Earn"], + "summary": "Withdraw from Earn vault", + "description": "Withdraw assets or redeem shares from an enabled yield vault.", + "operationId": "EarnWithdraw", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EarnWithdrawRequest" + } } }, - "quorum": { - "$ref": "#/components/schemas/external.data.v1.Quorum" + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } } } + } + } + }, + "components": { + "securitySchemes": { + "ApiKeyAuth": { + "type": "apiKey", + "name": "X-Stamp", + "in": "header" }, - "CreateApiKeysIntent": { + "AttestedAuth": { + "type": "apiKey", + "name": "X-Stamp-Attested", + "in": "header" + }, + "AuthenticatorAuth": { + "type": "apiKey", + "name": "X-Stamp-WebAuthn", + "in": "header" + } + }, + "schemas": { + "AcceptInvitationIntent": { "type": "object", "properties": { - "apiKeys": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ApiKeyParams" - }, - "description": "A list of API Keys." + "invitationId": { + "type": "string", + "description": "Unique identifier for a given Invitation object." }, "userId": { "type": "string", "description": "Unique identifier for a given User." + }, + "authenticator": { + "$ref": "#/components/schemas/AuthenticatorParams" } }, - "required": [ - "apiKeys", - "userId" - ] + "required": ["invitationId", "userId", "authenticator"] }, - "CreateApiKeysIntentV2": { + "AcceptInvitationIntentV2": { "type": "object", "properties": { - "apiKeys": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ApiKeyParamsV2" - }, - "description": "A list of API Keys." + "invitationId": { + "type": "string", + "description": "Unique identifier for a given Invitation object." }, "userId": { "type": "string", "description": "Unique identifier for a given User." + }, + "authenticator": { + "$ref": "#/components/schemas/AuthenticatorParamsV2" } }, - "required": [ - "apiKeys", - "userId" - ] + "required": ["invitationId", "userId", "authenticator"] }, - "CreateApiKeysRequest": { + "AcceptInvitationResult": { "type": "object", "properties": { - "type": { - "type": "string", - "enum": [ - "ACTIVITY_TYPE_CREATE_API_KEYS_V2" - ] - }, - "timestampMs": { + "invitationId": { "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + "description": "Unique identifier for a given Invitation." }, - "organizationId": { + "userId": { "type": "string", - "description": "Unique identifier for a given Organization." - }, - "parameters": { - "$ref": "#/components/schemas/CreateApiKeysIntentV2" - }, - "generateAppProofs": { - "type": "boolean", - "nullable": true - } - }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] - }, - "CreateApiKeysResult": { - "type": "object", - "properties": { - "apiKeyIds": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of API Key IDs." - } - }, - "required": [ - "apiKeyIds" - ] - }, - "CreateApiOnlyUsersIntent": { - "type": "object", - "properties": { - "apiOnlyUsers": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ApiOnlyUserParams" - }, - "description": "A list of API-only Users to create." + "description": "Unique identifier for a given User." } }, - "required": [ - "apiOnlyUsers" - ] + "required": ["invitationId", "userId"] }, - "CreateApiOnlyUsersResult": { - "type": "object", - "properties": { - "userIds": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of API-only User IDs." - } - }, - "required": [ - "userIds" - ] + "AccessType": { + "type": "string", + "enum": ["ACCESS_TYPE_WEB", "ACCESS_TYPE_API", "ACCESS_TYPE_ALL"] }, - "CreateAuthenticatorsIntent": { + "ActivateBillingTierIntent": { "type": "object", "properties": { - "authenticators": { - "type": "array", - "items": { - "$ref": "#/components/schemas/AuthenticatorParams" - }, - "description": "A list of Authenticators." + "productId": { + "type": "string", + "description": "The product that the customer wants to subscribe to." }, - "userId": { + "orbPlanId": { "type": "string", - "description": "Unique identifier for a given User." + "nullable": true } }, - "required": [ - "authenticators", - "userId" - ] + "required": ["productId"] }, - "CreateAuthenticatorsIntentV2": { + "ActivateBillingTierResult": { "type": "object", "properties": { - "authenticators": { - "type": "array", - "items": { - "$ref": "#/components/schemas/AuthenticatorParamsV2" - }, - "description": "A list of Authenticators." - }, - "userId": { + "productId": { "type": "string", - "description": "Unique identifier for a given User." + "description": "The id of the product being subscribed to." } }, - "required": [ - "authenticators", - "userId" - ] + "required": ["productId"] }, - "CreateAuthenticatorsRequest": { + "Activity": { "type": "object", "properties": { - "type": { - "type": "string", - "enum": [ - "ACTIVITY_TYPE_CREATE_AUTHENTICATORS_V2" - ] - }, - "timestampMs": { + "id": { "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + "description": "Unique identifier for a given Activity object." }, "organizationId": { "type": "string", "description": "Unique identifier for a given Organization." }, - "parameters": { - "$ref": "#/components/schemas/CreateAuthenticatorsIntentV2" + "status": { + "$ref": "#/components/schemas/ActivityStatus" }, - "generateAppProofs": { - "type": "boolean", - "nullable": true - } - }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] - }, - "CreateAuthenticatorsResult": { - "type": "object", - "properties": { - "authenticatorIds": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of Authenticator IDs." - } - }, - "required": [ - "authenticatorIds" - ] - }, - "CreateFiatOnRampCredentialIntent": { - "type": "object", - "properties": { - "onrampProvider": { - "$ref": "#/components/schemas/FiatOnRampProvider" + "type": { + "$ref": "#/components/schemas/ActivityType" }, - "projectId": { - "type": "string", - "description": "Project ID for the on-ramp provider. Some providers, like Coinbase, require this additional identifier", - "nullable": true + "intent": { + "$ref": "#/components/schemas/Intent" }, - "publishableApiKey": { - "type": "string", - "description": "Publishable API key for the on-ramp provider" + "result": { + "$ref": "#/components/schemas/Result" }, - "encryptedSecretApiKey": { - "type": "string", - "description": "Secret API key for the on-ramp provider encrypted to our on-ramp encryption public key" + "votes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Vote" + }, + "description": "A list of objects representing a particular User's approval or rejection of a Consensus request, including all relevant metadata." }, - "encryptedPrivateApiKey": { - "type": "string", - "description": "Private API key for the on-ramp provider encrypted to our on-ramp encryption public key. Some providers, like Coinbase, require this additional key.", - "nullable": true + "appProofs": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AppProof" + }, + "description": "A list of App Proofs generated by enclaves during activity execution, providing verifiable attestations of performed operations." }, - "sandboxMode": { - "type": "boolean", - "description": "If the on-ramp credential is a sandbox credential" - } - }, - "required": [ - "onrampProvider", - "publishableApiKey", - "encryptedSecretApiKey" - ] - }, - "CreateFiatOnRampCredentialRequest": { - "type": "object", - "properties": { - "type": { + "fingerprint": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_CREATE_FIAT_ON_RAMP_CREDENTIAL" - ] + "description": "An artifact verifying a User's action." }, - "timestampMs": { - "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + "canApprove": { + "type": "boolean" }, - "organizationId": { - "type": "string", - "description": "Unique identifier for a given Organization." + "canReject": { + "type": "boolean" }, - "parameters": { - "$ref": "#/components/schemas/CreateFiatOnRampCredentialIntent" + "createdAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" }, - "generateAppProofs": { - "type": "boolean", - "nullable": true + "updatedAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + }, + "failure": { + "$ref": "#/components/schemas/Status" } }, "required": [ - "type", - "timestampMs", + "id", "organizationId", - "parameters" + "status", + "type", + "intent", + "result", + "votes", + "fingerprint", + "canApprove", + "canReject", + "createdAt", + "updatedAt" ] }, - "CreateFiatOnRampCredentialResult": { + "ActivityResponse": { "type": "object", "properties": { - "fiatOnRampCredentialId": { - "type": "string", - "description": "Unique identifier of the Fiat On-Ramp credential that was created" + "activity": { + "$ref": "#/components/schemas/Activity" } }, - "required": [ - "fiatOnRampCredentialId" + "required": ["activity"] + }, + "ActivityStatus": { + "type": "string", + "enum": [ + "ACTIVITY_STATUS_CREATED", + "ACTIVITY_STATUS_PENDING", + "ACTIVITY_STATUS_COMPLETED", + "ACTIVITY_STATUS_FAILED", + "ACTIVITY_STATUS_CONSENSUS_NEEDED", + "ACTIVITY_STATUS_REJECTED", + "ACTIVITY_STATUS_AUTHENTICATORS_NEEDED" + ] + }, + "ActivityType": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_CREATE_API_KEYS", + "ACTIVITY_TYPE_CREATE_USERS", + "ACTIVITY_TYPE_CREATE_PRIVATE_KEYS", + "ACTIVITY_TYPE_SIGN_RAW_PAYLOAD", + "ACTIVITY_TYPE_CREATE_INVITATIONS", + "ACTIVITY_TYPE_ACCEPT_INVITATION", + "ACTIVITY_TYPE_CREATE_POLICY", + "ACTIVITY_TYPE_DISABLE_PRIVATE_KEY", + "ACTIVITY_TYPE_DELETE_USERS", + "ACTIVITY_TYPE_DELETE_API_KEYS", + "ACTIVITY_TYPE_DELETE_INVITATION", + "ACTIVITY_TYPE_DELETE_ORGANIZATION", + "ACTIVITY_TYPE_DELETE_POLICY", + "ACTIVITY_TYPE_CREATE_USER_TAG", + "ACTIVITY_TYPE_DELETE_USER_TAGS", + "ACTIVITY_TYPE_CREATE_ORGANIZATION", + "ACTIVITY_TYPE_SIGN_TRANSACTION", + "ACTIVITY_TYPE_APPROVE_ACTIVITY", + "ACTIVITY_TYPE_REJECT_ACTIVITY", + "ACTIVITY_TYPE_DELETE_AUTHENTICATORS", + "ACTIVITY_TYPE_CREATE_AUTHENTICATORS", + "ACTIVITY_TYPE_CREATE_PRIVATE_KEY_TAG", + "ACTIVITY_TYPE_DELETE_PRIVATE_KEY_TAGS", + "ACTIVITY_TYPE_SET_PAYMENT_METHOD", + "ACTIVITY_TYPE_ACTIVATE_BILLING_TIER", + "ACTIVITY_TYPE_DELETE_PAYMENT_METHOD", + "ACTIVITY_TYPE_CREATE_POLICY_V2", + "ACTIVITY_TYPE_CREATE_POLICY_V3", + "ACTIVITY_TYPE_CREATE_API_ONLY_USERS", + "ACTIVITY_TYPE_UPDATE_ROOT_QUORUM", + "ACTIVITY_TYPE_UPDATE_USER_TAG", + "ACTIVITY_TYPE_UPDATE_PRIVATE_KEY_TAG", + "ACTIVITY_TYPE_CREATE_AUTHENTICATORS_V2", + "ACTIVITY_TYPE_CREATE_ORGANIZATION_V2", + "ACTIVITY_TYPE_CREATE_USERS_V2", + "ACTIVITY_TYPE_ACCEPT_INVITATION_V2", + "ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION", + "ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V2", + "ACTIVITY_TYPE_UPDATE_ALLOWED_ORIGINS", + "ACTIVITY_TYPE_CREATE_PRIVATE_KEYS_V2", + "ACTIVITY_TYPE_UPDATE_USER", + "ACTIVITY_TYPE_UPDATE_POLICY", + "ACTIVITY_TYPE_SET_PAYMENT_METHOD_V2", + "ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V3", + "ACTIVITY_TYPE_CREATE_WALLET", + "ACTIVITY_TYPE_CREATE_WALLET_ACCOUNTS", + "ACTIVITY_TYPE_INIT_USER_EMAIL_RECOVERY", + "ACTIVITY_TYPE_RECOVER_USER", + "ACTIVITY_TYPE_SET_ORGANIZATION_FEATURE", + "ACTIVITY_TYPE_REMOVE_ORGANIZATION_FEATURE", + "ACTIVITY_TYPE_SIGN_RAW_PAYLOAD_V2", + "ACTIVITY_TYPE_SIGN_TRANSACTION_V2", + "ACTIVITY_TYPE_EXPORT_PRIVATE_KEY", + "ACTIVITY_TYPE_EXPORT_WALLET", + "ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V4", + "ACTIVITY_TYPE_EMAIL_AUTH", + "ACTIVITY_TYPE_EXPORT_WALLET_ACCOUNT", + "ACTIVITY_TYPE_INIT_IMPORT_WALLET", + "ACTIVITY_TYPE_IMPORT_WALLET", + "ACTIVITY_TYPE_INIT_IMPORT_PRIVATE_KEY", + "ACTIVITY_TYPE_IMPORT_PRIVATE_KEY", + "ACTIVITY_TYPE_CREATE_POLICIES", + "ACTIVITY_TYPE_SIGN_RAW_PAYLOADS", + "ACTIVITY_TYPE_CREATE_READ_ONLY_SESSION", + "ACTIVITY_TYPE_CREATE_OAUTH_PROVIDERS", + "ACTIVITY_TYPE_DELETE_OAUTH_PROVIDERS", + "ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V5", + "ACTIVITY_TYPE_OAUTH", + "ACTIVITY_TYPE_CREATE_API_KEYS_V2", + "ACTIVITY_TYPE_CREATE_READ_WRITE_SESSION", + "ACTIVITY_TYPE_EMAIL_AUTH_V2", + "ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V6", + "ACTIVITY_TYPE_DELETE_PRIVATE_KEYS", + "ACTIVITY_TYPE_DELETE_WALLETS", + "ACTIVITY_TYPE_CREATE_READ_WRITE_SESSION_V2", + "ACTIVITY_TYPE_DELETE_SUB_ORGANIZATION", + "ACTIVITY_TYPE_INIT_OTP_AUTH", + "ACTIVITY_TYPE_OTP_AUTH", + "ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V7", + "ACTIVITY_TYPE_UPDATE_WALLET", + "ACTIVITY_TYPE_UPDATE_POLICY_V2", + "ACTIVITY_TYPE_CREATE_USERS_V3", + "ACTIVITY_TYPE_INIT_OTP_AUTH_V2", + "ACTIVITY_TYPE_INIT_OTP", + "ACTIVITY_TYPE_VERIFY_OTP", + "ACTIVITY_TYPE_OTP_LOGIN", + "ACTIVITY_TYPE_STAMP_LOGIN", + "ACTIVITY_TYPE_OAUTH_LOGIN", + "ACTIVITY_TYPE_UPDATE_USER_NAME", + "ACTIVITY_TYPE_UPDATE_USER_EMAIL", + "ACTIVITY_TYPE_UPDATE_USER_PHONE_NUMBER", + "ACTIVITY_TYPE_INIT_FIAT_ON_RAMP", + "ACTIVITY_TYPE_CREATE_SMART_CONTRACT_INTERFACE", + "ACTIVITY_TYPE_DELETE_SMART_CONTRACT_INTERFACE", + "ACTIVITY_TYPE_ENABLE_AUTH_PROXY", + "ACTIVITY_TYPE_DISABLE_AUTH_PROXY", + "ACTIVITY_TYPE_UPDATE_AUTH_PROXY_CONFIG", + "ACTIVITY_TYPE_CREATE_OAUTH2_CREDENTIAL", + "ACTIVITY_TYPE_UPDATE_OAUTH2_CREDENTIAL", + "ACTIVITY_TYPE_DELETE_OAUTH2_CREDENTIAL", + "ACTIVITY_TYPE_OAUTH2_AUTHENTICATE", + "ACTIVITY_TYPE_DELETE_WALLET_ACCOUNTS", + "ACTIVITY_TYPE_DELETE_POLICIES", + "ACTIVITY_TYPE_ETH_SEND_RAW_TRANSACTION", + "ACTIVITY_TYPE_ETH_SEND_TRANSACTION", + "ACTIVITY_TYPE_CREATE_FIAT_ON_RAMP_CREDENTIAL", + "ACTIVITY_TYPE_UPDATE_FIAT_ON_RAMP_CREDENTIAL", + "ACTIVITY_TYPE_DELETE_FIAT_ON_RAMP_CREDENTIAL", + "ACTIVITY_TYPE_EMAIL_AUTH_V3", + "ACTIVITY_TYPE_INIT_USER_EMAIL_RECOVERY_V2", + "ACTIVITY_TYPE_INIT_OTP_AUTH_V3", + "ACTIVITY_TYPE_INIT_OTP_V2", + "ACTIVITY_TYPE_UPSERT_GAS_USAGE_CONFIG", + "ACTIVITY_TYPE_CREATE_TVC_APP", + "ACTIVITY_TYPE_CREATE_TVC_DEPLOYMENT", + "ACTIVITY_TYPE_CREATE_TVC_MANIFEST_APPROVALS", + "ACTIVITY_TYPE_SOL_SEND_TRANSACTION", + "ACTIVITY_TYPE_INIT_OTP_V3", + "ACTIVITY_TYPE_VERIFY_OTP_V2", + "ACTIVITY_TYPE_OTP_LOGIN_V2", + "ACTIVITY_TYPE_UPDATE_ORGANIZATION_NAME", + "ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V8", + "ACTIVITY_TYPE_CREATE_OAUTH_PROVIDERS_V2", + "ACTIVITY_TYPE_CREATE_USERS_V4", + "ACTIVITY_TYPE_CREATE_WEBHOOK_ENDPOINT", + "ACTIVITY_TYPE_UPDATE_WEBHOOK_ENDPOINT", + "ACTIVITY_TYPE_DELETE_WEBHOOK_ENDPOINT", + "ACTIVITY_TYPE_SET_IP_ALLOWLIST", + "ACTIVITY_TYPE_REMOVE_IP_ALLOWLIST", + "ACTIVITY_TYPE_UPDATE_TVC_APP_LIVE_DEPLOYMENT", + "ACTIVITY_TYPE_DELETE_TVC_DEPLOYMENT", + "ACTIVITY_TYPE_DELETE_TVC_APP_AND_DEPLOYMENTS", + "ACTIVITY_TYPE_RESTORE_TVC_DEPLOYMENT", + "ACTIVITY_TYPE_SPARK_SIGN_FROST", + "ACTIVITY_TYPE_SPARK_PREPARE_TRANSFER", + "ACTIVITY_TYPE_SPARK_CLAIM_TRANSFER", + "ACTIVITY_TYPE_SPARK_PREPARE_LIGHTNING_RECEIVE", + "ACTIVITY_TYPE_POST_TVC_QUORUM_KEY_SHARE", + "ACTIVITY_TYPE_ETH_SEND_TRANSACTION_V2", + "ACTIVITY_TYPE_CREATE_MFA_POLICY", + "ACTIVITY_TYPE_UPDATE_MFA_POLICY", + "ACTIVITY_TYPE_DELETE_MFA_POLICY", + "ACTIVITY_TYPE_CREATE_SESSION_PROFILE", + "ACTIVITY_TYPE_EARN_DEPLOY_WRAPPER", + "ACTIVITY_TYPE_EARN_DEPOSIT", + "ACTIVITY_TYPE_EARN_WITHDRAW", + "ACTIVITY_TYPE_EARN_SET_WRAPPER_STATE", + "ACTIVITY_TYPE_CLAIM_EARN_FEES" + ] + }, + "AddressFormat": { + "type": "string", + "enum": [ + "ADDRESS_FORMAT_UNCOMPRESSED", + "ADDRESS_FORMAT_COMPRESSED", + "ADDRESS_FORMAT_ETHEREUM", + "ADDRESS_FORMAT_SOLANA", + "ADDRESS_FORMAT_COSMOS", + "ADDRESS_FORMAT_TRON", + "ADDRESS_FORMAT_SUI", + "ADDRESS_FORMAT_APTOS", + "ADDRESS_FORMAT_BITCOIN_MAINNET_P2PKH", + "ADDRESS_FORMAT_BITCOIN_MAINNET_P2SH", + "ADDRESS_FORMAT_BITCOIN_MAINNET_P2WPKH", + "ADDRESS_FORMAT_BITCOIN_MAINNET_P2WSH", + "ADDRESS_FORMAT_BITCOIN_MAINNET_P2TR", + "ADDRESS_FORMAT_BITCOIN_TESTNET_P2PKH", + "ADDRESS_FORMAT_BITCOIN_TESTNET_P2SH", + "ADDRESS_FORMAT_BITCOIN_TESTNET_P2WPKH", + "ADDRESS_FORMAT_BITCOIN_TESTNET_P2WSH", + "ADDRESS_FORMAT_BITCOIN_TESTNET_P2TR", + "ADDRESS_FORMAT_BITCOIN_SIGNET_P2PKH", + "ADDRESS_FORMAT_BITCOIN_SIGNET_P2SH", + "ADDRESS_FORMAT_BITCOIN_SIGNET_P2WPKH", + "ADDRESS_FORMAT_BITCOIN_SIGNET_P2WSH", + "ADDRESS_FORMAT_BITCOIN_SIGNET_P2TR", + "ADDRESS_FORMAT_BITCOIN_REGTEST_P2PKH", + "ADDRESS_FORMAT_BITCOIN_REGTEST_P2SH", + "ADDRESS_FORMAT_BITCOIN_REGTEST_P2WPKH", + "ADDRESS_FORMAT_BITCOIN_REGTEST_P2WSH", + "ADDRESS_FORMAT_BITCOIN_REGTEST_P2TR", + "ADDRESS_FORMAT_SEI", + "ADDRESS_FORMAT_XLM", + "ADDRESS_FORMAT_DOGE_MAINNET", + "ADDRESS_FORMAT_DOGE_TESTNET", + "ADDRESS_FORMAT_TON_V3R2", + "ADDRESS_FORMAT_TON_V4R2", + "ADDRESS_FORMAT_TON_V5R1", + "ADDRESS_FORMAT_XRP", + "ADDRESS_FORMAT_SPARK_MAINNET", + "ADDRESS_FORMAT_SPARK_REGTEST" ] }, - "CreateInvitationsIntent": { + "Any": { "type": "object", "properties": { - "invitations": { - "type": "array", - "items": { - "$ref": "#/components/schemas/InvitationParams" - }, - "description": "A list of Invitations." + "@type": { + "type": "string" } }, - "required": [ - "invitations" - ] + "additionalProperties": {} }, - "CreateInvitationsRequest": { + "ApiKey": { "type": "object", "properties": { - "type": { - "type": "string", - "enum": [ - "ACTIVITY_TYPE_CREATE_INVITATIONS" - ] + "credential": { + "$ref": "#/components/schemas/external.data.v1.Credential" }, - "timestampMs": { + "apiKeyId": { "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + "description": "Unique identifier for a given API Key." }, - "organizationId": { + "apiKeyName": { "type": "string", - "description": "Unique identifier for a given Organization." + "description": "Human-readable name for an API Key." }, - "parameters": { - "$ref": "#/components/schemas/CreateInvitationsIntent" + "createdAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" }, - "generateAppProofs": { - "type": "boolean", + "updatedAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + }, + "expirationSeconds": { + "type": "string", + "format": "uint64", + "description": "Optional window (in seconds) indicating how long the API Key should last.", "nullable": true } }, "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" + "credential", + "apiKeyId", + "apiKeyName", + "createdAt", + "updatedAt" ] }, - "CreateInvitationsResult": { - "type": "object", - "properties": { - "invitationIds": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of Invitation IDs" - } - }, - "required": [ - "invitationIds" + "ApiKeyCurve": { + "type": "string", + "enum": [ + "API_KEY_CURVE_P256", + "API_KEY_CURVE_SECP256K1", + "API_KEY_CURVE_ED25519" ] }, - "CreateMfaPolicyIntent": { + "ApiKeyParams": { "type": "object", "properties": { - "userId": { - "type": "string", - "description": "The ID of the User to add the MFA Policy to." - }, - "mfaPolicyName": { + "apiKeyName": { "type": "string", - "description": "Human-readable name for a Policy." + "description": "Human-readable name for an API Key." }, - "condition": { + "publicKey": { "type": "string", - "description": "A condition expression that evaluates to true or false, determining when this MFA policy applies." - }, - "requiredAuthenticationMethods": { - "type": "array", - "items": { - "$ref": "#/components/schemas/RequiredAuthenticationMethodParams" - }, - "description": "An ordered list of authentication requirements. Each requirement must be satisfied sequentially to complete MFA." - }, - "order": { - "type": "integer", - "format": "int64", - "description": "The order in which this MFA policy is evaluated, starting from 0, relative to other MFA policies. Lower order values are evaluated first." + "description": "The public component of a cryptographic key pair used to sign messages and transactions." }, - "notes": { + "expirationSeconds": { "type": "string", - "description": "Notes for an MFA Policy.", + "description": "Optional window (in seconds) indicating how long the API Key should last.", "nullable": true } }, - "required": [ - "userId", - "mfaPolicyName", - "condition", - "requiredAuthenticationMethods", - "order" - ] + "required": ["apiKeyName", "publicKey"] }, - "CreateMfaPolicyRequest": { + "ApiKeyParamsV2": { "type": "object", "properties": { - "type": { + "apiKeyName": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_CREATE_MFA_POLICY" - ] + "description": "Human-readable name for an API Key." }, - "timestampMs": { + "publicKey": { "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + "description": "The public component of a cryptographic key pair used to sign messages and transactions." }, - "organizationId": { - "type": "string", - "description": "Unique identifier for a given Organization." + "curveType": { + "$ref": "#/components/schemas/ApiKeyCurve" }, - "parameters": { - "$ref": "#/components/schemas/CreateMfaPolicyIntent" - } - }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] - }, - "CreateMfaPolicyResult": { - "type": "object", - "properties": { - "mfaPolicyId": { + "expirationSeconds": { "type": "string", - "description": "Unique identifier for a given MFA Policy." + "description": "Optional window (in seconds) indicating how long the API Key should last.", + "nullable": true } }, - "required": [ - "mfaPolicyId" - ] + "required": ["apiKeyName", "publicKey", "curveType"] }, - "CreateOauth2CredentialIntent": { + "ApiOnlyUserParams": { "type": "object", "properties": { - "provider": { - "$ref": "#/components/schemas/Oauth2Provider" - }, - "clientId": { + "userName": { "type": "string", - "description": "The Client ID issued by the OAuth 2.0 provider" + "description": "The name of the new API-only User." }, - "encryptedClientSecret": { + "userEmail": { "type": "string", - "description": "The client secret issued by the OAuth 2.0 provider encrypted to the TLS Fetcher quorum key" + "description": "The email address for this API-only User (optional).", + "nullable": true + }, + "userTags": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of tags assigned to the new API-only User. This field, if not needed, should be an empty array in your request body." + }, + "apiKeys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ApiKeyParams" + }, + "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." } }, - "required": [ - "provider", - "clientId", - "encryptedClientSecret" - ] + "required": ["userName", "userTags", "apiKeys"] }, - "CreateOauth2CredentialRequest": { + "AppProof": { "type": "object", "properties": { - "type": { - "type": "string", - "enum": [ - "ACTIVITY_TYPE_CREATE_OAUTH2_CREDENTIAL" - ] + "scheme": { + "$ref": "#/components/schemas/data.v1.SignatureScheme" }, - "timestampMs": { + "publicKey": { "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + "description": "Ephemeral public key." }, - "organizationId": { + "proofPayload": { "type": "string", - "description": "Unique identifier for a given Organization." - }, - "parameters": { - "$ref": "#/components/schemas/CreateOauth2CredentialIntent" + "description": "JSON serialized AppProofPayload." }, - "generateAppProofs": { - "type": "boolean", - "nullable": true - } - }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] - }, - "CreateOauth2CredentialResult": { - "type": "object", - "properties": { - "oauth2CredentialId": { + "signature": { "type": "string", - "description": "Unique identifier of the OAuth 2.0 credential that was created" + "description": "Signature over hashed proof_payload." } }, - "required": [ - "oauth2CredentialId" - ] + "required": ["scheme", "publicKey", "proofPayload", "signature"] }, - "CreateOauthProvidersIntent": { + "AppStatus": { "type": "object", "properties": { - "userId": { + "appId": { "type": "string", - "description": "The ID of the User to add an Oauth provider to" + "description": "Unique identifier for this TVC App" }, - "oauthProviders": { + "deployments": { "type": "array", "items": { - "$ref": "#/components/schemas/OauthProviderParams" + "$ref": "#/components/schemas/DeploymentStatus" }, - "description": "A list of Oauth providers." + "description": "List of deployment statuses for this app" + }, + "targetedDeploymentId": { + "type": "string", + "description": "The deployment ID currently serving traffic for this app" } }, - "required": [ - "userId", - "oauthProviders" - ] + "required": ["appId", "deployments", "targetedDeploymentId"] }, - "CreateOauthProvidersIntentV2": { + "ApproveActivityIntent": { "type": "object", "properties": { - "userId": { + "fingerprint": { "type": "string", - "description": "The ID of the User to add an Oauth provider to" - }, - "oauthProviders": { - "type": "array", - "items": { - "$ref": "#/components/schemas/OauthProviderParamsV2" - }, - "description": "A list of Oauth providers." - } - }, - "required": [ - "userId", - "oauthProviders" - ] + "description": "An artifact verifying a User's action." + } + }, + "required": ["fingerprint"] }, - "CreateOauthProvidersRequest": { + "ApproveActivityRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_CREATE_OAUTH_PROVIDERS_V2" - ] + "enum": ["ACTIVITY_TYPE_APPROVE_ACTIVITY"] }, "timestampMs": { "type": "string", @@ -6802,415 +5409,418 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/components/schemas/CreateOauthProvidersIntentV2" + "$ref": "#/components/schemas/ApproveActivityIntent" }, "generateAppProofs": { "type": "boolean", "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "CreateOauthProvidersResult": { + "AssetBalance": { "type": "object", "properties": { - "providerIds": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of unique identifiers for Oauth Providers" + "caip19": { + "type": "string", + "description": "The caip-19 asset identifier" + }, + "symbol": { + "type": "string", + "description": "The asset symbol" + }, + "balance": { + "type": "string", + "description": "The balance in atomic units" + }, + "decimals": { + "type": "integer", + "format": "int32", + "description": "The number of decimals this asset uses" + }, + "display": { + "$ref": "#/components/schemas/AssetBalanceDisplay" + }, + "name": { + "type": "string", + "description": "The asset name" } - }, - "required": [ - "providerIds" - ] + } }, - "CreateOauthProvidersResultV2": { + "AssetBalanceDisplay": { "type": "object", "properties": { - "providerIds": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of unique identifiers for Oauth Providers" + "usd": { + "type": "string", + "description": "USD value for display purposes only. Do not do any arithmetic or calculations with these, as the results could be imprecise." + }, + "crypto": { + "type": "string", + "description": "Normalized crypto value for display purposes only. Do not do any arithmetic or calculations with these, as the results could be imprecise." } - }, - "required": [ - "providerIds" - ] + } }, - "CreateOrganizationIntent": { + "AssetMetadata": { "type": "object", "properties": { - "organizationName": { + "caip19": { "type": "string", - "description": "Human-readable name for an Organization." + "description": "The caip-19 asset identifier" }, - "rootEmail": { + "symbol": { "type": "string", - "description": "The root user's email address." + "description": "The asset symbol" }, - "rootAuthenticator": { - "$ref": "#/components/schemas/AuthenticatorParams" + "decimals": { + "type": "integer", + "format": "int32", + "description": "The number of decimals this asset uses" }, - "rootUserId": { + "logoUrl": { "type": "string", - "description": "Unique identifier for the root user object.", - "nullable": true + "description": "The url of the asset logo" + }, + "name": { + "type": "string", + "description": "The asset name" } - }, - "required": [ - "organizationName", - "rootEmail", - "rootAuthenticator" - ] + } }, - "CreateOrganizationIntentV2": { + "Attestation": { "type": "object", "properties": { - "organizationName": { + "credentialId": { "type": "string", - "description": "Human-readable name for an Organization." + "description": "The cbor encoded then base64 url encoded id of the credential." }, - "rootEmail": { + "clientDataJson": { "type": "string", - "description": "The root user's email address." - }, - "rootAuthenticator": { - "$ref": "#/components/schemas/AuthenticatorParamsV2" + "description": "A base64 url encoded payload containing metadata about the signing context and the challenge." }, - "rootUserId": { + "attestationObject": { "type": "string", - "description": "Unique identifier for the root user object.", - "nullable": true + "description": "A base64 url encoded payload containing authenticator data and any attestation the webauthn provider chooses." + }, + "transports": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AuthenticatorTransport" + }, + "description": "The type of authenticator transports." } }, "required": [ - "organizationName", - "rootEmail", - "rootAuthenticator" + "credentialId", + "clientDataJson", + "attestationObject", + "transports" ] }, - "CreateOrganizationResult": { + "AuthenticationMethod": { "type": "object", "properties": { - "organizationId": { + "type": { + "$ref": "#/components/schemas/AuthenticationType" + }, + "id": { "type": "string", - "description": "Unique identifier for a given Organization." - } - }, - "required": [ - "organizationId" - ] - }, - "CreatePoliciesIntent": { - "type": "object", - "properties": { - "policies": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CreatePolicyIntentV3" - }, - "description": "An array of policy intents to be created." + "description": "Optional specific authenticator ID required (e.g., for requiring a specific session profile id)", + "nullable": true } }, - "required": [ - "policies" - ] + "required": ["type"] }, - "CreatePoliciesRequest": { + "AuthenticationMethodParams": { "type": "object", "properties": { "type": { - "type": "string", - "enum": [ - "ACTIVITY_TYPE_CREATE_POLICIES" - ] - }, - "timestampMs": { - "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + "$ref": "#/components/schemas/AuthenticationType" }, - "organizationId": { + "id": { "type": "string", - "description": "Unique identifier for a given Organization." - }, - "parameters": { - "$ref": "#/components/schemas/CreatePoliciesIntent" - }, - "generateAppProofs": { - "type": "boolean", + "description": "Optional specific authenticator ID required (e.g., UUID of a passkey authenticator). If not provided, any authenticator of the specified type can be used.", "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" + "required": ["type"] + }, + "AuthenticationType": { + "type": "string", + "enum": [ + "AUTHENTICATION_TYPE_EMAIL_OTP", + "AUTHENTICATION_TYPE_SMS_OTP", + "AUTHENTICATION_TYPE_PASSKEY", + "AUTHENTICATION_TYPE_API_KEY", + "AUTHENTICATION_TYPE_OAUTH", + "AUTHENTICATION_TYPE_SESSION" ] }, - "CreatePoliciesResult": { + "Authenticator": { "type": "object", "properties": { - "policyIds": { + "transports": { "type": "array", "items": { - "type": "string" + "$ref": "#/components/schemas/AuthenticatorTransport" }, - "description": "A list of unique identifiers for the created policies." + "description": "Types of transports that may be used by an Authenticator (e.g., USB, NFC, BLE)." + }, + "attestationType": { + "type": "string" + }, + "aaguid": { + "type": "string", + "description": "Identifier indicating the type of the Security Key." + }, + "credentialId": { + "type": "string", + "description": "Unique identifier for a WebAuthn credential." + }, + "model": { + "type": "string", + "description": "The type of Authenticator device." + }, + "credential": { + "$ref": "#/components/schemas/external.data.v1.Credential" + }, + "authenticatorId": { + "type": "string", + "description": "Unique identifier for a given Authenticator." + }, + "authenticatorName": { + "type": "string", + "description": "Human-readable name for an Authenticator." + }, + "createdAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" } }, "required": [ - "policyIds" + "transports", + "attestationType", + "aaguid", + "credentialId", + "model", + "credential", + "authenticatorId", + "authenticatorName", + "createdAt", + "updatedAt" ] }, - "CreatePolicyIntent": { + "AuthenticatorAttestationResponse": { "type": "object", "properties": { - "policyName": { - "type": "string", - "description": "Human-readable name for a Policy." + "clientDataJson": { + "type": "string" }, - "selectors": { + "attestationObject": { + "type": "string" + }, + "transports": { "type": "array", "items": { - "$ref": "#/components/schemas/Selector" - }, - "description": "A list of simple functions each including a subject, target and boolean. See Policy Engine Language section for additional details." - }, - "effect": { - "$ref": "#/components/schemas/Effect" - }, - "notes": { - "type": "string" + "$ref": "#/components/schemas/AuthenticatorTransport" + } + }, + "authenticatorAttachment": { + "type": "string", + "enum": ["cross-platform", "platform"], + "nullable": true } }, - "required": [ - "policyName", - "selectors", - "effect" - ] + "required": ["clientDataJson", "attestationObject"] }, - "CreatePolicyIntentV2": { + "AuthenticatorParams": { "type": "object", "properties": { - "policyName": { + "authenticatorName": { "type": "string", - "description": "Human-readable name for a Policy." + "description": "Human-readable name for an Authenticator." }, - "selectors": { - "type": "array", - "items": { - "$ref": "#/components/schemas/SelectorV2" - }, - "description": "A list of simple functions each including a subject, target and boolean. See Policy Engine Language section for additional details." + "userId": { + "type": "string", + "description": "Unique identifier for a given User." }, - "effect": { - "$ref": "#/components/schemas/Effect" + "attestation": { + "$ref": "#/components/schemas/PublicKeyCredentialWithAttestation" }, - "notes": { - "type": "string" + "challenge": { + "type": "string", + "description": "Challenge presented for authentication purposes." } }, - "required": [ - "policyName", - "selectors", - "effect" - ] + "required": ["authenticatorName", "userId", "attestation", "challenge"] }, - "CreatePolicyIntentV3": { + "AuthenticatorParamsV2": { "type": "object", "properties": { - "policyName": { - "type": "string", - "description": "Human-readable name for a Policy." - }, - "effect": { - "$ref": "#/components/schemas/Effect" - }, - "condition": { + "authenticatorName": { "type": "string", - "description": "The condition expression that triggers the Effect", - "nullable": true + "description": "Human-readable name for an Authenticator." }, - "consensus": { + "challenge": { "type": "string", - "description": "The consensus expression that triggers the Effect", - "nullable": true + "description": "Challenge presented for authentication purposes." }, - "notes": { - "type": "string", - "description": "Notes for a Policy." + "attestation": { + "$ref": "#/components/schemas/Attestation" } }, - "required": [ - "policyName", - "effect", - "notes" + "required": ["authenticatorName", "challenge", "attestation"] + }, + "AuthenticatorTransport": { + "type": "string", + "enum": [ + "AUTHENTICATOR_TRANSPORT_BLE", + "AUTHENTICATOR_TRANSPORT_INTERNAL", + "AUTHENTICATOR_TRANSPORT_NFC", + "AUTHENTICATOR_TRANSPORT_USB", + "AUTHENTICATOR_TRANSPORT_HYBRID" ] }, - "CreatePolicyRequest": { + "BootProof": { "type": "object", "properties": { - "type": { + "ephemeralPublicKeyHex": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_CREATE_POLICY_V3" - ] + "description": "The hex encoded Ephemeral Public Key." }, - "timestampMs": { + "awsAttestationDocB64": { "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + "description": "The DER encoded COSE Sign1 struct Attestation doc." }, - "organizationId": { + "qosManifestB64": { "type": "string", - "description": "Unique identifier for a given Organization." + "description": "The base64 encoded QOS manifest. Encoding depends on qos_manifest_version." }, - "parameters": { - "$ref": "#/components/schemas/CreatePolicyIntentV3" + "qosManifestEnvelopeB64": { + "type": "string", + "description": "The base64 encoded QOS manifest envelope. Encoding depends on qos_manifest_version." }, - "generateAppProofs": { - "type": "boolean", + "deploymentLabel": { + "type": "string", + "description": "The label under which the enclave app was deployed." + }, + "enclaveApp": { + "type": "string", + "description": "Name of the enclave app" + }, + "owner": { + "type": "string", + "description": "Owner of the app i.e. 'tkhq'" + }, + "createdAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + }, + "qosManifestVersion": { + "type": "string", + "description": "QOS manifest schema version.", "nullable": true } }, "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" + "ephemeralPublicKeyHex", + "awsAttestationDocB64", + "qosManifestB64", + "qosManifestEnvelopeB64", + "deploymentLabel", + "enclaveApp", + "owner", + "createdAt" ] }, - "CreatePolicyResult": { + "BootProofResponse": { "type": "object", "properties": { - "policyId": { - "type": "string", - "description": "Unique identifier for a given Policy." + "bootProof": { + "$ref": "#/components/schemas/BootProof" } }, - "required": [ - "policyId" - ] + "required": ["bootProof"] }, - "CreatePrivateKeyTagIntent": { + "ClientSignature": { "type": "object", "properties": { - "privateKeyTagName": { + "publicKey": { "type": "string", - "description": "Human-readable name for a Private Key Tag." + "description": "The public component of a cryptographic key pair used to create the signature." }, - "privateKeyIds": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of Private Key IDs." - } - }, - "required": [ - "privateKeyTagName", - "privateKeyIds" - ] - }, - "CreatePrivateKeyTagRequest": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "ACTIVITY_TYPE_CREATE_PRIVATE_KEY_TAG" - ] + "scheme": { + "$ref": "#/components/schemas/ClientSignatureScheme" }, - "timestampMs": { + "message": { "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + "description": "The message that was signed." }, - "organizationId": { + "signature": { "type": "string", - "description": "Unique identifier for a given Organization." - }, - "parameters": { - "$ref": "#/components/schemas/CreatePrivateKeyTagIntent" - }, - "generateAppProofs": { - "type": "boolean", - "nullable": true + "description": "The cryptographic signature over the message." } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["publicKey", "scheme", "message", "signature"] }, - "CreatePrivateKeyTagResult": { + "ClientSignatureScheme": { + "type": "string", + "enum": ["CLIENT_SIGNATURE_SCHEME_API_P256"] + }, + "Config": { "type": "object", "properties": { - "privateKeyTagId": { - "type": "string", - "description": "Unique identifier for a given Private Key Tag." - }, - "privateKeyIds": { + "features": { "type": "array", "items": { - "type": "string" - }, - "description": "A list of Private Key IDs." + "$ref": "#/components/schemas/Feature" + } + }, + "quorum": { + "$ref": "#/components/schemas/external.data.v1.Quorum" } - }, - "required": [ - "privateKeyTagId", - "privateKeyIds" - ] + } }, - "CreatePrivateKeysIntent": { + "CreateApiKeysIntent": { "type": "object", "properties": { - "privateKeys": { + "apiKeys": { "type": "array", "items": { - "$ref": "#/components/schemas/PrivateKeyParams" + "$ref": "#/components/schemas/ApiKeyParams" }, - "description": "A list of Private Keys." + "description": "A list of API Keys." + }, + "userId": { + "type": "string", + "description": "Unique identifier for a given User." } }, - "required": [ - "privateKeys" - ] + "required": ["apiKeys", "userId"] }, - "CreatePrivateKeysIntentV2": { + "CreateApiKeysIntentV2": { "type": "object", "properties": { - "privateKeys": { + "apiKeys": { "type": "array", "items": { - "$ref": "#/components/schemas/PrivateKeyParams" + "$ref": "#/components/schemas/ApiKeyParamsV2" }, - "description": "A list of Private Keys." + "description": "A list of API Keys." + }, + "userId": { + "type": "string", + "description": "Unique identifier for a given User." } }, - "required": [ - "privateKeys" - ] + "required": ["apiKeys", "userId"] }, - "CreatePrivateKeysRequest": { + "CreateApiKeysRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_CREATE_PRIVATE_KEYS_V2" - ] + "enum": ["ACTIVITY_TYPE_CREATE_API_KEYS_V2"] }, "timestampMs": { "type": "string", @@ -7221,61 +5831,94 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/components/schemas/CreatePrivateKeysIntentV2" + "$ref": "#/components/schemas/CreateApiKeysIntentV2" }, "generateAppProofs": { "type": "boolean", "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "CreateApiKeysResult": { + "type": "object", + "properties": { + "apiKeyIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of API Key IDs." + } + }, + "required": ["apiKeyIds"] + }, + "CreateApiOnlyUsersIntent": { + "type": "object", + "properties": { + "apiOnlyUsers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ApiOnlyUserParams" + }, + "description": "A list of API-only Users to create." + } + }, + "required": ["apiOnlyUsers"] }, - "CreatePrivateKeysResult": { + "CreateApiOnlyUsersResult": { "type": "object", "properties": { - "privateKeyIds": { + "userIds": { "type": "array", "items": { "type": "string" }, - "description": "A list of Private Key IDs." + "description": "A list of API-only User IDs." } }, - "required": [ - "privateKeyIds" - ] + "required": ["userIds"] }, - "CreatePrivateKeysResultV2": { + "CreateAuthenticatorsIntent": { "type": "object", "properties": { - "privateKeys": { + "authenticators": { "type": "array", "items": { - "$ref": "#/components/schemas/PrivateKeyResult" + "$ref": "#/components/schemas/AuthenticatorParams" }, - "description": "A list of Private Key IDs and addresses." + "description": "A list of Authenticators." + }, + "userId": { + "type": "string", + "description": "Unique identifier for a given User." } }, - "required": [ - "privateKeys" - ] + "required": ["authenticators", "userId"] }, - "CreateReadOnlySessionIntent": { - "type": "object" + "CreateAuthenticatorsIntentV2": { + "type": "object", + "properties": { + "authenticators": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AuthenticatorParamsV2" + }, + "description": "A list of Authenticators." + }, + "userId": { + "type": "string", + "description": "Unique identifier for a given User." + } + }, + "required": ["authenticators", "userId"] }, - "CreateReadOnlySessionRequest": { + "CreateAuthenticatorsRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_CREATE_READ_ONLY_SESSION" - ] + "enum": ["ACTIVITY_TYPE_CREATE_AUTHENTICATORS_V2"] }, "timestampMs": { "type": "string", @@ -7286,125 +5929,69 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/components/schemas/CreateReadOnlySessionIntent" + "$ref": "#/components/schemas/CreateAuthenticatorsIntentV2" }, "generateAppProofs": { "type": "boolean", "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "CreateReadOnlySessionResult": { + "CreateAuthenticatorsResult": { "type": "object", "properties": { - "organizationId": { - "type": "string", - "description": "Unique identifier for a given Organization. If the request is being made by a user and their Sub-Organization ID is unknown, this can be the Parent Organization ID. However, using the Sub-Organization ID is preferred due to performance reasons." - }, - "organizationName": { - "type": "string", - "description": "Human-readable name for an Organization." - }, - "userId": { - "type": "string", - "description": "Unique identifier for a given User." - }, - "username": { - "type": "string", - "description": "Human-readable name for a User." - }, - "session": { - "type": "string", - "description": "String representing a read only session" - }, - "sessionExpiry": { - "type": "string", - "format": "uint64", - "description": "UTC timestamp in seconds representing the expiry time for the read only session." + "authenticatorIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of Authenticator IDs." } }, - "required": [ - "organizationId", - "organizationName", - "userId", - "username", - "session", - "sessionExpiry" - ] + "required": ["authenticatorIds"] }, - "CreateReadWriteSessionIntent": { + "CreateFiatOnRampCredentialIntent": { "type": "object", "properties": { - "targetPublicKey": { - "type": "string", - "description": "Client-side public key generated by the user, to which the read write session bundle (credentials) will be encrypted." - }, - "email": { - "type": "string", - "description": "Email of the user to create a read write session for" - }, - "apiKeyName": { - "type": "string", - "description": "Optional human-readable name for an API Key. If none provided, default to Read Write Session - ", - "nullable": true + "onrampProvider": { + "$ref": "#/components/schemas/FiatOnRampProvider" }, - "expirationSeconds": { + "projectId": { "type": "string", - "description": "Expiration window (in seconds) indicating how long the API key is valid for. If not provided, a default of 15 minutes will be used.", + "description": "Project ID for the on-ramp provider. Some providers, like Coinbase, require this additional identifier", "nullable": true - } - }, - "required": [ - "targetPublicKey", - "email" - ] - }, - "CreateReadWriteSessionIntentV2": { - "type": "object", - "properties": { - "targetPublicKey": { - "type": "string", - "description": "Client-side public key generated by the user, to which the read write session bundle (credentials) will be encrypted." }, - "userId": { + "publishableApiKey": { "type": "string", - "description": "Optional unique identifier for a given User. If none provided, the read write session will be created for the user who is making the request.", - "nullable": true + "description": "Publishable API key for the on-ramp provider" }, - "apiKeyName": { + "encryptedSecretApiKey": { "type": "string", - "description": "Optional human-readable name for an API Key. If none provided, default to Read Write Session - ", - "nullable": true + "description": "Secret API key for the on-ramp provider encrypted to our on-ramp encryption public key" }, - "expirationSeconds": { + "encryptedPrivateApiKey": { "type": "string", - "description": "Expiration window (in seconds) indicating how long the API key is valid for. If not provided, a default of 15 minutes will be used.", + "description": "Private API key for the on-ramp provider encrypted to our on-ramp encryption public key. Some providers, like Coinbase, require this additional key.", "nullable": true }, - "invalidateExisting": { + "sandboxMode": { "type": "boolean", - "description": "Invalidate all other previously generated ReadWriteSession API keys", - "nullable": true + "description": "If the on-ramp credential is a sandbox credential" } }, "required": [ - "targetPublicKey" + "onrampProvider", + "publishableApiKey", + "encryptedSecretApiKey" ] }, - "CreateReadWriteSessionRequest": { + "CreateFiatOnRampCredentialRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_CREATE_READ_WRITE_SESSION_V2" - ] + "enum": ["ACTIVITY_TYPE_CREATE_FIAT_ON_RAMP_CREDENTIAL"] }, "timestampMs": { "type": "string", @@ -7415,129 +6002,123 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/components/schemas/CreateReadWriteSessionIntentV2" + "$ref": "#/components/schemas/CreateFiatOnRampCredentialIntent" }, "generateAppProofs": { "type": "boolean", "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "CreateReadWriteSessionResult": { + "CreateFiatOnRampCredentialResult": { "type": "object", "properties": { - "organizationId": { - "type": "string", - "description": "Unique identifier for a given Organization. If the request is being made by a user and their Sub-Organization ID is unknown, this can be the Parent Organization ID. However, using the Sub-Organization ID is preferred due to performance reasons." - }, - "organizationName": { - "type": "string", - "description": "Human-readable name for an Organization." - }, - "userId": { - "type": "string", - "description": "Unique identifier for a given User." - }, - "username": { - "type": "string", - "description": "Human-readable name for a User." - }, - "apiKeyId": { - "type": "string", - "description": "Unique identifier for the created API key." - }, - "credentialBundle": { + "fiatOnRampCredentialId": { "type": "string", - "description": "HPKE encrypted credential bundle" + "description": "Unique identifier of the Fiat On-Ramp credential that was created" } }, - "required": [ - "organizationId", - "organizationName", - "userId", - "username", - "apiKeyId", - "credentialBundle" - ] + "required": ["fiatOnRampCredentialId"] }, - "CreateReadWriteSessionResultV2": { + "CreateInvitationsIntent": { "type": "object", "properties": { - "organizationId": { - "type": "string", - "description": "Unique identifier for a given Organization. If the request is being made by a user and their Sub-Organization ID is unknown, this can be the Parent Organization ID. However, using the Sub-Organization ID is preferred due to performance reasons." - }, - "organizationName": { + "invitations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/InvitationParams" + }, + "description": "A list of Invitations." + } + }, + "required": ["invitations"] + }, + "CreateInvitationsRequest": { + "type": "object", + "properties": { + "type": { "type": "string", - "description": "Human-readable name for an Organization." + "enum": ["ACTIVITY_TYPE_CREATE_INVITATIONS"] }, - "userId": { + "timestampMs": { "type": "string", - "description": "Unique identifier for a given User." + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, - "username": { + "organizationId": { "type": "string", - "description": "Human-readable name for a User." + "description": "Unique identifier for a given Organization." }, - "apiKeyId": { - "type": "string", - "description": "Unique identifier for the created API key." + "parameters": { + "$ref": "#/components/schemas/CreateInvitationsIntent" }, - "credentialBundle": { - "type": "string", - "description": "HPKE encrypted credential bundle" + "generateAppProofs": { + "type": "boolean", + "nullable": true } }, - "required": [ - "organizationId", - "organizationName", - "userId", - "username", - "apiKeyId", - "credentialBundle" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "CreateSessionProfileIntent": { + "CreateInvitationsResult": { "type": "object", "properties": { - "sessionProfileName": { + "invitationIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of Invitation IDs" + } + }, + "required": ["invitationIds"] + }, + "CreateMfaPolicyIntent": { + "type": "object", + "properties": { + "userId": { "type": "string", - "description": "Human-readable name for a Session Profile." + "description": "The ID of the User to add the MFA Policy to." }, - "scope": { + "mfaPolicyName": { "type": "string", - "description": "The scope string that defines the permissions for this Session Profile." + "description": "Human-readable name for a Policy." }, - "expirationSeconds": { + "condition": { "type": "string", - "description": "The duration in seconds for which sessions created with this Session Profile are valid. If not set, expiration will be determined by the value passed in to the intent of login activities.", - "nullable": true + "description": "A condition expression that evaluates to true or false, determining when this MFA policy applies." + }, + "requiredAuthenticationMethods": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RequiredAuthenticationMethodParams" + }, + "description": "An ordered list of authentication requirements. Each requirement must be satisfied sequentially to complete MFA." + }, + "order": { + "type": "integer", + "format": "int64", + "description": "The order in which this MFA policy is evaluated, starting from 0, relative to other MFA policies. Lower order values are evaluated first." }, "notes": { "type": "string", - "description": "Notes for a Session Profile.", + "description": "Notes for an MFA Policy.", "nullable": true } }, "required": [ - "sessionProfileName", - "scope" + "userId", + "mfaPolicyName", + "condition", + "requiredAuthenticationMethods", + "order" ] }, - "CreateSessionProfileRequest": { + "CreateMfaPolicyRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_CREATE_SESSION_PROFILE" - ] + "enum": ["ACTIVITY_TYPE_CREATE_MFA_POLICY"] }, "timestampMs": { "type": "string", @@ -7548,66 +6129,44 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/components/schemas/CreateSessionProfileIntent" + "$ref": "#/components/schemas/CreateMfaPolicyIntent" } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "CreateSessionProfileResult": { + "CreateMfaPolicyResult": { "type": "object", "properties": { - "sessionProfileId": { + "mfaPolicyId": { "type": "string", - "description": "Unique identifier for a given Session Profile." + "description": "Unique identifier for a given MFA Policy." } }, - "required": [ - "sessionProfileId" - ] + "required": ["mfaPolicyId"] }, - "CreateSmartContractInterfaceIntent": { + "CreateOauth2CredentialIntent": { "type": "object", "properties": { - "smartContractAddress": { - "type": "string", - "description": "Corresponding contract address or program ID" - }, - "smartContractInterface": { - "type": "string", - "description": "ABI/IDL as a JSON string. Limited to 400kb" - }, - "type": { - "$ref": "#/components/schemas/SmartContractInterfaceType" + "provider": { + "$ref": "#/components/schemas/Oauth2Provider" }, - "label": { + "clientId": { "type": "string", - "description": "Human-readable name for a Smart Contract Interface." + "description": "The Client ID issued by the OAuth 2.0 provider" }, - "notes": { + "encryptedClientSecret": { "type": "string", - "description": "Notes for a Smart Contract Interface." + "description": "The client secret issued by the OAuth 2.0 provider encrypted to the TLS Fetcher quorum key" } }, - "required": [ - "smartContractAddress", - "smartContractInterface", - "type", - "label" - ] + "required": ["provider", "clientId", "encryptedClientSecret"] }, - "CreateSmartContractInterfaceRequest": { + "CreateOauth2CredentialRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_CREATE_SMART_CONTRACT_INTERFACE" - ] + "enum": ["ACTIVITY_TYPE_CREATE_OAUTH2_CREDENTIAL"] }, "timestampMs": { "type": "string", @@ -7618,347 +6177,294 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/components/schemas/CreateSmartContractInterfaceIntent" + "$ref": "#/components/schemas/CreateOauth2CredentialIntent" }, "generateAppProofs": { "type": "boolean", "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "CreateSmartContractInterfaceResult": { + "CreateOauth2CredentialResult": { "type": "object", "properties": { - "smartContractInterfaceId": { + "oauth2CredentialId": { "type": "string", - "description": "The ID of the created Smart Contract Interface." + "description": "Unique identifier of the OAuth 2.0 credential that was created" } }, - "required": [ - "smartContractInterfaceId" - ] + "required": ["oauth2CredentialId"] }, - "CreateSubOrganizationIntent": { + "CreateOauthProvidersIntent": { "type": "object", "properties": { - "name": { + "userId": { "type": "string", - "description": "Name for this sub-organization" + "description": "The ID of the User to add an Oauth provider to" }, - "rootAuthenticator": { - "$ref": "#/components/schemas/AuthenticatorParamsV2" + "oauthProviders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OauthProviderParams" + }, + "description": "A list of Oauth providers." } }, - "required": [ - "name", - "rootAuthenticator" - ] + "required": ["userId", "oauthProviders"] }, - "CreateSubOrganizationIntentV2": { + "CreateOauthProvidersIntentV2": { "type": "object", "properties": { - "subOrganizationName": { + "userId": { "type": "string", - "description": "Name for this sub-organization" + "description": "The ID of the User to add an Oauth provider to" }, - "rootUsers": { + "oauthProviders": { "type": "array", "items": { - "$ref": "#/components/schemas/RootUserParams" + "$ref": "#/components/schemas/OauthProviderParamsV2" }, - "description": "Root users to create within this sub-organization" - }, - "rootQuorumThreshold": { - "type": "integer", - "format": "int32", - "description": "The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users" + "description": "A list of Oauth providers." } }, - "required": [ - "subOrganizationName", - "rootUsers", - "rootQuorumThreshold" - ] + "required": ["userId", "oauthProviders"] }, - "CreateSubOrganizationIntentV3": { + "CreateOauthProvidersRequest": { "type": "object", "properties": { - "subOrganizationName": { + "type": { "type": "string", - "description": "Name for this sub-organization" + "enum": ["ACTIVITY_TYPE_CREATE_OAUTH_PROVIDERS_V2"] }, - "rootUsers": { - "type": "array", - "items": { - "$ref": "#/components/schemas/RootUserParams" - }, - "description": "Root users to create within this sub-organization" + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, - "rootQuorumThreshold": { - "type": "integer", - "format": "int32", - "description": "The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users" + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." }, - "privateKeys": { + "parameters": { + "$ref": "#/components/schemas/CreateOauthProvidersIntentV2" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "CreateOauthProvidersResult": { + "type": "object", + "properties": { + "providerIds": { "type": "array", "items": { - "$ref": "#/components/schemas/PrivateKeyParams" + "type": "string" }, - "description": "A list of Private Keys." + "description": "A list of unique identifiers for Oauth Providers" } }, - "required": [ - "subOrganizationName", - "rootUsers", - "rootQuorumThreshold", - "privateKeys" - ] + "required": ["providerIds"] }, - "CreateSubOrganizationIntentV4": { + "CreateOauthProvidersResultV2": { "type": "object", "properties": { - "subOrganizationName": { - "type": "string", - "description": "Name for this sub-organization" - }, - "rootUsers": { + "providerIds": { "type": "array", "items": { - "$ref": "#/components/schemas/RootUserParams" + "type": "string" }, - "description": "Root users to create within this sub-organization" + "description": "A list of unique identifiers for Oauth Providers" + } + }, + "required": ["providerIds"] + }, + "CreateOrganizationIntent": { + "type": "object", + "properties": { + "organizationName": { + "type": "string", + "description": "Human-readable name for an Organization." }, - "rootQuorumThreshold": { - "type": "integer", - "format": "int32", - "description": "The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users" + "rootEmail": { + "type": "string", + "description": "The root user's email address." }, - "wallet": { - "$ref": "#/components/schemas/WalletParams" + "rootAuthenticator": { + "$ref": "#/components/schemas/AuthenticatorParams" }, - "disableEmailRecovery": { - "type": "boolean", - "description": "Disable email recovery for the sub-organization", + "rootUserId": { + "type": "string", + "description": "Unique identifier for the root user object.", "nullable": true + } + }, + "required": ["organizationName", "rootEmail", "rootAuthenticator"] + }, + "CreateOrganizationIntentV2": { + "type": "object", + "properties": { + "organizationName": { + "type": "string", + "description": "Human-readable name for an Organization." }, - "disableEmailAuth": { - "type": "boolean", - "description": "Disable email auth for the sub-organization", + "rootEmail": { + "type": "string", + "description": "The root user's email address." + }, + "rootAuthenticator": { + "$ref": "#/components/schemas/AuthenticatorParamsV2" + }, + "rootUserId": { + "type": "string", + "description": "Unique identifier for the root user object.", "nullable": true } }, - "required": [ - "subOrganizationName", - "rootUsers", - "rootQuorumThreshold" - ] + "required": ["organizationName", "rootEmail", "rootAuthenticator"] + }, + "CreateOrganizationResult": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + } + }, + "required": ["organizationId"] + }, + "CreatePoliciesIntent": { + "type": "object", + "properties": { + "policies": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CreatePolicyIntentV3" + }, + "description": "An array of policy intents to be created." + } + }, + "required": ["policies"] }, - "CreateSubOrganizationIntentV5": { + "CreatePoliciesRequest": { "type": "object", "properties": { - "subOrganizationName": { + "type": { "type": "string", - "description": "Name for this sub-organization" - }, - "rootUsers": { - "type": "array", - "items": { - "$ref": "#/components/schemas/RootUserParamsV2" - }, - "description": "Root users to create within this sub-organization" + "enum": ["ACTIVITY_TYPE_CREATE_POLICIES"] }, - "rootQuorumThreshold": { - "type": "integer", - "format": "int32", - "description": "The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users" + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, - "wallet": { - "$ref": "#/components/schemas/WalletParams" + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." }, - "disableEmailRecovery": { - "type": "boolean", - "description": "Disable email recovery for the sub-organization", - "nullable": true + "parameters": { + "$ref": "#/components/schemas/CreatePoliciesIntent" }, - "disableEmailAuth": { + "generateAppProofs": { "type": "boolean", - "description": "Disable email auth for the sub-organization", "nullable": true } }, - "required": [ - "subOrganizationName", - "rootUsers", - "rootQuorumThreshold" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "CreateSubOrganizationIntentV6": { + "CreatePoliciesResult": { "type": "object", "properties": { - "subOrganizationName": { - "type": "string", - "description": "Name for this sub-organization" - }, - "rootUsers": { + "policyIds": { "type": "array", "items": { - "$ref": "#/components/schemas/RootUserParamsV3" + "type": "string" }, - "description": "Root users to create within this sub-organization" - }, - "rootQuorumThreshold": { - "type": "integer", - "format": "int32", - "description": "The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users" - }, - "wallet": { - "$ref": "#/components/schemas/WalletParams" - }, - "disableEmailRecovery": { - "type": "boolean", - "description": "Disable email recovery for the sub-organization", - "nullable": true - }, - "disableEmailAuth": { - "type": "boolean", - "description": "Disable email auth for the sub-organization", - "nullable": true + "description": "A list of unique identifiers for the created policies." } }, - "required": [ - "subOrganizationName", - "rootUsers", - "rootQuorumThreshold" - ] + "required": ["policyIds"] }, - "CreateSubOrganizationIntentV7": { + "CreatePolicyIntent": { "type": "object", "properties": { - "subOrganizationName": { + "policyName": { "type": "string", - "description": "Name for this sub-organization" + "description": "Human-readable name for a Policy." }, - "rootUsers": { + "selectors": { "type": "array", "items": { - "$ref": "#/components/schemas/RootUserParamsV4" + "$ref": "#/components/schemas/Selector" }, - "description": "Root users to create within this sub-organization" - }, - "rootQuorumThreshold": { - "type": "integer", - "format": "int32", - "description": "The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users" - }, - "wallet": { - "$ref": "#/components/schemas/WalletParams" - }, - "disableEmailRecovery": { - "type": "boolean", - "description": "Disable email recovery for the sub-organization", - "nullable": true - }, - "disableEmailAuth": { - "type": "boolean", - "description": "Disable email auth for the sub-organization", - "nullable": true - }, - "disableSmsAuth": { - "type": "boolean", - "description": "Disable OTP SMS auth for the sub-organization", - "nullable": true - }, - "disableOtpEmailAuth": { - "type": "boolean", - "description": "Disable OTP email auth for the sub-organization", - "nullable": true + "description": "A list of simple functions each including a subject, target and boolean. See Policy Engine Language section for additional details." }, - "verificationToken": { - "type": "string", - "description": "Signed JWT containing a unique id, expiry, verification type, contact", - "nullable": true + "effect": { + "$ref": "#/components/schemas/Effect" }, - "clientSignature": { - "$ref": "#/components/schemas/ClientSignature" + "notes": { + "type": "string" } }, - "required": [ - "subOrganizationName", - "rootUsers", - "rootQuorumThreshold" - ] + "required": ["policyName", "selectors", "effect"] }, - "CreateSubOrganizationIntentV8": { + "CreatePolicyIntentV2": { "type": "object", "properties": { - "subOrganizationName": { + "policyName": { "type": "string", - "description": "Name for this sub-organization" + "description": "Human-readable name for a Policy." }, - "rootUsers": { + "selectors": { "type": "array", "items": { - "$ref": "#/components/schemas/RootUserParamsV5" + "$ref": "#/components/schemas/SelectorV2" }, - "description": "Root users to create within this sub-organization" - }, - "rootQuorumThreshold": { - "type": "integer", - "format": "int32", - "description": "The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users" - }, - "wallet": { - "$ref": "#/components/schemas/WalletParams" + "description": "A list of simple functions each including a subject, target and boolean. See Policy Engine Language section for additional details." }, - "disableEmailRecovery": { - "type": "boolean", - "description": "Disable email recovery for the sub-organization", - "nullable": true + "effect": { + "$ref": "#/components/schemas/Effect" }, - "disableEmailAuth": { - "type": "boolean", - "description": "Disable email auth for the sub-organization", - "nullable": true + "notes": { + "type": "string" + } + }, + "required": ["policyName", "selectors", "effect"] + }, + "CreatePolicyIntentV3": { + "type": "object", + "properties": { + "policyName": { + "type": "string", + "description": "Human-readable name for a Policy." }, - "disableSmsAuth": { - "type": "boolean", - "description": "Disable OTP SMS auth for the sub-organization", - "nullable": true + "effect": { + "$ref": "#/components/schemas/Effect" }, - "disableOtpEmailAuth": { - "type": "boolean", - "description": "Disable OTP email auth for the sub-organization", + "condition": { + "type": "string", + "description": "The condition expression that triggers the Effect", "nullable": true }, - "verificationToken": { + "consensus": { "type": "string", - "description": "Signed JWT containing a unique id, expiry, verification type, contact", + "description": "The consensus expression that triggers the Effect", "nullable": true }, - "clientSignature": { - "$ref": "#/components/schemas/ClientSignature" + "notes": { + "type": "string", + "description": "Notes for a Policy." } }, - "required": [ - "subOrganizationName", - "rootUsers", - "rootQuorumThreshold" - ] + "required": ["policyName", "effect", "notes"] }, - "CreateSubOrganizationRequest": { + "CreatePolicyRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V8" - ] + "enum": ["ACTIVITY_TYPE_CREATE_POLICY_V3"] }, "timestampMs": { "type": "string", @@ -7969,213 +6475,116 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/components/schemas/CreateSubOrganizationIntentV8" + "$ref": "#/components/schemas/CreatePolicyIntentV3" }, "generateAppProofs": { "type": "boolean", "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] - }, - "CreateSubOrganizationResult": { - "type": "object", - "properties": { - "subOrganizationId": { - "type": "string" - }, - "rootUserIds": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "required": [ - "subOrganizationId" - ] - }, - "CreateSubOrganizationResultV3": { - "type": "object", - "properties": { - "subOrganizationId": { - "type": "string" - }, - "privateKeys": { - "type": "array", - "items": { - "$ref": "#/components/schemas/PrivateKeyResult" - }, - "description": "A list of Private Key IDs and addresses." - }, - "rootUserIds": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "required": [ - "subOrganizationId", - "privateKeys" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "CreateSubOrganizationResultV4": { + "CreatePolicyResult": { "type": "object", "properties": { - "subOrganizationId": { - "type": "string" - }, - "wallet": { - "$ref": "#/components/schemas/WalletResult" - }, - "rootUserIds": { - "type": "array", - "items": { - "type": "string" - } + "policyId": { + "type": "string", + "description": "Unique identifier for a given Policy." } }, - "required": [ - "subOrganizationId" - ] + "required": ["policyId"] }, - "CreateSubOrganizationResultV5": { + "CreatePrivateKeyTagIntent": { "type": "object", "properties": { - "subOrganizationId": { - "type": "string" - }, - "wallet": { - "$ref": "#/components/schemas/WalletResult" + "privateKeyTagName": { + "type": "string", + "description": "Human-readable name for a Private Key Tag." }, - "rootUserIds": { + "privateKeyIds": { "type": "array", "items": { "type": "string" - } + }, + "description": "A list of Private Key IDs." } }, - "required": [ - "subOrganizationId" - ] + "required": ["privateKeyTagName", "privateKeyIds"] }, - "CreateSubOrganizationResultV6": { + "CreatePrivateKeyTagRequest": { "type": "object", "properties": { - "subOrganizationId": { - "type": "string" + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_CREATE_PRIVATE_KEY_TAG"] }, - "wallet": { - "$ref": "#/components/schemas/WalletResult" + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, - "rootUserIds": { - "type": "array", - "items": { - "type": "string" - } + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/CreatePrivateKeyTagIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true } }, - "required": [ - "subOrganizationId" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "CreateSubOrganizationResultV7": { + "CreatePrivateKeyTagResult": { "type": "object", "properties": { - "subOrganizationId": { - "type": "string" - }, - "wallet": { - "$ref": "#/components/schemas/WalletResult" + "privateKeyTagId": { + "type": "string", + "description": "Unique identifier for a given Private Key Tag." }, - "rootUserIds": { + "privateKeyIds": { "type": "array", "items": { "type": "string" - } + }, + "description": "A list of Private Key IDs." } }, - "required": [ - "subOrganizationId" - ] + "required": ["privateKeyTagId", "privateKeyIds"] }, - "CreateSubOrganizationResultV8": { + "CreatePrivateKeysIntent": { "type": "object", "properties": { - "subOrganizationId": { - "type": "string" - }, - "wallet": { - "$ref": "#/components/schemas/WalletResult" - }, - "rootUserIds": { + "privateKeys": { "type": "array", "items": { - "type": "string" - } + "$ref": "#/components/schemas/PrivateKeyParams" + }, + "description": "A list of Private Keys." } }, - "required": [ - "subOrganizationId" - ] + "required": ["privateKeys"] }, - "CreateTvcAppIntent": { + "CreatePrivateKeysIntentV2": { "type": "object", "properties": { - "name": { - "type": "string", - "description": "The name of the new TVC application" - }, - "quorumPublicKey": { - "type": "string", - "description": "Quorum public key to use for this application" - }, - "manifestSetId": { - "type": "string", - "description": "Unique identifier for an existing TVC operator set to use as the Manifest Set for this TVC application. If left empty, a new Manifest Set configuration is required", - "nullable": true - }, - "manifestSetParams": { - "$ref": "#/components/schemas/TvcOperatorSetParams" - }, - "shareSetId": { - "type": "string", - "description": "Unique identifier for an existing TVC operator set to use as the Share Set for this TVC application. If left empty, a new Share Set configuration is required", - "nullable": true - }, - "shareSetParams": { - "$ref": "#/components/schemas/TvcOperatorSetParams" - }, - "enableEgress": { - "type": "boolean", - "description": "Enables network egress for this TVC app. Default if not provided: false.", - "nullable": true - }, - "enableDebugModeDeployments": { - "type": "boolean", - "description": "When true, this app may create deployments in debug-mode. Debug-mode deployments expose logs and emit zero'd attestation PCRs, so remote attestation cannot succeed. Cannot be changed after app creation. Setting this true means the app's quorum key is considered permanently insecure, and a new app with a fresh quorum key must be created. Default if not provided: false.", - "nullable": true + "privateKeys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PrivateKeyParams" + }, + "description": "A list of Private Keys." } }, - "required": [ - "name", - "quorumPublicKey" - ] + "required": ["privateKeys"] }, - "CreateTvcAppRequest": { + "CreatePrivateKeysRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_CREATE_TVC_APP" - ] + "enum": ["ACTIVITY_TYPE_CREATE_PRIVATE_KEYS_V2"] }, "timestampMs": { "type": "string", @@ -8186,198 +6595,167 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/components/schemas/CreateTvcAppIntent" + "$ref": "#/components/schemas/CreatePrivateKeysIntentV2" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "CreateTvcAppResult": { + "CreatePrivateKeysResult": { "type": "object", "properties": { - "appId": { - "type": "string", - "description": "The unique identifier for the TVC application" - }, - "manifestSetId": { - "type": "string", - "description": "The unique identifier for the TVC manifest set" - }, - "manifestSetOperatorIds": { + "privateKeyIds": { "type": "array", "items": { "type": "string" }, - "description": "The unique identifier(s) of the manifest set operators" - }, - "manifestSetThreshold": { - "type": "integer", - "format": "int64", - "description": "The required number of approvals for the manifest set" + "description": "A list of Private Key IDs." } }, - "required": [ - "appId", - "manifestSetId", - "manifestSetOperatorIds", - "manifestSetThreshold" - ] + "required": ["privateKeyIds"] }, - "CreateTvcDeploymentIntent": { + "CreatePrivateKeysResultV2": { "type": "object", "properties": { - "appId": { - "type": "string", - "description": "The unique identifier of the to-be-deployed TVC application" - }, - "qosVersion": { - "type": "string", - "description": "The QuorumOS version to use to deploy this application" - }, - "pivotContainerImageUrl": { - "type": "string", - "description": "URL of the container containing the pivot binary" - }, - "pivotPath": { - "type": "string", - "description": "Location of the binary in the pivot container" - }, - "pivotArgs": { + "privateKeys": { "type": "array", "items": { - "type": "string" + "$ref": "#/components/schemas/PrivateKeyResult" }, - "description": "Arguments to pass to the pivot binary at startup. Encoded as a list of strings, for example [\"--foo\", \"bar\"]" - }, - "expectedPivotDigest": { + "description": "A list of Private Key IDs and addresses." + } + }, + "required": ["privateKeys"] + }, + "CreateReadOnlySessionIntent": { + "type": "object" + }, + "CreateReadOnlySessionRequest": { + "type": "object", + "properties": { + "type": { "type": "string", - "description": "Digest of the pivot binary in the pivot container. This value will be inserted in the QOS manifest to ensure application integrity." - }, - "nonce": { - "type": "integer", - "format": "int64", - "description": "Optional nonce to ensure uniqueness of the deployment manifest. If not provided, it defaults to the current Unix timestamp in seconds.", - "nullable": true + "enum": ["ACTIVITY_TYPE_CREATE_READ_ONLY_SESSION"] }, - "pivotContainerEncryptedPullSecret": { + "timestampMs": { "type": "string", - "description": "Optional encrypted pull secret to authorize Turnkey to pull the pivot container image. If your image is public, leave this empty.", - "nullable": true - }, - "debugMode": { - "type": "boolean", - "description": "Optional flag to indicate whether to deploy the TVC app in debug mode, which includes additional logging and debugging tools. Default is false.", - "nullable": true - }, - "healthCheckType": { - "$ref": "#/components/schemas/TvcHealthCheckType" + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, - "healthCheckPort": { - "type": "integer", - "format": "int64", - "description": "Port to use for health checks." + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." }, - "publicIngressPort": { - "type": "integer", - "format": "int64", - "description": "Port to use for public ingress." + "parameters": { + "$ref": "#/components/schemas/CreateReadOnlySessionIntent" }, - "replicas": { - "type": "integer", - "format": "int64", - "description": "Optional desired replica count for this deployment.", + "generateAppProofs": { + "type": "boolean", "nullable": true } }, - "required": [ - "appId", - "qosVersion", - "pivotContainerImageUrl", - "pivotPath", - "pivotArgs", - "expectedPivotDigest", - "healthCheckType", - "healthCheckPort", - "publicIngressPort" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "CreateTvcDeploymentRequest": { + "CreateReadOnlySessionResult": { "type": "object", "properties": { - "type": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization. If the request is being made by a user and their Sub-Organization ID is unknown, this can be the Parent Organization ID. However, using the Sub-Organization ID is preferred due to performance reasons." + }, + "organizationName": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_CREATE_TVC_DEPLOYMENT" - ] + "description": "Human-readable name for an Organization." }, - "timestampMs": { + "userId": { "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + "description": "Unique identifier for a given User." }, - "organizationId": { + "username": { "type": "string", - "description": "Unique identifier for a given Organization." + "description": "Human-readable name for a User." }, - "parameters": { - "$ref": "#/components/schemas/CreateTvcDeploymentIntent" + "session": { + "type": "string", + "description": "String representing a read only session" + }, + "sessionExpiry": { + "type": "string", + "format": "uint64", + "description": "UTC timestamp in seconds representing the expiry time for the read only session." } }, "required": [ - "type", - "timestampMs", "organizationId", - "parameters" + "organizationName", + "userId", + "username", + "session", + "sessionExpiry" ] }, - "CreateTvcDeploymentResult": { + "CreateReadWriteSessionIntent": { "type": "object", "properties": { - "deploymentId": { + "targetPublicKey": { "type": "string", - "description": "The unique identifier for the TVC deployment" + "description": "Client-side public key generated by the user, to which the read write session bundle (credentials) will be encrypted." }, - "manifestId": { + "email": { "type": "string", - "description": "The unique identifier for the TVC manifest" + "description": "Email of the user to create a read write session for" + }, + "apiKeyName": { + "type": "string", + "description": "Optional human-readable name for an API Key. If none provided, default to Read Write Session - ", + "nullable": true + }, + "expirationSeconds": { + "type": "string", + "description": "Expiration window (in seconds) indicating how long the API key is valid for. If not provided, a default of 15 minutes will be used.", + "nullable": true } }, - "required": [ - "deploymentId", - "manifestId" - ] + "required": ["targetPublicKey", "email"] }, - "CreateTvcManifestApprovalsIntent": { + "CreateReadWriteSessionIntentV2": { "type": "object", "properties": { - "manifestId": { + "targetPublicKey": { "type": "string", - "description": "Unique identifier of the TVC deployment to approve" + "description": "Client-side public key generated by the user, to which the read write session bundle (credentials) will be encrypted." }, - "approvals": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TvcManifestApproval" - }, - "description": "List of manifest approvals" + "userId": { + "type": "string", + "description": "Optional unique identifier for a given User. If none provided, the read write session will be created for the user who is making the request.", + "nullable": true + }, + "apiKeyName": { + "type": "string", + "description": "Optional human-readable name for an API Key. If none provided, default to Read Write Session - ", + "nullable": true + }, + "expirationSeconds": { + "type": "string", + "description": "Expiration window (in seconds) indicating how long the API key is valid for. If not provided, a default of 15 minutes will be used.", + "nullable": true + }, + "invalidateExisting": { + "type": "boolean", + "description": "Invalidate all other previously generated ReadWriteSession API keys", + "nullable": true } }, - "required": [ - "manifestId", - "approvals" - ] + "required": ["targetPublicKey"] }, - "CreateTvcManifestApprovalsRequest": { + "CreateReadWriteSessionRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_CREATE_TVC_MANIFEST_APPROVALS" - ] + "enum": ["ACTIVITY_TYPE_CREATE_READ_WRITE_SESSION_V2"] }, "timestampMs": { "type": "string", @@ -8388,159 +6766,180 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/components/schemas/CreateTvcManifestApprovalsIntent" + "$ref": "#/components/schemas/CreateReadWriteSessionIntentV2" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "CreateTvcManifestApprovalsResult": { + "CreateReadWriteSessionResult": { "type": "object", "properties": { - "approvalIds": { - "type": "array", - "items": { - "type": "string" - }, - "description": "The unique identifier(s) for the manifest approvals" + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization. If the request is being made by a user and their Sub-Organization ID is unknown, this can be the Parent Organization ID. However, using the Sub-Organization ID is preferred due to performance reasons." + }, + "organizationName": { + "type": "string", + "description": "Human-readable name for an Organization." + }, + "userId": { + "type": "string", + "description": "Unique identifier for a given User." + }, + "username": { + "type": "string", + "description": "Human-readable name for a User." + }, + "apiKeyId": { + "type": "string", + "description": "Unique identifier for the created API key." + }, + "credentialBundle": { + "type": "string", + "description": "HPKE encrypted credential bundle" } }, "required": [ - "approvalIds" + "organizationId", + "organizationName", + "userId", + "username", + "apiKeyId", + "credentialBundle" ] }, - "CreateTvcOperatorIntent": { + "CreateReadWriteSessionResultV2": { "type": "object", "properties": { - "walletName": { + "organizationId": { "type": "string", - "description": "Human-readable name for a new wallet created for this TVC operator", - "nullable": true + "description": "Unique identifier for a given Organization. If the request is being made by a user and their Sub-Organization ID is unknown, this can be the Parent Organization ID. However, using the Sub-Organization ID is preferred due to performance reasons." }, - "walletId": { + "organizationName": { "type": "string", - "description": "Unique identifier for an existing wallet to reuse for this TVC operator", - "nullable": true + "description": "Human-readable name for an Organization." }, - "path": { + "userId": { "type": "string", - "description": "Base derivation path for creating TVC operator wallet accounts" + "description": "Unique identifier for a given User." + }, + "username": { + "type": "string", + "description": "Human-readable name for a User." + }, + "apiKeyId": { + "type": "string", + "description": "Unique identifier for the created API key." }, - "operatorName": { + "credentialBundle": { "type": "string", - "description": "Human-readable name for this new TVC operator" + "description": "HPKE encrypted credential bundle" } }, "required": [ - "path", - "operatorName" + "organizationId", + "organizationName", + "userId", + "username", + "apiKeyId", + "credentialBundle" ] }, - "CreateTvcOperatorResult": { + "CreateSessionProfileIntent": { "type": "object", "properties": { - "walletId": { + "sessionProfileName": { "type": "string", - "description": "The unique identifier for the wallet containing TVC operator accounts" + "description": "Human-readable name for a Session Profile." }, - "operatorId": { + "scope": { "type": "string", - "description": "The unique identifier for the TVC operator" + "description": "The scope string that defines the permissions for this Session Profile." }, - "encryptPublicKey": { + "expirationSeconds": { "type": "string", - "description": "Public encryption key for this TVC operator" + "description": "The duration in seconds for which sessions created with this Session Profile are valid. If not set, expiration will be determined by the value passed in to the intent of login activities.", + "nullable": true }, - "signPublicKey": { + "notes": { "type": "string", - "description": "Public signing key for this TVC operator" + "description": "Notes for a Session Profile.", + "nullable": true } }, - "required": [ - "walletId", - "operatorId", - "encryptPublicKey", - "signPublicKey" - ] + "required": ["sessionProfileName", "scope"] }, - "CreateTvcQuorumKeyIntent": { + "CreateSessionProfileRequest": { "type": "object", "properties": { - "threshold": { - "type": "integer", - "format": "int64", - "description": "The threshold of operators needed to reassemble this TVC quorum key" + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_CREATE_SESSION_PROFILE"] }, - "operatorEncryptKeys": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Operator public keys used to encrypt and later approve the generated TVC quorum key shares" + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/CreateSessionProfileIntent" } }, - "required": [ - "threshold", - "operatorEncryptKeys" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "CreateTvcQuorumKeyResult": { + "CreateSessionProfileResult": { "type": "object", "properties": { - "quorumKeyId": { - "type": "string", - "description": "The unique identifier for the TVC quorum key" - }, - "quorumPublicKey": { + "sessionProfileId": { "type": "string", - "description": "Public key for the generated TVC quorum key" - }, - "shareIds": { - "type": "array", - "items": { - "type": "string" - }, - "description": "The unique identifier(s) for the generated TVC quorum key shares" + "description": "Unique identifier for a given Session Profile." } }, - "required": [ - "quorumKeyId", - "quorumPublicKey", - "shareIds" - ] + "required": ["sessionProfileId"] }, - "CreateUserTagIntent": { + "CreateSmartContractInterfaceIntent": { "type": "object", "properties": { - "userTagName": { + "smartContractAddress": { "type": "string", - "description": "Human-readable name for a User Tag." + "description": "Corresponding contract address or program ID" }, - "userIds": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of User IDs." + "smartContractInterface": { + "type": "string", + "description": "ABI/IDL as a JSON string. Limited to 400kb" + }, + "type": { + "$ref": "#/components/schemas/SmartContractInterfaceType" + }, + "label": { + "type": "string", + "description": "Human-readable name for a Smart Contract Interface." + }, + "notes": { + "type": "string", + "description": "Notes for a Smart Contract Interface." } }, "required": [ - "userTagName", - "userIds" + "smartContractAddress", + "smartContractInterface", + "type", + "label" ] }, - "CreateUserTagRequest": { + "CreateSmartContractInterfaceRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_CREATE_USER_TAG" - ] + "enum": ["ACTIVITY_TYPE_CREATE_SMART_CONTRACT_INTERFACE"] }, "timestampMs": { "type": "string", @@ -8551,180 +6950,311 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/components/schemas/CreateUserTagIntent" + "$ref": "#/components/schemas/CreateSmartContractInterfaceIntent" }, "generateAppProofs": { "type": "boolean", "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "CreateSmartContractInterfaceResult": { + "type": "object", + "properties": { + "smartContractInterfaceId": { + "type": "string", + "description": "The ID of the created Smart Contract Interface." + } + }, + "required": ["smartContractInterfaceId"] }, - "CreateUserTagResult": { + "CreateSubOrganizationIntent": { "type": "object", "properties": { - "userTagId": { + "name": { "type": "string", - "description": "Unique identifier for a given User Tag." + "description": "Name for this sub-organization" }, - "userIds": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of User IDs." + "rootAuthenticator": { + "$ref": "#/components/schemas/AuthenticatorParamsV2" } }, - "required": [ - "userTagId", - "userIds" - ] + "required": ["name", "rootAuthenticator"] }, - "CreateUsersIntent": { + "CreateSubOrganizationIntentV2": { "type": "object", "properties": { - "users": { + "subOrganizationName": { + "type": "string", + "description": "Name for this sub-organization" + }, + "rootUsers": { "type": "array", "items": { - "$ref": "#/components/schemas/UserParams" + "$ref": "#/components/schemas/RootUserParams" }, - "description": "A list of Users." + "description": "Root users to create within this sub-organization" + }, + "rootQuorumThreshold": { + "type": "integer", + "format": "int32", + "description": "The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users" } }, - "required": [ - "users" - ] + "required": ["subOrganizationName", "rootUsers", "rootQuorumThreshold"] }, - "CreateUsersIntentV2": { + "CreateSubOrganizationIntentV3": { "type": "object", "properties": { - "users": { + "subOrganizationName": { + "type": "string", + "description": "Name for this sub-organization" + }, + "rootUsers": { "type": "array", "items": { - "$ref": "#/components/schemas/UserParamsV2" + "$ref": "#/components/schemas/RootUserParams" }, - "description": "A list of Users." + "description": "Root users to create within this sub-organization" + }, + "rootQuorumThreshold": { + "type": "integer", + "format": "int32", + "description": "The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users" + }, + "privateKeys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PrivateKeyParams" + }, + "description": "A list of Private Keys." } }, "required": [ - "users" + "subOrganizationName", + "rootUsers", + "rootQuorumThreshold", + "privateKeys" ] }, - "CreateUsersIntentV3": { + "CreateSubOrganizationIntentV4": { "type": "object", "properties": { - "users": { + "subOrganizationName": { + "type": "string", + "description": "Name for this sub-organization" + }, + "rootUsers": { "type": "array", "items": { - "$ref": "#/components/schemas/UserParamsV3" + "$ref": "#/components/schemas/RootUserParams" }, - "description": "A list of Users." + "description": "Root users to create within this sub-organization" + }, + "rootQuorumThreshold": { + "type": "integer", + "format": "int32", + "description": "The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users" + }, + "wallet": { + "$ref": "#/components/schemas/WalletParams" + }, + "disableEmailRecovery": { + "type": "boolean", + "description": "Disable email recovery for the sub-organization", + "nullable": true + }, + "disableEmailAuth": { + "type": "boolean", + "description": "Disable email auth for the sub-organization", + "nullable": true } }, - "required": [ - "users" - ] + "required": ["subOrganizationName", "rootUsers", "rootQuorumThreshold"] }, - "CreateUsersIntentV4": { + "CreateSubOrganizationIntentV5": { "type": "object", "properties": { - "users": { + "subOrganizationName": { + "type": "string", + "description": "Name for this sub-organization" + }, + "rootUsers": { "type": "array", "items": { - "$ref": "#/components/schemas/UserParamsV4" + "$ref": "#/components/schemas/RootUserParamsV2" }, - "description": "A list of Users." + "description": "Root users to create within this sub-organization" + }, + "rootQuorumThreshold": { + "type": "integer", + "format": "int32", + "description": "The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users" + }, + "wallet": { + "$ref": "#/components/schemas/WalletParams" + }, + "disableEmailRecovery": { + "type": "boolean", + "description": "Disable email recovery for the sub-organization", + "nullable": true + }, + "disableEmailAuth": { + "type": "boolean", + "description": "Disable email auth for the sub-organization", + "nullable": true } }, - "required": [ - "users" - ] + "required": ["subOrganizationName", "rootUsers", "rootQuorumThreshold"] }, - "CreateUsersRequest": { + "CreateSubOrganizationIntentV6": { "type": "object", "properties": { - "type": { + "subOrganizationName": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_CREATE_USERS_V4" - ] + "description": "Name for this sub-organization" }, - "timestampMs": { - "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + "rootUsers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RootUserParamsV3" + }, + "description": "Root users to create within this sub-organization" }, - "organizationId": { - "type": "string", - "description": "Unique identifier for a given Organization." + "rootQuorumThreshold": { + "type": "integer", + "format": "int32", + "description": "The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users" }, - "parameters": { - "$ref": "#/components/schemas/CreateUsersIntentV4" + "wallet": { + "$ref": "#/components/schemas/WalletParams" }, - "generateAppProofs": { + "disableEmailRecovery": { + "type": "boolean", + "description": "Disable email recovery for the sub-organization", + "nullable": true + }, + "disableEmailAuth": { "type": "boolean", + "description": "Disable email auth for the sub-organization", "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["subOrganizationName", "rootUsers", "rootQuorumThreshold"] }, - "CreateUsersResult": { + "CreateSubOrganizationIntentV7": { "type": "object", "properties": { - "userIds": { + "subOrganizationName": { + "type": "string", + "description": "Name for this sub-organization" + }, + "rootUsers": { "type": "array", "items": { - "type": "string" + "$ref": "#/components/schemas/RootUserParamsV4" }, - "description": "A list of User IDs." + "description": "Root users to create within this sub-organization" + }, + "rootQuorumThreshold": { + "type": "integer", + "format": "int32", + "description": "The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users" + }, + "wallet": { + "$ref": "#/components/schemas/WalletParams" + }, + "disableEmailRecovery": { + "type": "boolean", + "description": "Disable email recovery for the sub-organization", + "nullable": true + }, + "disableEmailAuth": { + "type": "boolean", + "description": "Disable email auth for the sub-organization", + "nullable": true + }, + "disableSmsAuth": { + "type": "boolean", + "description": "Disable OTP SMS auth for the sub-organization", + "nullable": true + }, + "disableOtpEmailAuth": { + "type": "boolean", + "description": "Disable OTP email auth for the sub-organization", + "nullable": true + }, + "verificationToken": { + "type": "string", + "description": "Signed JWT containing a unique id, expiry, verification type, contact", + "nullable": true + }, + "clientSignature": { + "$ref": "#/components/schemas/ClientSignature" } }, - "required": [ - "userIds" - ] + "required": ["subOrganizationName", "rootUsers", "rootQuorumThreshold"] }, - "CreateWalletAccountsIntent": { + "CreateSubOrganizationIntentV8": { "type": "object", "properties": { - "walletId": { + "subOrganizationName": { "type": "string", - "description": "Unique identifier for a given Wallet." + "description": "Name for this sub-organization" }, - "accounts": { + "rootUsers": { "type": "array", "items": { - "$ref": "#/components/schemas/WalletAccountParams" + "$ref": "#/components/schemas/RootUserParamsV5" }, - "description": "A list of wallet Accounts." + "description": "Root users to create within this sub-organization" + }, + "rootQuorumThreshold": { + "type": "integer", + "format": "int32", + "description": "The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users" + }, + "wallet": { + "$ref": "#/components/schemas/WalletParams" + }, + "disableEmailRecovery": { + "type": "boolean", + "description": "Disable email recovery for the sub-organization", + "nullable": true + }, + "disableEmailAuth": { + "type": "boolean", + "description": "Disable email auth for the sub-organization", + "nullable": true + }, + "disableSmsAuth": { + "type": "boolean", + "description": "Disable OTP SMS auth for the sub-organization", + "nullable": true }, - "persist": { + "disableOtpEmailAuth": { "type": "boolean", - "description": "Indicates if the wallet accounts should be persisted. This is helpful if you'd like to see the addresses of different derivation paths without actually creating the accounts. Defaults to true.", + "description": "Disable OTP email auth for the sub-organization", + "nullable": true + }, + "verificationToken": { + "type": "string", + "description": "Signed JWT containing a unique id, expiry, verification type, contact", "nullable": true + }, + "clientSignature": { + "$ref": "#/components/schemas/ClientSignature" } }, - "required": [ - "walletId", - "accounts" - ] + "required": ["subOrganizationName", "rootUsers", "rootQuorumThreshold"] }, - "CreateWalletAccountsRequest": { + "CreateSubOrganizationRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_CREATE_WALLET_ACCOUNTS" - ] + "enum": ["ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V8"] }, "timestampMs": { "type": "string", @@ -8735,262 +7265,188 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/components/schemas/CreateWalletAccountsIntent" + "$ref": "#/components/schemas/CreateSubOrganizationIntentV8" }, "generateAppProofs": { "type": "boolean", "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "CreateWalletAccountsResult": { + "CreateSubOrganizationResult": { "type": "object", "properties": { - "addresses": { + "subOrganizationId": { + "type": "string" + }, + "rootUserIds": { "type": "array", "items": { "type": "string" - }, - "description": "A list of derived addresses." + } } }, - "required": [ - "addresses" - ] + "required": ["subOrganizationId"] }, - "CreateWalletIntent": { + "CreateSubOrganizationResultV3": { "type": "object", "properties": { - "walletName": { - "type": "string", - "description": "Human-readable name for a Wallet." + "subOrganizationId": { + "type": "string" }, - "accounts": { + "privateKeys": { "type": "array", "items": { - "$ref": "#/components/schemas/WalletAccountParams" + "$ref": "#/components/schemas/PrivateKeyResult" }, - "description": "A list of wallet Accounts. This field, if not needed, should be an empty array in your request body." + "description": "A list of Private Key IDs and addresses." }, - "mnemonicLength": { - "type": "integer", - "format": "int32", - "description": "Length of mnemonic to generate the Wallet seed. Defaults to 12. Accepted values: 12, 15, 18, 21, 24.", - "nullable": true + "rootUserIds": { + "type": "array", + "items": { + "type": "string" + } } }, - "required": [ - "walletName", - "accounts" - ] + "required": ["subOrganizationId", "privateKeys"] }, - "CreateWalletRequest": { + "CreateSubOrganizationResultV4": { "type": "object", "properties": { - "type": { - "type": "string", - "enum": [ - "ACTIVITY_TYPE_CREATE_WALLET" - ] - }, - "timestampMs": { - "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." - }, - "organizationId": { - "type": "string", - "description": "Unique identifier for a given Organization." + "subOrganizationId": { + "type": "string" }, - "parameters": { - "$ref": "#/components/schemas/CreateWalletIntent" + "wallet": { + "$ref": "#/components/schemas/WalletResult" }, - "generateAppProofs": { - "type": "boolean", - "nullable": true + "rootUserIds": { + "type": "array", + "items": { + "type": "string" + } } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["subOrganizationId"] }, - "CreateWalletResult": { + "CreateSubOrganizationResultV5": { "type": "object", "properties": { - "walletId": { - "type": "string", - "description": "Unique identifier for a Wallet." + "subOrganizationId": { + "type": "string" }, - "addresses": { + "wallet": { + "$ref": "#/components/schemas/WalletResult" + }, + "rootUserIds": { "type": "array", "items": { "type": "string" - }, - "description": "A list of account addresses." + } } }, - "required": [ - "walletId", - "addresses" - ] + "required": ["subOrganizationId"] }, - "CreateWebhookEndpointIntent": { + "CreateSubOrganizationResultV6": { "type": "object", "properties": { - "url": { - "type": "string", - "description": "The destination URL for webhook delivery." + "subOrganizationId": { + "type": "string" }, - "name": { - "type": "string", - "description": "Human-readable name for this webhook endpoint." + "wallet": { + "$ref": "#/components/schemas/WalletResult" }, - "subscriptions": { + "rootUserIds": { "type": "array", "items": { - "$ref": "#/components/schemas/WebhookSubscriptionParams" - }, - "description": "Event subscriptions to create for this endpoint." + "type": "string" + } } }, - "required": [ - "url", - "name" - ] + "required": ["subOrganizationId"] }, - "CreateWebhookEndpointRequest": { + "CreateSubOrganizationResultV7": { "type": "object", "properties": { - "type": { - "type": "string", - "enum": [ - "ACTIVITY_TYPE_CREATE_WEBHOOK_ENDPOINT" - ] - }, - "timestampMs": { - "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." - }, - "organizationId": { - "type": "string", - "description": "Unique identifier for a given Organization." + "subOrganizationId": { + "type": "string" }, - "parameters": { - "$ref": "#/components/schemas/CreateWebhookEndpointIntent" + "wallet": { + "$ref": "#/components/schemas/WalletResult" }, - "generateAppProofs": { - "type": "boolean", - "nullable": true + "rootUserIds": { + "type": "array", + "items": { + "type": "string" + } } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["subOrganizationId"] }, - "CreateWebhookEndpointResult": { + "CreateSubOrganizationResultV8": { "type": "object", "properties": { - "endpointId": { - "type": "string", - "description": "Unique identifier of the created webhook endpoint." + "subOrganizationId": { + "type": "string" }, - "webhookEndpoint": { - "$ref": "#/components/schemas/WebhookEndpointData" - } - }, - "required": [ - "endpointId", - "webhookEndpoint" - ] - }, - "CredPropsAuthenticationExtensionsClientOutputs": { - "type": "object", - "properties": { - "rk": { - "type": "boolean" + "wallet": { + "$ref": "#/components/schemas/WalletResult" + }, + "rootUserIds": { + "type": "array", + "items": { + "type": "string" + } } }, - "required": [ - "rk" - ] - }, - "CredentialType": { - "type": "string", - "enum": [ - "CREDENTIAL_TYPE_WEBAUTHN_AUTHENTICATOR", - "CREDENTIAL_TYPE_API_KEY_P256", - "CREDENTIAL_TYPE_RECOVER_USER_KEY_P256", - "CREDENTIAL_TYPE_API_KEY_SECP256K1", - "CREDENTIAL_TYPE_EMAIL_AUTH_KEY_P256", - "CREDENTIAL_TYPE_API_KEY_ED25519", - "CREDENTIAL_TYPE_OTP_AUTH_KEY_P256", - "CREDENTIAL_TYPE_READ_WRITE_SESSION_KEY_P256", - "CREDENTIAL_TYPE_OAUTH_KEY_P256", - "CREDENTIAL_TYPE_LOGIN" - ] + "required": ["subOrganizationId"] }, - "Curve": { - "type": "string", - "enum": [ - "CURVE_SECP256K1", - "CURVE_ED25519", - "CURVE_P256" - ] - }, - "CustomRevertError": { + "CreateTvcAppIntent": { "type": "object", "properties": { - "errorName": { + "name": { "type": "string", - "description": "The name of the custom error.", - "nullable": true + "description": "The name of the new TVC application" }, - "paramsJson": { + "quorumPublicKey": { "type": "string", - "description": "The decoded parameters as a JSON object.", + "description": "Quorum public key to use for this application" + }, + "manifestSetId": { + "type": "string", + "description": "Unique identifier for an existing TVC operator set to use as the Manifest Set for this TVC application. If left empty, a new Manifest Set configuration is required", "nullable": true - } - } - }, - "DeleteApiKeysIntent": { - "type": "object", - "properties": { - "userId": { + }, + "manifestSetParams": { + "$ref": "#/components/schemas/TvcOperatorSetParams" + }, + "shareSetId": { "type": "string", - "description": "Unique identifier for a given User." + "description": "Unique identifier for an existing TVC operator set to use as the Share Set for this TVC application. If left empty, a new Share Set configuration is required", + "nullable": true }, - "apiKeyIds": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of API Key IDs." + "shareSetParams": { + "$ref": "#/components/schemas/TvcOperatorSetParams" + }, + "enableEgress": { + "type": "boolean", + "description": "Enables network egress for this TVC app. Default if not provided: false.", + "nullable": true + }, + "enableDebugModeDeployments": { + "type": "boolean", + "description": "When true, this app may create deployments in debug-mode. Debug-mode deployments expose logs and emit zero'd attestation PCRs, so remote attestation cannot succeed. Cannot be changed after app creation. Setting this true means the app's quorum key is considered permanently insecure, and a new app with a fresh quorum key must be created. Default if not provided: false.", + "nullable": true } }, - "required": [ - "userId", - "apiKeyIds" - ] + "required": ["name", "quorumPublicKey"] }, - "DeleteApiKeysRequest": { + "CreateTvcAppRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_DELETE_API_KEYS" - ] + "enum": ["ACTIVITY_TYPE_CREATE_TVC_APP"] }, "timestampMs": { "type": "string", @@ -9001,63 +7457,120 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/components/schemas/DeleteApiKeysIntent" - }, - "generateAppProofs": { - "type": "boolean", - "nullable": true + "$ref": "#/components/schemas/CreateTvcAppIntent" } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "DeleteApiKeysResult": { + "CreateTvcAppResult": { "type": "object", "properties": { - "apiKeyIds": { + "appId": { + "type": "string", + "description": "The unique identifier for the TVC application" + }, + "manifestSetId": { + "type": "string", + "description": "The unique identifier for the TVC manifest set" + }, + "manifestSetOperatorIds": { "type": "array", "items": { "type": "string" }, - "description": "A list of API Key IDs." + "description": "The unique identifier(s) of the manifest set operators" + }, + "manifestSetThreshold": { + "type": "integer", + "format": "int64", + "description": "The required number of approvals for the manifest set" } }, "required": [ - "apiKeyIds" + "appId", + "manifestSetId", + "manifestSetOperatorIds", + "manifestSetThreshold" ] }, - "DeleteAuthenticatorsIntent": { + "CreateTvcDeploymentIntent": { "type": "object", "properties": { - "userId": { + "appId": { "type": "string", - "description": "Unique identifier for a given User." + "description": "The unique identifier of the to-be-deployed TVC application" }, - "authenticatorIds": { + "qosVersion": { + "type": "string", + "description": "The QuorumOS version to use to deploy this application" + }, + "pivotContainerImageUrl": { + "type": "string", + "description": "URL of the container containing the pivot binary" + }, + "pivotPath": { + "type": "string", + "description": "Location of the binary in the pivot container" + }, + "pivotArgs": { "type": "array", "items": { "type": "string" }, - "description": "A list of Authenticator IDs." + "description": "Arguments to pass to the pivot binary at startup. Encoded as a list of strings, for example [\"--foo\", \"bar\"]" + }, + "expectedPivotDigest": { + "type": "string", + "description": "Digest of the pivot binary in the pivot container. This value will be inserted in the QOS manifest to ensure application integrity." + }, + "nonce": { + "type": "integer", + "format": "int64", + "description": "Optional nonce to ensure uniqueness of the deployment manifest. If not provided, it defaults to the current Unix timestamp in seconds.", + "nullable": true + }, + "pivotContainerEncryptedPullSecret": { + "type": "string", + "description": "Optional encrypted pull secret to authorize Turnkey to pull the pivot container image. If your image is public, leave this empty.", + "nullable": true + }, + "debugMode": { + "type": "boolean", + "description": "Optional flag to indicate whether to deploy the TVC app in debug mode, which includes additional logging and debugging tools. Default is false.", + "nullable": true + }, + "healthCheckType": { + "$ref": "#/components/schemas/TvcHealthCheckType" + }, + "healthCheckPort": { + "type": "integer", + "format": "int64", + "description": "Port to use for health checks." + }, + "publicIngressPort": { + "type": "integer", + "format": "int64", + "description": "Port to use for public ingress." } }, "required": [ - "userId", - "authenticatorIds" + "appId", + "qosVersion", + "pivotContainerImageUrl", + "pivotPath", + "pivotArgs", + "expectedPivotDigest", + "healthCheckType", + "healthCheckPort", + "publicIngressPort" ] }, - "DeleteAuthenticatorsRequest": { + "CreateTvcDeploymentRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_DELETE_AUTHENTICATORS" - ] + "enum": ["ACTIVITY_TYPE_CREATE_TVC_DEPLOYMENT"] }, "timestampMs": { "type": "string", @@ -9068,55 +7581,48 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/components/schemas/DeleteAuthenticatorsIntent" - }, - "generateAppProofs": { - "type": "boolean", - "nullable": true + "$ref": "#/components/schemas/CreateTvcDeploymentIntent" } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "DeleteAuthenticatorsResult": { + "CreateTvcDeploymentResult": { "type": "object", "properties": { - "authenticatorIds": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Unique identifier for a given Authenticator." + "deploymentId": { + "type": "string", + "description": "The unique identifier for the TVC deployment" + }, + "manifestId": { + "type": "string", + "description": "The unique identifier for the TVC manifest" } }, - "required": [ - "authenticatorIds" - ] + "required": ["deploymentId", "manifestId"] }, - "DeleteFiatOnRampCredentialIntent": { + "CreateTvcManifestApprovalsIntent": { "type": "object", "properties": { - "fiatOnrampCredentialId": { + "manifestId": { "type": "string", - "description": "The ID of the fiat on-ramp credential to delete" + "description": "Unique identifier of the TVC deployment to approve" + }, + "approvals": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TvcManifestApproval" + }, + "description": "List of manifest approvals" } }, - "required": [ - "fiatOnrampCredentialId" - ] + "required": ["manifestId", "approvals"] }, - "DeleteFiatOnRampCredentialRequest": { + "CreateTvcManifestApprovalsRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_DELETE_FIAT_ON_RAMP_CREDENTIAL" - ] + "enum": ["ACTIVITY_TYPE_CREATE_TVC_MANIFEST_APPROVALS"] }, "timestampMs": { "type": "string", @@ -9127,52 +7633,47 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/components/schemas/DeleteFiatOnRampCredentialIntent" - }, - "generateAppProofs": { - "type": "boolean", - "nullable": true + "$ref": "#/components/schemas/CreateTvcManifestApprovalsIntent" } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "DeleteFiatOnRampCredentialResult": { + "CreateTvcManifestApprovalsResult": { "type": "object", "properties": { - "fiatOnRampCredentialId": { - "type": "string", - "description": "Unique identifier of the Fiat On-Ramp credential that was deleted" + "approvalIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The unique identifier(s) for the manifest approvals" } }, - "required": [ - "fiatOnRampCredentialId" - ] + "required": ["approvalIds"] }, - "DeleteInvitationIntent": { + "CreateUserTagIntent": { "type": "object", "properties": { - "invitationId": { + "userTagName": { "type": "string", - "description": "Unique identifier for a given Invitation object." + "description": "Human-readable name for a User Tag." + }, + "userIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User IDs." } }, - "required": [ - "invitationId" - ] + "required": ["userTagName", "userIds"] }, - "DeleteInvitationRequest": { + "CreateUserTagRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_DELETE_INVITATION" - ] + "enum": ["ACTIVITY_TYPE_CREATE_USER_TAG"] }, "timestampMs": { "type": "string", @@ -9183,109 +7684,90 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/components/schemas/DeleteInvitationIntent" + "$ref": "#/components/schemas/CreateUserTagIntent" }, "generateAppProofs": { "type": "boolean", "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] - }, - "DeleteInvitationResult": { - "type": "object", - "properties": { - "invitationId": { - "type": "string", - "description": "Unique identifier for a given Invitation." - } - }, - "required": [ - "invitationId" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "DeleteMfaPolicyIntent": { + "CreateUserTagResult": { "type": "object", "properties": { - "userId": { + "userTagId": { "type": "string", - "description": "The ID of the User to delete the MFA Policy from." + "description": "Unique identifier for a given User Tag." }, - "mfaPolicyId": { - "type": "string", - "description": "Unique identifier for a given MFA Policy." + "userIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User IDs." } }, - "required": [ - "userId", - "mfaPolicyId" - ] + "required": ["userTagId", "userIds"] }, - "DeleteMfaPolicyRequest": { + "CreateUsersIntent": { "type": "object", "properties": { - "type": { - "type": "string", - "enum": [ - "ACTIVITY_TYPE_DELETE_MFA_POLICY" - ] - }, - "timestampMs": { - "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." - }, - "organizationId": { - "type": "string", - "description": "Unique identifier for a given Organization." - }, - "parameters": { - "$ref": "#/components/schemas/DeleteMfaPolicyIntent" + "users": { + "type": "array", + "items": { + "$ref": "#/components/schemas/UserParams" + }, + "description": "A list of Users." + } + }, + "required": ["users"] + }, + "CreateUsersIntentV2": { + "type": "object", + "properties": { + "users": { + "type": "array", + "items": { + "$ref": "#/components/schemas/UserParamsV2" + }, + "description": "A list of Users." } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["users"] }, - "DeleteMfaPolicyResult": { + "CreateUsersIntentV3": { "type": "object", "properties": { - "mfaPolicyId": { - "type": "string", - "description": "Unique identifier for a given MFA Policy." + "users": { + "type": "array", + "items": { + "$ref": "#/components/schemas/UserParamsV3" + }, + "description": "A list of Users." } }, - "required": [ - "mfaPolicyId" - ] + "required": ["users"] }, - "DeleteOauth2CredentialIntent": { + "CreateUsersIntentV4": { "type": "object", "properties": { - "oauth2CredentialId": { - "type": "string", - "description": "The ID of the OAuth 2.0 credential to delete" + "users": { + "type": "array", + "items": { + "$ref": "#/components/schemas/UserParamsV4" + }, + "description": "A list of Users." } }, - "required": [ - "oauth2CredentialId" - ] + "required": ["users"] }, - "DeleteOauth2CredentialRequest": { + "CreateUsersRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_DELETE_OAUTH2_CREDENTIAL" - ] + "enum": ["ACTIVITY_TYPE_CREATE_USERS_V4"] }, "timestampMs": { "type": "string", @@ -9296,60 +7778,56 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/components/schemas/DeleteOauth2CredentialIntent" + "$ref": "#/components/schemas/CreateUsersIntentV4" }, "generateAppProofs": { "type": "boolean", "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "DeleteOauth2CredentialResult": { + "CreateUsersResult": { "type": "object", "properties": { - "oauth2CredentialId": { - "type": "string", - "description": "Unique identifier of the OAuth 2.0 credential that was deleted" + "userIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User IDs." } }, - "required": [ - "oauth2CredentialId" - ] + "required": ["userIds"] }, - "DeleteOauthProvidersIntent": { + "CreateWalletAccountsIntent": { "type": "object", "properties": { - "userId": { + "walletId": { "type": "string", - "description": "The ID of the User to remove an Oauth provider from" + "description": "Unique identifier for a given Wallet." }, - "providerIds": { + "accounts": { "type": "array", "items": { - "type": "string" + "$ref": "#/components/schemas/WalletAccountParams" }, - "description": "Unique identifier for a given Provider." + "description": "A list of wallet Accounts." + }, + "persist": { + "type": "boolean", + "description": "Indicates if the wallet accounts should be persisted. This is helpful if you'd like to see the addresses of different derivation paths without actually creating the accounts. Defaults to true.", + "nullable": true } }, - "required": [ - "userId", - "providerIds" - ] + "required": ["walletId", "accounts"] }, - "DeleteOauthProvidersRequest": { + "CreateWalletAccountsRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_DELETE_OAUTH_PROVIDERS" - ] + "enum": ["ACTIVITY_TYPE_CREATE_WALLET_ACCOUNTS"] }, "timestampMs": { "type": "string", @@ -9360,107 +7838,120 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/components/schemas/DeleteOauthProvidersIntent" + "$ref": "#/components/schemas/CreateWalletAccountsIntent" }, "generateAppProofs": { "type": "boolean", "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "DeleteOauthProvidersResult": { + "CreateWalletAccountsResult": { "type": "object", "properties": { - "providerIds": { + "addresses": { "type": "array", "items": { "type": "string" }, - "description": "A list of unique identifiers for Oauth Providers" + "description": "A list of derived addresses." } }, - "required": [ - "providerIds" - ] + "required": ["addresses"] }, - "DeleteOrganizationIntent": { + "CreateWalletIntent": { "type": "object", "properties": { - "organizationId": { + "walletName": { "type": "string", - "description": "Unique identifier for a given Organization." + "description": "Human-readable name for a Wallet." + }, + "accounts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/WalletAccountParams" + }, + "description": "A list of wallet Accounts. This field, if not needed, should be an empty array in your request body." + }, + "mnemonicLength": { + "type": "integer", + "format": "int32", + "description": "Length of mnemonic to generate the Wallet seed. Defaults to 12. Accepted values: 12, 15, 18, 21, 24.", + "nullable": true } }, - "required": [ - "organizationId" - ] + "required": ["walletName", "accounts"] }, - "DeleteOrganizationResult": { + "CreateWalletRequest": { "type": "object", "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_CREATE_WALLET"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, "organizationId": { "type": "string", "description": "Unique identifier for a given Organization." - } - }, - "required": [ - "organizationId" - ] - }, - "DeletePaymentMethodIntent": { - "type": "object", - "properties": { - "paymentMethodId": { - "type": "string", - "description": "The payment method that the customer wants to remove.", + }, + "parameters": { + "$ref": "#/components/schemas/CreateWalletIntent" + }, + "generateAppProofs": { + "type": "boolean", "nullable": true } }, - "required": [ - "paymentMethodId" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "DeletePaymentMethodResult": { + "CreateWalletResult": { "type": "object", "properties": { - "paymentMethodId": { + "walletId": { "type": "string", - "description": "The payment method that was removed." + "description": "Unique identifier for a Wallet." + }, + "addresses": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of account addresses." } }, - "required": [ - "paymentMethodId" - ] + "required": ["walletId", "addresses"] }, - "DeletePoliciesIntent": { + "CreateWebhookEndpointIntent": { "type": "object", "properties": { - "policyIds": { + "url": { + "type": "string", + "description": "The destination URL for webhook delivery." + }, + "name": { + "type": "string", + "description": "Human-readable name for this webhook endpoint." + }, + "subscriptions": { "type": "array", "items": { - "type": "string" + "$ref": "#/components/schemas/WebhookSubscriptionParams" }, - "description": "List of unique identifiers for policies within an organization" + "description": "Event subscriptions to create for this endpoint." } }, - "required": [ - "policyIds" - ] + "required": ["url", "name"] }, - "DeletePoliciesRequest": { + "CreateWebhookEndpointRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_DELETE_POLICIES" - ] + "enum": ["ACTIVITY_TYPE_CREATE_WEBHOOK_ENDPOINT"] }, "timestampMs": { "type": "string", @@ -9471,55 +7962,94 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/components/schemas/DeletePoliciesIntent" + "$ref": "#/components/schemas/CreateWebhookEndpointIntent" }, "generateAppProofs": { "type": "boolean", "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "DeletePoliciesResult": { + "CreateWebhookEndpointResult": { "type": "object", "properties": { - "policyIds": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of unique identifiers for the deleted policies." + "endpointId": { + "type": "string", + "description": "Unique identifier of the created webhook endpoint." + }, + "webhookEndpoint": { + "$ref": "#/components/schemas/WebhookEndpointData" } }, - "required": [ - "policyIds" + "required": ["endpointId", "webhookEndpoint"] + }, + "CredPropsAuthenticationExtensionsClientOutputs": { + "type": "object", + "properties": { + "rk": { + "type": "boolean" + } + }, + "required": ["rk"] + }, + "CredentialType": { + "type": "string", + "enum": [ + "CREDENTIAL_TYPE_WEBAUTHN_AUTHENTICATOR", + "CREDENTIAL_TYPE_API_KEY_P256", + "CREDENTIAL_TYPE_RECOVER_USER_KEY_P256", + "CREDENTIAL_TYPE_API_KEY_SECP256K1", + "CREDENTIAL_TYPE_EMAIL_AUTH_KEY_P256", + "CREDENTIAL_TYPE_API_KEY_ED25519", + "CREDENTIAL_TYPE_OTP_AUTH_KEY_P256", + "CREDENTIAL_TYPE_READ_WRITE_SESSION_KEY_P256", + "CREDENTIAL_TYPE_OAUTH_KEY_P256", + "CREDENTIAL_TYPE_LOGIN" ] }, - "DeletePolicyIntent": { + "Curve": { + "type": "string", + "enum": ["CURVE_SECP256K1", "CURVE_ED25519", "CURVE_P256"] + }, + "CustomRevertError": { "type": "object", "properties": { - "policyId": { + "errorName": { "type": "string", - "description": "Unique identifier for a given Policy." + "description": "The name of the custom error.", + "nullable": true + }, + "paramsJson": { + "type": "string", + "description": "The decoded parameters as a JSON object.", + "nullable": true + } + } + }, + "DeleteApiKeysIntent": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "Unique identifier for a given User." + }, + "apiKeyIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of API Key IDs." } }, - "required": [ - "policyId" - ] + "required": ["userId", "apiKeyIds"] }, - "DeletePolicyRequest": { + "DeleteApiKeysRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_DELETE_POLICY" - ] + "enum": ["ACTIVITY_TYPE_DELETE_API_KEYS"] }, "timestampMs": { "type": "string", @@ -9530,55 +8060,51 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/components/schemas/DeletePolicyIntent" + "$ref": "#/components/schemas/DeleteApiKeysIntent" }, "generateAppProofs": { "type": "boolean", "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "DeletePolicyResult": { + "DeleteApiKeysResult": { "type": "object", "properties": { - "policyId": { - "type": "string", - "description": "Unique identifier for a given Policy." + "apiKeyIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of API Key IDs." } }, - "required": [ - "policyId" - ] + "required": ["apiKeyIds"] }, - "DeletePrivateKeyTagsIntent": { + "DeleteAuthenticatorsIntent": { "type": "object", "properties": { - "privateKeyTagIds": { + "userId": { + "type": "string", + "description": "Unique identifier for a given User." + }, + "authenticatorIds": { "type": "array", "items": { "type": "string" }, - "description": "A list of Private Key Tag IDs." + "description": "A list of Authenticator IDs." } }, - "required": [ - "privateKeyTagIds" - ] + "required": ["userId", "authenticatorIds"] }, - "DeletePrivateKeyTagsRequest": { + "DeleteAuthenticatorsRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_DELETE_PRIVATE_KEY_TAGS" - ] + "enum": ["ACTIVITY_TYPE_DELETE_AUTHENTICATORS"] }, "timestampMs": { "type": "string", @@ -9589,71 +8115,44 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/components/schemas/DeletePrivateKeyTagsIntent" + "$ref": "#/components/schemas/DeleteAuthenticatorsIntent" }, "generateAppProofs": { "type": "boolean", "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "DeletePrivateKeyTagsResult": { + "DeleteAuthenticatorsResult": { "type": "object", "properties": { - "privateKeyTagIds": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of Private Key Tag IDs." - }, - "privateKeyIds": { + "authenticatorIds": { "type": "array", "items": { "type": "string" }, - "description": "A list of Private Key IDs." + "description": "Unique identifier for a given Authenticator." } }, - "required": [ - "privateKeyTagIds", - "privateKeyIds" - ] + "required": ["authenticatorIds"] }, - "DeletePrivateKeysIntent": { + "DeleteFiatOnRampCredentialIntent": { "type": "object", "properties": { - "privateKeyIds": { - "type": "array", - "items": { - "type": "string" - }, - "description": "List of unique identifiers for private keys within an organization" - }, - "deleteWithoutExport": { - "type": "boolean", - "description": "Optional parameter for deleting the private keys, even if any have not been previously exported. If they have been exported, this field is ignored.", - "nullable": true + "fiatOnrampCredentialId": { + "type": "string", + "description": "The ID of the fiat on-ramp credential to delete" } }, - "required": [ - "privateKeyIds" - ] + "required": ["fiatOnrampCredentialId"] }, - "DeletePrivateKeysRequest": { + "DeleteFiatOnRampCredentialRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_DELETE_PRIVATE_KEYS" - ] + "enum": ["ACTIVITY_TYPE_DELETE_FIAT_ON_RAMP_CREDENTIAL"] }, "timestampMs": { "type": "string", @@ -9664,55 +8163,41 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/components/schemas/DeletePrivateKeysIntent" + "$ref": "#/components/schemas/DeleteFiatOnRampCredentialIntent" }, "generateAppProofs": { "type": "boolean", "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "DeletePrivateKeysResult": { + "DeleteFiatOnRampCredentialResult": { "type": "object", "properties": { - "privateKeyIds": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of private key unique identifiers that were removed" + "fiatOnRampCredentialId": { + "type": "string", + "description": "Unique identifier of the Fiat On-Ramp credential that was deleted" } }, - "required": [ - "privateKeyIds" - ] + "required": ["fiatOnRampCredentialId"] }, - "DeleteSmartContractInterfaceIntent": { + "DeleteInvitationIntent": { "type": "object", "properties": { - "smartContractInterfaceId": { + "invitationId": { "type": "string", - "description": "The ID of a Smart Contract Interface intended for deletion." + "description": "Unique identifier for a given Invitation object." } }, - "required": [ - "smartContractInterfaceId" - ] + "required": ["invitationId"] }, - "DeleteSmartContractInterfaceRequest": { + "DeleteInvitationRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_DELETE_SMART_CONTRACT_INTERFACE" - ] + "enum": ["ACTIVITY_TYPE_DELETE_INVITATION"] }, "timestampMs": { "type": "string", @@ -9723,50 +8208,45 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/components/schemas/DeleteSmartContractInterfaceIntent" + "$ref": "#/components/schemas/DeleteInvitationIntent" }, "generateAppProofs": { "type": "boolean", "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "DeleteSmartContractInterfaceResult": { + "DeleteInvitationResult": { "type": "object", "properties": { - "smartContractInterfaceId": { + "invitationId": { "type": "string", - "description": "The ID of the deleted Smart Contract Interface." + "description": "Unique identifier for a given Invitation." } }, - "required": [ - "smartContractInterfaceId" - ] + "required": ["invitationId"] }, - "DeleteSubOrganizationIntent": { + "DeleteMfaPolicyIntent": { "type": "object", "properties": { - "deleteWithoutExport": { - "type": "boolean", - "description": "Sub-organization deletion, by default, requires associated wallets and private keys to be exported for security reasons. Set this boolean to true to force sub-organization deletion even if some wallets or private keys within it have not been exported yet. Default: false.", - "nullable": true + "userId": { + "type": "string", + "description": "The ID of the User to delete the MFA Policy from." + }, + "mfaPolicyId": { + "type": "string", + "description": "Unique identifier for a given MFA Policy." } - } + }, + "required": ["userId", "mfaPolicyId"] }, - "DeleteSubOrganizationRequest": { + "DeleteMfaPolicyRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_DELETE_SUB_ORGANIZATION" - ] + "enum": ["ACTIVITY_TYPE_DELETE_MFA_POLICY"] }, "timestampMs": { "type": "string", @@ -9777,52 +8257,37 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/components/schemas/DeleteSubOrganizationIntent" - }, - "generateAppProofs": { - "type": "boolean", - "nullable": true + "$ref": "#/components/schemas/DeleteMfaPolicyIntent" } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "DeleteSubOrganizationResult": { + "DeleteMfaPolicyResult": { "type": "object", "properties": { - "subOrganizationUuid": { + "mfaPolicyId": { "type": "string", - "description": "Unique identifier of the sub organization that was removed" + "description": "Unique identifier for a given MFA Policy." } }, - "required": [ - "subOrganizationUuid" - ] + "required": ["mfaPolicyId"] }, - "DeleteTvcAppAndDeploymentsIntent": { + "DeleteOauth2CredentialIntent": { "type": "object", "properties": { - "appId": { + "oauth2CredentialId": { "type": "string", - "description": "The unique identifier of the TVC app to delete. The app and all associated deployments will be removed." + "description": "The ID of the OAuth 2.0 credential to delete" } }, - "required": [ - "appId" - ] + "required": ["oauth2CredentialId"] }, - "DeleteTvcAppAndDeploymentsRequest": { + "DeleteOauth2CredentialRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_DELETE_TVC_APP_AND_DEPLOYMENTS" - ] + "enum": ["ACTIVITY_TYPE_DELETE_OAUTH2_CREDENTIAL"] }, "timestampMs": { "type": "string", @@ -9833,52 +8298,48 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/components/schemas/DeleteTvcAppAndDeploymentsIntent" + "$ref": "#/components/schemas/DeleteOauth2CredentialIntent" }, "generateAppProofs": { "type": "boolean", "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "DeleteTvcAppAndDeploymentsResult": { + "DeleteOauth2CredentialResult": { "type": "object", "properties": { - "appId": { + "oauth2CredentialId": { "type": "string", - "description": "The unique identifier of the deleted TVC app." + "description": "Unique identifier of the OAuth 2.0 credential that was deleted" } }, - "required": [ - "appId" - ] + "required": ["oauth2CredentialId"] }, - "DeleteTvcDeploymentIntent": { + "DeleteOauthProvidersIntent": { "type": "object", "properties": { - "deploymentId": { + "userId": { "type": "string", - "description": "The unique identifier of the TVC deployment to delete." + "description": "The ID of the User to remove an Oauth provider from" + }, + "providerIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Unique identifier for a given Provider." } }, - "required": [ - "deploymentId" - ] + "required": ["userId", "providerIds"] }, - "DeleteTvcDeploymentRequest": { + "DeleteOauthProvidersRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_DELETE_TVC_DEPLOYMENT" - ] + "enum": ["ACTIVITY_TYPE_DELETE_OAUTH_PROVIDERS"] }, "timestampMs": { "type": "string", @@ -9889,125 +8350,88 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/components/schemas/DeleteTvcDeploymentIntent" + "$ref": "#/components/schemas/DeleteOauthProvidersIntent" }, "generateAppProofs": { "type": "boolean", "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] - }, - "DeleteTvcDeploymentResult": { - "type": "object", - "properties": { - "deploymentId": { - "type": "string", - "description": "The unique identifier of the deleted TVC deployment." - } - }, - "required": [ - "deploymentId" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "DeleteUserTagsIntent": { + "DeleteOauthProvidersResult": { "type": "object", "properties": { - "userTagIds": { + "providerIds": { "type": "array", "items": { "type": "string" }, - "description": "A list of User Tag IDs." + "description": "A list of unique identifiers for Oauth Providers" } }, - "required": [ - "userTagIds" - ] + "required": ["providerIds"] }, - "DeleteUserTagsRequest": { + "DeleteOrganizationIntent": { "type": "object", "properties": { - "type": { - "type": "string", - "enum": [ - "ACTIVITY_TYPE_DELETE_USER_TAGS" - ] - }, - "timestampMs": { + "organizationId": { "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." - }, + "description": "Unique identifier for a given Organization." + } + }, + "required": ["organizationId"] + }, + "DeleteOrganizationResult": { + "type": "object", + "properties": { "organizationId": { "type": "string", - "description": "Unique identifier for a given Organization." - }, - "parameters": { - "$ref": "#/components/schemas/DeleteUserTagsIntent" - }, - "generateAppProofs": { - "type": "boolean", + "description": "Unique identifier for a given Organization." + } + }, + "required": ["organizationId"] + }, + "DeletePaymentMethodIntent": { + "type": "object", + "properties": { + "paymentMethodId": { + "type": "string", + "description": "The payment method that the customer wants to remove.", "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["paymentMethodId"] }, - "DeleteUserTagsResult": { + "DeletePaymentMethodResult": { "type": "object", "properties": { - "userTagIds": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of User Tag IDs." - }, - "userIds": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of User IDs." + "paymentMethodId": { + "type": "string", + "description": "The payment method that was removed." } }, - "required": [ - "userTagIds", - "userIds" - ] + "required": ["paymentMethodId"] }, - "DeleteUsersIntent": { + "DeletePoliciesIntent": { "type": "object", "properties": { - "userIds": { + "policyIds": { "type": "array", "items": { "type": "string" }, - "description": "A list of User IDs." + "description": "List of unique identifiers for policies within an organization" } }, - "required": [ - "userIds" - ] + "required": ["policyIds"] }, - "DeleteUsersRequest": { + "DeletePoliciesRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_DELETE_USERS" - ] + "enum": ["ACTIVITY_TYPE_DELETE_POLICIES"] }, "timestampMs": { "type": "string", @@ -10018,63 +8442,44 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/components/schemas/DeleteUsersIntent" + "$ref": "#/components/schemas/DeletePoliciesIntent" }, "generateAppProofs": { "type": "boolean", "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "DeleteUsersResult": { + "DeletePoliciesResult": { "type": "object", "properties": { - "userIds": { + "policyIds": { "type": "array", "items": { "type": "string" }, - "description": "A list of User IDs." + "description": "A list of unique identifiers for the deleted policies." } }, - "required": [ - "userIds" - ] + "required": ["policyIds"] }, - "DeleteWalletAccountsIntent": { + "DeletePolicyIntent": { "type": "object", "properties": { - "walletAccountIds": { - "type": "array", - "items": { - "type": "string" - }, - "description": "List of unique identifiers for wallet accounts within an organization" - }, - "deleteWithoutExport": { - "type": "boolean", - "description": "Optional parameter for deleting the wallet accounts, even if any have not been previously exported. If they have been exported, this field is ignored.", - "nullable": true + "policyId": { + "type": "string", + "description": "Unique identifier for a given Policy." } }, - "required": [ - "walletAccountIds" - ] + "required": ["policyId"] }, - "DeleteWalletAccountsRequest": { + "DeletePolicyRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_DELETE_WALLET_ACCOUNTS" - ] + "enum": ["ACTIVITY_TYPE_DELETE_POLICY"] }, "timestampMs": { "type": "string", @@ -10085,63 +8490,44 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/components/schemas/DeleteWalletAccountsIntent" + "$ref": "#/components/schemas/DeletePolicyIntent" }, "generateAppProofs": { "type": "boolean", "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "DeleteWalletAccountsResult": { + "DeletePolicyResult": { "type": "object", "properties": { - "walletAccountIds": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of wallet account unique identifiers that were removed" + "policyId": { + "type": "string", + "description": "Unique identifier for a given Policy." } }, - "required": [ - "walletAccountIds" - ] + "required": ["policyId"] }, - "DeleteWalletsIntent": { + "DeletePrivateKeyTagsIntent": { "type": "object", "properties": { - "walletIds": { + "privateKeyTagIds": { "type": "array", "items": { "type": "string" }, - "description": "List of unique identifiers for wallets within an organization" - }, - "deleteWithoutExport": { - "type": "boolean", - "description": "Optional parameter for deleting the wallets, even if any have not been previously exported. If they have been exported, this field is ignored.", - "nullable": true + "description": "A list of Private Key Tag IDs." } }, - "required": [ - "walletIds" - ] + "required": ["privateKeyTagIds"] }, - "DeleteWalletsRequest": { + "DeletePrivateKeyTagsRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_DELETE_WALLETS" - ] + "enum": ["ACTIVITY_TYPE_DELETE_PRIVATE_KEY_TAGS"] }, "timestampMs": { "type": "string", @@ -10152,55 +8538,59 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/components/schemas/DeleteWalletsIntent" + "$ref": "#/components/schemas/DeletePrivateKeyTagsIntent" }, "generateAppProofs": { "type": "boolean", "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "DeleteWalletsResult": { + "DeletePrivateKeyTagsResult": { "type": "object", "properties": { - "walletIds": { + "privateKeyTagIds": { "type": "array", "items": { "type": "string" }, - "description": "A list of wallet unique identifiers that were removed" + "description": "A list of Private Key Tag IDs." + }, + "privateKeyIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of Private Key IDs." } }, - "required": [ - "walletIds" - ] + "required": ["privateKeyTagIds", "privateKeyIds"] }, - "DeleteWebhookEndpointIntent": { + "DeletePrivateKeysIntent": { "type": "object", "properties": { - "endpointId": { - "type": "string", - "description": "Unique identifier of the webhook endpoint to delete." + "privateKeyIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of unique identifiers for private keys within an organization" + }, + "deleteWithoutExport": { + "type": "boolean", + "description": "Optional parameter for deleting the private keys, even if any have not been previously exported. If they have been exported, this field is ignored.", + "nullable": true } }, - "required": [ - "endpointId" - ] + "required": ["privateKeyIds"] }, - "DeleteWebhookEndpointRequest": { + "DeletePrivateKeysRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_DELETE_WEBHOOK_ENDPOINT" - ] + "enum": ["ACTIVITY_TYPE_DELETE_PRIVATE_KEYS"] }, "timestampMs": { "type": "string", @@ -10211,133 +8601,44 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/components/schemas/DeleteWebhookEndpointIntent" + "$ref": "#/components/schemas/DeletePrivateKeysIntent" }, "generateAppProofs": { "type": "boolean", "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] - }, - "DeleteWebhookEndpointResult": { - "type": "object", - "properties": { - "endpointId": { - "type": "string", - "description": "Unique identifier of the deleted webhook endpoint." - } - }, - "required": [ - "endpointId" - ] - }, - "DeploymentStatus": { - "type": "object", - "properties": { - "deploymentId": { - "type": "string", - "description": "Unique identifier for this deployment (corresponds to k8s deployment label)" - }, - "readyReplicas": { - "type": "integer", - "format": "int32", - "description": "Number of ready replicas" - }, - "desiredReplicas": { - "type": "integer", - "format": "int32", - "description": "Desired number of replicas" - }, - "lastUpdatedTime": { - "$ref": "#/components/schemas/external.data.v1.Timestamp" - } - }, - "required": [ - "deploymentId", - "readyReplicas", - "desiredReplicas", - "lastUpdatedTime" - ] - }, - "DisableAuthProxyIntent": { - "type": "object" - }, - "DisableAuthProxyResult": { - "type": "object" - }, - "DisablePrivateKeyIntent": { - "type": "object", - "properties": { - "privateKeyId": { - "type": "string", - "description": "Unique identifier for a given Private Key." - } - }, - "required": [ - "privateKeyId" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "DisablePrivateKeyResult": { + "DeletePrivateKeysResult": { "type": "object", "properties": { - "privateKeyId": { - "type": "string", - "description": "Unique identifier for a given Private Key." + "privateKeyIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of private key unique identifiers that were removed" } }, - "required": [ - "privateKeyId" - ] + "required": ["privateKeyIds"] }, - "EarnDeployWrapperIntent": { - "type": "object", - "properties": { - "vaultAddress": { - "type": "string", - "description": "Address of the underlying yield vault to wrap (from the ListEarnVaults catalog)." - }, - "chainCaip2": { - "type": "string", - "enum": [ - "eip155:1", - "eip155:8453", - "eip155:42161", - "eip155:137", - "eip155:56", - "eip155:4217" - ], - "description": "CAIP-2 chain ID the vault lives on (e.g., 'eip155:8453' for Base)." - }, - "clientFeeBps": { - "type": "string", - "description": "Your performance fee on gross yield, in basis points (e.g., '2000' for 20%). Your fee plus Turnkey's fee cannot exceed 50% of yield." - }, - "clientFeeWallet": { + "DeleteSmartContractInterfaceIntent": { + "type": "object", + "properties": { + "smartContractInterfaceId": { "type": "string", - "description": "The wallet address that receives the client's fee payouts on-chain. Must be a Turnkey-managed wallet address." + "description": "The ID of a Smart Contract Interface intended for deletion." } }, - "required": [ - "vaultAddress", - "chainCaip2", - "clientFeeBps", - "clientFeeWallet" - ] + "required": ["smartContractInterfaceId"] }, - "EarnDeployWrapperRequest": { + "DeleteSmartContractInterfaceRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_EARN_DEPLOY_WRAPPER" - ] + "enum": ["ACTIVITY_TYPE_DELETE_SMART_CONTRACT_INTERFACE"] }, "timestampMs": { "type": "string", @@ -10348,90 +8649,86 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/components/schemas/EarnDeployWrapperIntent" + "$ref": "#/components/schemas/DeleteSmartContractInterfaceIntent" }, "generateAppProofs": { "type": "boolean", "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "EarnDeployWrapperResult": { + "DeleteSmartContractInterfaceResult": { "type": "object", "properties": { - "wrapperAddress": { - "type": "string", - "description": "Address of the deployed fee wrapper (the deposit target)." - }, - "splitterAddress": { - "type": "string", - "description": "Address of the deployed fee splitter (PaymentSplitter for Morpho, RevenueSplitterOwner for Aave)." - }, - "deployRequestId": { + "smartContractInterfaceId": { "type": "string", - "description": "Identifier to poll deploy status." + "description": "The ID of the deleted Smart Contract Interface." } }, - "required": [ - "wrapperAddress", - "splitterAddress", - "deployRequestId" - ] + "required": ["smartContractInterfaceId"] }, - "EarnDepositIntent": { + "DeleteSubOrganizationIntent": { "type": "object", "properties": { - "wrapperAddress": { + "deleteWithoutExport": { + "type": "boolean", + "description": "Sub-organization deletion, by default, requires associated wallets and private keys to be exported for security reasons. Set this boolean to true to force sub-organization deletion even if some wallets or private keys within it have not been exported yet. Default: false.", + "nullable": true + } + } + }, + "DeleteSubOrganizationRequest": { + "type": "object", + "properties": { + "type": { "type": "string", - "description": "Address of the deployed Earn wrapper to deposit into, from ListEarnVaults/ListEarnPositions. Must be one of the org's deployed wrappers." + "enum": ["ACTIVITY_TYPE_DELETE_SUB_ORGANIZATION"] }, - "signWith": { + "timestampMs": { "type": "string", - "description": "A Wallet account address or Private Key address to deposit from and sign with. Must be an on-chain address; Private Key identifiers are not supported." + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, - "assets": { + "organizationId": { "type": "string", - "description": "Amount of the underlying asset to deposit, in raw on-chain units (e.g., '1000000' for 1 USDC at 6 decimals)." + "description": "Unique identifier for a given Organization." }, - "chainCaip2": { - "type": "string", - "enum": [ - "eip155:1", - "eip155:8453", - "eip155:42161", - "eip155:137", - "eip155:56", - "eip155:4217" - ], - "description": "CAIP-2 chain ID the vault lives on (e.g., 'eip155:8453' for Base)." + "parameters": { + "$ref": "#/components/schemas/DeleteSubOrganizationIntent" }, - "sponsor": { + "generateAppProofs": { "type": "boolean", - "description": "Whether to sponsor this transaction via Gas Station.", "nullable": true } }, - "required": [ - "wrapperAddress", - "signWith", - "assets", - "chainCaip2" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "EarnDepositRequest": { + "DeleteSubOrganizationResult": { + "type": "object", + "properties": { + "subOrganizationUuid": { + "type": "string", + "description": "Unique identifier of the sub organization that was removed" + } + }, + "required": ["subOrganizationUuid"] + }, + "DeleteTvcAppAndDeploymentsIntent": { + "type": "object", + "properties": { + "appId": { + "type": "string", + "description": "The unique identifier of the TVC app to delete. The app and all associated deployments will be removed." + } + }, + "required": ["appId"] + }, + "DeleteTvcAppAndDeploymentsRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_EARN_DEPOSIT" - ] + "enum": ["ACTIVITY_TYPE_DELETE_TVC_APP_AND_DEPLOYMENTS"] }, "timestampMs": { "type": "string", @@ -10442,192 +8739,203 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/components/schemas/EarnDepositIntent" + "$ref": "#/components/schemas/DeleteTvcAppAndDeploymentsIntent" }, "generateAppProofs": { "type": "boolean", "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "EarnDepositResult": { + "DeleteTvcAppAndDeploymentsResult": { "type": "object", "properties": { - "depositRequestId": { + "appId": { "type": "string", - "description": "Identifier to poll deposit status and tx hash via GetEarnDepositStatus." + "description": "The unique identifier of the deleted TVC app." } }, - "required": [ - "depositRequestId" - ] + "required": ["appId"] }, - "EarnEnabledVault": { + "DeleteTvcDeploymentIntent": { "type": "object", "properties": { - "vaultAddress": { - "type": "string", - "description": "Address of the underlying yield vault." - }, - "wrapperAddress": { - "type": "string", - "description": "Address of the deployed fee wrapper (the deposit target)." - }, - "provider": { - "$ref": "#/components/schemas/EarnProvider" - }, - "caip19": { + "deploymentId": { "type": "string", - "description": "CAIP-19 asset ID of the vault's underlying asset (e.g. 'eip155:8453/erc20:0x833589...'); the chain is encoded in the identifier." - }, - "apyPct": { + "description": "The unique identifier of the TVC deployment to delete." + } + }, + "required": ["deploymentId"] + }, + "DeleteTvcDeploymentRequest": { + "type": "object", + "properties": { + "type": { "type": "string", - "description": "Gross annual percentage yield, expressed as a decimal fraction (before Turnkey and client fees)." + "enum": ["ACTIVITY_TYPE_DELETE_TVC_DEPLOYMENT"] }, - "totalDeposited": { + "timestampMs": { "type": "string", - "description": "Total deposited through this wrapper (wrapper TVL), in raw on-chain units of the underlying asset." - }, - "display": { - "$ref": "#/components/schemas/EarnValueDisplay" + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, - "netApyPct": { + "organizationId": { "type": "string", - "description": "Annual percentage yield net of the Turnkey and client performance fees, expressed as a decimal fraction." + "description": "Unique identifier for a given Organization." }, - "clientFeeBps": { - "type": "string", - "description": "Client performance fee taken on yield, in basis points. Currently org-wide; moving to a per-vault setting." + "parameters": { + "$ref": "#/components/schemas/DeleteTvcDeploymentIntent" }, - "depositsDisabled": { + "generateAppProofs": { "type": "boolean", - "description": "When true, deposits to this wrapper are rejected; withdrawals are unaffected. Toggled via EarnSetWrapperState." - }, - "name": { - "type": "string", - "description": "Human-readable vault name from the provider (e.g. 'Steakhouse Prime USDC' for Morpho; the reserve symbol for Aave)." - }, - "curator": { - "type": "string", - "description": "Vault curator name(s), comma-separated when a vault has multiple. Empty for providers without curators (e.g. Aave)." - }, - "claimableClientFee": { - "type": "string", - "description": "The client's claimable performance fee (releasable now), in raw on-chain units of the underlying asset (the caip19 asset). Turnkey's fee is excluded. Only returned to the parent org; unset when a sub-org queries.", "nullable": true - }, - "claimableClientFeeDisplay": { - "$ref": "#/components/schemas/EarnValueDisplay" } - } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "EarnPosition": { + "DeleteTvcDeploymentResult": { "type": "object", "properties": { - "vaultAddress": { - "type": "string", - "description": "Address of the underlying yield vault." - }, - "wrapperAddress": { - "type": "string", - "description": "Address of the fee wrapper holding the position." - }, - "provider": { - "$ref": "#/components/schemas/EarnProvider" - }, - "caip19": { + "deploymentId": { "type": "string", - "description": "CAIP-19 asset ID of the vault's underlying asset (e.g. 'eip155:8453/erc20:0x833589...'); the chain is encoded in the identifier." - }, - "currentValue": { + "description": "The unique identifier of the deleted TVC deployment." + } + }, + "required": ["deploymentId"] + }, + "DeleteUserTagsIntent": { + "type": "object", + "properties": { + "userTagIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User Tag IDs." + } + }, + "required": ["userTagIds"] + }, + "DeleteUserTagsRequest": { + "type": "object", + "properties": { + "type": { "type": "string", - "description": "Current value of the position in the underlying asset, in raw on-chain units (already net of the wrapper fee)." + "enum": ["ACTIVITY_TYPE_DELETE_USER_TAGS"] }, - "totalDeposited": { + "timestampMs": { "type": "string", - "description": "Lifetime total deposited into this position, in raw on-chain units." + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, - "totalWithdrawn": { + "organizationId": { "type": "string", - "description": "Lifetime total withdrawn from this position, in raw on-chain units." + "description": "Unique identifier for a given Organization." }, - "display": { - "$ref": "#/components/schemas/EarnPositionDisplay" + "parameters": { + "$ref": "#/components/schemas/DeleteUserTagsIntent" }, - "depositsDisabled": { + "generateAppProofs": { "type": "boolean", - "description": "When true, deposits to this wrapper are rejected; withdrawals are unaffected. Toggled via EarnSetWrapperState." + "nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "DeleteUserTagsResult": { + "type": "object", + "properties": { + "userTagIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User Tag IDs." + }, + "userIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User IDs." + } + }, + "required": ["userTagIds", "userIds"] + }, + "DeleteUsersIntent": { + "type": "object", + "properties": { + "userIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User IDs." } - } + }, + "required": ["userIds"] }, - "EarnPositionDisplay": { + "DeleteUsersRequest": { "type": "object", "properties": { - "currentValueUsd": { - "type": "string", - "description": "Current value in USD, for display only." - }, - "totalDepositedUsd": { + "type": { "type": "string", - "description": "Total deposited in USD, for display only." + "enum": ["ACTIVITY_TYPE_DELETE_USERS"] }, - "totalWithdrawnUsd": { + "timestampMs": { "type": "string", - "description": "Total withdrawn in USD, for display only." + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, - "currentValueCrypto": { + "organizationId": { "type": "string", - "description": "Current value in the asset's own units, for display only." + "description": "Unique identifier for a given Organization." }, - "totalDepositedCrypto": { - "type": "string", - "description": "Total deposited in the asset's own units, for display only." + "parameters": { + "$ref": "#/components/schemas/DeleteUsersIntent" }, - "totalWithdrawnCrypto": { - "type": "string", - "description": "Total withdrawn in the asset's own units, for display only." + "generateAppProofs": { + "type": "boolean", + "nullable": true } - } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "EarnProvider": { - "type": "string", - "enum": [ - "EARN_PROVIDER_MORPHO", - "EARN_PROVIDER_AAVE" - ] + "DeleteUsersResult": { + "type": "object", + "properties": { + "userIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User IDs." + } + }, + "required": ["userIds"] }, - "EarnSetWrapperStateIntent": { + "DeleteWalletAccountsIntent": { "type": "object", "properties": { - "wrapperAddress": { - "type": "string", - "description": "Address of the deployed Earn wrapper to update, from ListEarnVaults/ListEarnPositions. Must be one of the org's deployed wrappers." + "walletAccountIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of unique identifiers for wallet accounts within an organization" }, - "depositsDisabled": { + "deleteWithoutExport": { "type": "boolean", - "description": "When true, deposits to this wrapper are rejected; withdrawals are unaffected. Set to false to re-enable deposits.", + "description": "Optional parameter for deleting the wallet accounts, even if any have not been previously exported. If they have been exported, this field is ignored.", "nullable": true } }, - "required": [ - "wrapperAddress", - "depositsDisabled" - ] + "required": ["walletAccountIds"] }, - "EarnSetWrapperStateRequest": { + "DeleteWalletAccountsRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_EARN_SET_WRAPPER_STATE" - ] + "enum": ["ACTIVITY_TYPE_DELETE_WALLET_ACCOUNTS"] }, "timestampMs": { "type": "string", @@ -10638,137 +8946,100 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/components/schemas/EarnSetWrapperStateIntent" + "$ref": "#/components/schemas/DeleteWalletAccountsIntent" }, "generateAppProofs": { "type": "boolean", "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "EarnSetWrapperStateResult": { + "DeleteWalletAccountsResult": { "type": "object", "properties": { - "wrapperAddress": { - "type": "string", - "description": "Address of the updated Earn wrapper." - }, - "depositsDisabled": { - "type": "boolean", - "description": "The wrapper's deposit state after this activity." + "walletAccountIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of wallet account unique identifiers that were removed" } }, - "required": [ - "wrapperAddress", - "depositsDisabled" - ] + "required": ["walletAccountIds"] }, - "EarnValueDisplay": { + "DeleteWalletsIntent": { "type": "object", "properties": { - "usd": { - "type": "string", - "description": "USD value, for display only." + "walletIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of unique identifiers for wallets within an organization" }, - "crypto": { - "type": "string", - "description": "Normalized amount in the asset's own units, for display only." + "deleteWithoutExport": { + "type": "boolean", + "description": "Optional parameter for deleting the wallets, even if any have not been previously exported. If they have been exported, this field is ignored.", + "nullable": true } - } + }, + "required": ["walletIds"] }, - "EarnVault": { + "DeleteWalletsRequest": { "type": "object", "properties": { - "vaultAddress": { + "type": { "type": "string", - "description": "Address of the underlying yield vault." - }, - "provider": { - "$ref": "#/components/schemas/EarnProvider" + "enum": ["ACTIVITY_TYPE_DELETE_WALLETS"] }, - "caip19": { + "timestampMs": { "type": "string", - "description": "CAIP-19 asset ID of the vault's underlying asset (e.g. 'eip155:8453/erc20:0x833589...'); the chain is encoded in the identifier." + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, - "tvl": { + "organizationId": { "type": "string", - "description": "Total value locked in the vault, in raw on-chain units of the underlying asset. The catalog is sorted by the USD value of this." + "description": "Unique identifier for a given Organization." }, - "apyPct": { - "type": "string", - "description": "Current annual percentage yield, expressed as a decimal fraction (e.g., '0.0812' for 8.12%)." + "parameters": { + "$ref": "#/components/schemas/DeleteWalletsIntent" }, - "enabled": { + "generateAppProofs": { "type": "boolean", - "description": "Whether the organization has enabled this vault." - }, - "display": { - "$ref": "#/components/schemas/EarnValueDisplay" - }, - "name": { - "type": "string", - "description": "Human-readable vault name from the provider (e.g. 'Steakhouse Prime USDC' for Morpho; the reserve symbol for Aave)." - }, - "curator": { - "type": "string", - "description": "Vault curator name(s), comma-separated when a vault has multiple. Empty for providers without curators (e.g. Aave)." + "nullable": true } - } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "EarnWithdrawIntent": { + "DeleteWalletsResult": { "type": "object", "properties": { - "wrapperAddress": { - "type": "string", - "description": "Address of the deployed Earn wrapper holding the position to withdraw from, from ListEarnPositions. Must be one of the org's deployed wrappers." - }, - "signWith": { - "type": "string", - "description": "A Wallet account address or Private Key address to withdraw to and sign with. Must be an on-chain address; Private Key identifiers are not supported." - }, - "chainCaip2": { - "type": "string", - "enum": [ - "eip155:1", - "eip155:8453", - "eip155:42161", - "eip155:137", - "eip155:56", - "eip155:4217" - ], - "description": "CAIP-2 chain ID the vault lives on (e.g., 'eip155:8453' for Base)." - }, - "sponsor": { - "type": "boolean", - "description": "Whether to sponsor this transaction via Gas Station.", - "nullable": true - }, - "amountValue": { + "walletIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of wallet unique identifiers that were removed" + } + }, + "required": ["walletIds"] + }, + "DeleteWebhookEndpointIntent": { + "type": "object", + "properties": { + "endpointId": { "type": "string", - "description": "The amount of the underlying asset to withdraw, in raw on-chain units. Pass 'MAX' to withdraw the entire position." + "description": "Unique identifier of the webhook endpoint to delete." } }, - "required": [ - "wrapperAddress", - "signWith", - "chainCaip2", - "amountValue" - ] + "required": ["endpointId"] }, - "EarnWithdrawRequest": { + "DeleteWebhookEndpointRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_EARN_WITHDRAW" - ] + "enum": ["ACTIVITY_TYPE_DELETE_WEBHOOK_ENDPOINT"] }, "timestampMs": { "type": "string", @@ -10779,38 +9050,82 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/components/schemas/EarnWithdrawIntent" + "$ref": "#/components/schemas/DeleteWebhookEndpointIntent" }, "generateAppProofs": { "type": "boolean", "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "DeleteWebhookEndpointResult": { + "type": "object", + "properties": { + "endpointId": { + "type": "string", + "description": "Unique identifier of the deleted webhook endpoint." + } + }, + "required": ["endpointId"] + }, + "DeploymentStatus": { + "type": "object", + "properties": { + "deploymentId": { + "type": "string", + "description": "Unique identifier for this deployment (corresponds to k8s deployment label)" + }, + "readyReplicas": { + "type": "integer", + "format": "int32", + "description": "Number of ready replicas" + }, + "desiredReplicas": { + "type": "integer", + "format": "int32", + "description": "Desired number of replicas" + }, + "lastUpdatedTime": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + } + }, + "required": [ + "deploymentId", + "readyReplicas", + "desiredReplicas", + "lastUpdatedTime" + ] + }, + "DisableAuthProxyIntent": { + "type": "object" + }, + "DisableAuthProxyResult": { + "type": "object" + }, + "DisablePrivateKeyIntent": { + "type": "object", + "properties": { + "privateKeyId": { + "type": "string", + "description": "Unique identifier for a given Private Key." + } + }, + "required": ["privateKeyId"] }, - "EarnWithdrawResult": { + "DisablePrivateKeyResult": { "type": "object", "properties": { - "withdrawRequestId": { + "privateKeyId": { "type": "string", - "description": "Identifier to poll withdrawal status and tx hash via GetEarnWithdrawStatus." + "description": "Unique identifier for a given Private Key." } }, - "required": [ - "withdrawRequestId" - ] + "required": ["privateKeyId"] }, "Effect": { "type": "string", - "enum": [ - "EFFECT_ALLOW", - "EFFECT_DENY" - ] + "enum": ["EFFECT_ALLOW", "EFFECT_DENY"] }, "EmailAuthCustomizationParams": { "type": "object", @@ -10840,9 +9155,7 @@ "nullable": true } }, - "required": [ - "appName" - ] + "required": ["appName"] }, "EmailAuthIntent": { "type": "object", @@ -10889,10 +9202,7 @@ "nullable": true } }, - "required": [ - "email", - "targetPublicKey" - ] + "required": ["email", "targetPublicKey"] }, "EmailAuthIntentV2": { "type": "object", @@ -10939,10 +9249,7 @@ "nullable": true } }, - "required": [ - "email", - "targetPublicKey" - ] + "required": ["email", "targetPublicKey"] }, "EmailAuthIntentV3": { "type": "object", @@ -10989,20 +9296,14 @@ "nullable": true } }, - "required": [ - "email", - "targetPublicKey", - "emailCustomization" - ] + "required": ["email", "targetPublicKey", "emailCustomization"] }, "EmailAuthRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_EMAIL_AUTH_V3" - ] + "enum": ["ACTIVITY_TYPE_EMAIL_AUTH_V3"] }, "timestampMs": { "type": "string", @@ -11020,12 +9321,7 @@ "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, "EmailAuthResult": { "type": "object", @@ -11039,10 +9335,7 @@ "description": "Unique identifier for the created API key." } }, - "required": [ - "userId", - "apiKeyId" - ] + "required": ["userId", "apiKeyId"] }, "EmailCustomizationParams": { "type": "object", @@ -11110,9 +9403,7 @@ "description": "A User ID with permission to initiate authentication." } }, - "required": [ - "userId" - ] + "required": ["userId"] }, "EthCallParams": { "type": "object", @@ -11132,9 +9423,7 @@ "nullable": true } }, - "required": [ - "to" - ] + "required": ["to"] }, "EthFailureDetails": { "type": "object", @@ -11178,10 +9467,7 @@ "description": "CAIP-2 chain ID (e.g., 'eip155:1' for Ethereum mainnet)." } }, - "required": [ - "signedTransaction", - "caip2" - ] + "required": ["signedTransaction", "caip2"] }, "EthSendRawTransactionResult": { "type": "object", @@ -11191,9 +9477,7 @@ "description": "The transaction hash of the sent transaction" } }, - "required": [ - "transactionHash" - ] + "required": ["transactionHash"] }, "EthSendTransactionIntent": { "type": "object", @@ -11274,11 +9558,7 @@ "nullable": true } }, - "required": [ - "from", - "caip2", - "to" - ] + "required": ["from", "caip2", "to"] }, "EthSendTransactionIntentV2": { "type": "object", @@ -11352,20 +9632,14 @@ "description": "Ordered list of calls to execute. Must contain between 1 and 50 entries. A single entry with sponsor=false uses EIP-1559; multiple entries use EIP-7702 batch execution via Gas Station." } }, - "required": [ - "from", - "caip2", - "calls" - ] + "required": ["from", "caip2", "calls"] }, "EthSendTransactionRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_ETH_SEND_TRANSACTION_V2" - ] + "enum": ["ACTIVITY_TYPE_ETH_SEND_TRANSACTION_V2"] }, "timestampMs": { "type": "string", @@ -11383,12 +9657,7 @@ "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, "EthSendTransactionResult": { "type": "object", @@ -11398,9 +9667,7 @@ "description": "The send_transaction_status ID associated with the transaction submission" } }, - "required": [ - "sendTransactionStatusId" - ] + "required": ["sendTransactionStatusId"] }, "EthSendTransactionResultV2": { "type": "object", @@ -11410,9 +9677,7 @@ "description": "The send_transaction_status ID associated with the transaction submission" } }, - "required": [ - "sendTransactionStatusId" - ] + "required": ["sendTransactionStatusId"] }, "EthSendTransactionStatus": { "type": "object", @@ -11424,75 +9689,6 @@ } } }, - "ExecuteSwapIntent": { - "type": "object", - "properties": { - "inputToken": { - "type": "string", - "description": "CAIP-19 asset ID for the input asset. The chain is derived from this value." - }, - "outputToken": { - "type": "string", - "description": "CAIP-19 asset ID for the output asset. May be on a different chain than `input_token` for cross-chain swaps." - }, - "inputAmount": { - "type": "string", - "description": "Base-unit amount of the input asset." - }, - "walletAccount": { - "type": "string", - "description": "Wallet account address to sign and submit the swap transaction from. Cross-wallet swaps are not supported." - }, - "sponsor": { - "type": "boolean", - "description": "Whether to sponsor the resulting swap transaction via Gas Station when supported by the chain.", - "nullable": true - }, - "slippage": { - "type": "string", - "description": "Maximum allowed slippage in basis points.", - "nullable": true - }, - "provider": { - "type": "string", - "description": "Swap provider to execute with, as returned by get_swap_quote. When omitted, execution uses the default provider.", - "nullable": true - }, - "minOutputAmount": { - "type": "string", - "description": "Minimum acceptable base-unit amount of the output asset. Execution fails if the swap provider's quoted minimum output falls below this floor at execution time." - } - }, - "required": [ - "inputToken", - "outputToken", - "inputAmount", - "walletAccount", - "minOutputAmount" - ] - }, - "ExecuteSwapResult": { - "type": "object", - "properties": { - "sendTransactionStatusId": { - "type": "string", - "description": "The send_transaction_status ID associated with the swap transaction submission" - }, - "provider": { - "type": "string", - "description": "Swap provider used to build the transaction.", - "nullable": true - }, - "quoteId": { - "type": "string", - "description": "Quote identifier used for execution, if any.", - "nullable": true - } - }, - "required": [ - "sendTransactionStatusId" - ] - }, "ExportPrivateKeyIntent": { "type": "object", "properties": { @@ -11505,19 +9701,14 @@ "description": "Client-side public key generated by the user, to which the export bundle will be encrypted." } }, - "required": [ - "privateKeyId", - "targetPublicKey" - ] + "required": ["privateKeyId", "targetPublicKey"] }, "ExportPrivateKeyRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_EXPORT_PRIVATE_KEY" - ] + "enum": ["ACTIVITY_TYPE_EXPORT_PRIVATE_KEY"] }, "timestampMs": { "type": "string", @@ -11535,12 +9726,7 @@ "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, "ExportPrivateKeyResult": { "type": "object", @@ -11554,10 +9740,7 @@ "description": "Export bundle containing a private key encrypted to the client's target public key." } }, - "required": [ - "privateKeyId", - "exportBundle" - ] + "required": ["privateKeyId", "exportBundle"] }, "ExportWalletAccountIntent": { "type": "object", @@ -11571,19 +9754,14 @@ "description": "Client-side public key generated by the user, to which the export bundle will be encrypted." } }, - "required": [ - "address", - "targetPublicKey" - ] + "required": ["address", "targetPublicKey"] }, "ExportWalletAccountRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_EXPORT_WALLET_ACCOUNT" - ] + "enum": ["ACTIVITY_TYPE_EXPORT_WALLET_ACCOUNT"] }, "timestampMs": { "type": "string", @@ -11601,12 +9779,7 @@ "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, "ExportWalletAccountResult": { "type": "object", @@ -11620,10 +9793,7 @@ "description": "Export bundle containing a private key encrypted by the client's target public key." } }, - "required": [ - "address", - "exportBundle" - ] + "required": ["address", "exportBundle"] }, "ExportWalletIntent": { "type": "object", @@ -11640,19 +9810,14 @@ "$ref": "#/components/schemas/MnemonicLanguage" } }, - "required": [ - "walletId", - "targetPublicKey" - ] + "required": ["walletId", "targetPublicKey"] }, "ExportWalletRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_EXPORT_WALLET" - ] + "enum": ["ACTIVITY_TYPE_EXPORT_WALLET"] }, "timestampMs": { "type": "string", @@ -11670,12 +9835,7 @@ "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, "ExportWalletResult": { "type": "object", @@ -11689,10 +9849,7 @@ "description": "Export bundle containing a wallet mnemonic + optional newline passphrase encrypted by the client's target public key." } }, - "required": [ - "walletId", - "exportBundle" - ] + "required": ["walletId", "exportBundle"] }, "Feature": { "type": "object", @@ -11717,9 +9874,7 @@ "FEATURE_NAME_SMS_AUTH", "FEATURE_NAME_OTP_EMAIL_AUTH", "FEATURE_NAME_AUTH_PROXY", - "FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED", - "FEATURE_NAME_SWAP_CONFIG", - "FEATURE_NAME_EARN_CONFIG" + "FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED" ] }, "FiatOnRampBlockchainNetwork": { @@ -11882,9 +10037,7 @@ "description": "Array of activity types filtering which activities will be listed in the response." } }, - "required": [ - "organizationId" - ] + "required": ["organizationId"] }, "GetActivitiesResponse": { "type": "object", @@ -11897,9 +10050,7 @@ "description": "A list of activities." } }, - "required": [ - "activities" - ] + "required": ["activities"] }, "GetActivityRequest": { "type": "object", @@ -11913,10 +10064,7 @@ "description": "Unique identifier for a given activity object." } }, - "required": [ - "organizationId", - "activityId" - ] + "required": ["organizationId", "activityId"] }, "GetApiKeyRequest": { "type": "object", @@ -11930,10 +10078,7 @@ "description": "Unique identifier for a given API key." } }, - "required": [ - "organizationId", - "apiKeyId" - ] + "required": ["organizationId", "apiKeyId"] }, "GetApiKeyResponse": { "type": "object", @@ -11942,9 +10087,7 @@ "$ref": "#/components/schemas/ApiKey" } }, - "required": [ - "apiKey" - ] + "required": ["apiKey"] }, "GetApiKeysRequest": { "type": "object", @@ -11959,9 +10102,7 @@ "nullable": true } }, - "required": [ - "organizationId" - ] + "required": ["organizationId"] }, "GetApiKeysResponse": { "type": "object", @@ -11973,278 +10114,121 @@ }, "description": "A list of API keys." } - }, - "required": [ - "apiKeys" - ] - }, - "GetAppProofsRequest": { - "type": "object", - "properties": { - "organizationId": { - "type": "string", - "description": "Unique identifier for a given Organization." - }, - "activityId": { - "type": "string", - "description": "Unique identifier for a given activity." - } - }, - "required": [ - "organizationId", - "activityId" - ] - }, - "GetAppProofsResponse": { - "type": "object", - "properties": { - "appProofs": { - "type": "array", - "items": { - "$ref": "#/components/schemas/AppProof" - } - } - }, - "required": [ - "appProofs" - ] - }, - "GetAppStatusRequest": { - "type": "object", - "properties": { - "organizationId": { - "type": "string", - "description": "Unique identifier for a given Organization." - }, - "appId": { - "type": "string", - "description": "Unique identifier for a given TVC App." - } - }, - "required": [ - "organizationId", - "appId" - ] - }, - "GetAppStatusResponse": { - "type": "object", - "properties": { - "appStatus": { - "$ref": "#/components/schemas/AppStatus" - } - }, - "required": [ - "appStatus" - ] - }, - "GetAuthenticatorRequest": { - "type": "object", - "properties": { - "organizationId": { - "type": "string", - "description": "Unique identifier for a given organization." - }, - "authenticatorId": { - "type": "string", - "description": "Unique identifier for a given authenticator." - } - }, - "required": [ - "organizationId", - "authenticatorId" - ] - }, - "GetAuthenticatorResponse": { - "type": "object", - "properties": { - "authenticator": { - "$ref": "#/components/schemas/Authenticator" - } - }, - "required": [ - "authenticator" - ] - }, - "GetAuthenticatorsRequest": { - "type": "object", - "properties": { - "organizationId": { - "type": "string", - "description": "Unique identifier for a given organization." - }, - "userId": { - "type": "string", - "description": "Unique identifier for a given user." - } - }, - "required": [ - "organizationId", - "userId" - ] - }, - "GetAuthenticatorsResponse": { - "type": "object", - "properties": { - "authenticators": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Authenticator" - }, - "description": "A list of authenticators." - } - }, - "required": [ - "authenticators" - ] + }, + "required": ["apiKeys"] }, - "GetBootProofRequest": { + "GetAppProofsRequest": { "type": "object", "properties": { "organizationId": { "type": "string", "description": "Unique identifier for a given Organization." }, - "ephemeralKey": { + "activityId": { "type": "string", - "description": "Hex encoded ephemeral public key." + "description": "Unique identifier for a given activity." } }, - "required": [ - "organizationId", - "ephemeralKey" - ] + "required": ["organizationId", "activityId"] }, - "GetEarnDeployStatusRequest": { + "GetAppProofsResponse": { + "type": "object", + "properties": { + "appProofs": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AppProof" + } + } + }, + "required": ["appProofs"] + }, + "GetAppStatusRequest": { "type": "object", "properties": { "organizationId": { "type": "string", "description": "Unique identifier for a given Organization." }, - "deployRequestId": { + "appId": { "type": "string", - "description": "The deploy_request_id returned by EarnDeployWrapper." + "description": "Unique identifier for a given TVC App." } }, - "required": [ - "organizationId", - "deployRequestId" - ] + "required": ["organizationId", "appId"] }, - "GetEarnDeployStatusResponse": { + "GetAppStatusResponse": { "type": "object", "properties": { - "status": { - "type": "string", - "enum": [ - "PENDING", - "COMPLETED", - "FAILED" - ], - "description": "Status of the wrapper deployment." - }, - "deployTxHash": { - "type": "string", - "description": "Transaction hash of the deployment, once available.", - "nullable": true - }, - "error": { - "type": "string", - "description": "Reason the deployment transaction failed, when status is FAILED.", - "nullable": true + "appStatus": { + "$ref": "#/components/schemas/AppStatus" } }, - "required": [ - "status" - ] + "required": ["appStatus"] }, - "GetEarnDepositStatusRequest": { + "GetAuthenticatorRequest": { "type": "object", "properties": { "organizationId": { "type": "string", - "description": "Unique identifier for a given Organization." + "description": "Unique identifier for a given organization." }, - "depositRequestId": { + "authenticatorId": { "type": "string", - "description": "The deposit_request_id returned by EarnDeposit." + "description": "Unique identifier for a given authenticator." } }, - "required": [ - "organizationId", - "depositRequestId" - ] + "required": ["organizationId", "authenticatorId"] }, - "GetEarnDepositStatusResponse": { + "GetAuthenticatorResponse": { "type": "object", "properties": { - "status": { - "type": "string", - "enum": [ - "PENDING", - "COMPLETED", - "FAILED" - ], - "description": "Status of the deposit." - }, - "depositTxHash": { - "type": "string", - "description": "Transaction hash of the deposit, once available.", - "nullable": true - }, - "error": { - "type": "string", - "description": "Reason the deposit transaction failed, when status is FAILED.", - "nullable": true + "authenticator": { + "$ref": "#/components/schemas/Authenticator" } }, - "required": [ - "status" - ] + "required": ["authenticator"] }, - "GetEarnWithdrawStatusRequest": { + "GetAuthenticatorsRequest": { "type": "object", "properties": { "organizationId": { "type": "string", - "description": "Unique identifier for a given Organization." + "description": "Unique identifier for a given organization." }, - "withdrawRequestId": { + "userId": { "type": "string", - "description": "The withdraw_request_id returned by EarnWithdraw." + "description": "Unique identifier for a given user." } }, - "required": [ - "organizationId", - "withdrawRequestId" - ] + "required": ["organizationId", "userId"] }, - "GetEarnWithdrawStatusResponse": { + "GetAuthenticatorsResponse": { "type": "object", "properties": { - "status": { - "type": "string", - "enum": [ - "PENDING", - "COMPLETED", - "FAILED" - ], - "description": "Status of the withdrawal." - }, - "withdrawTxHash": { + "authenticators": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Authenticator" + }, + "description": "A list of authenticators." + } + }, + "required": ["authenticators"] + }, + "GetBootProofRequest": { + "type": "object", + "properties": { + "organizationId": { "type": "string", - "description": "Transaction hash of the withdrawal, once available.", - "nullable": true + "description": "Unique identifier for a given Organization." }, - "error": { + "ephemeralKey": { "type": "string", - "description": "Reason the withdrawal transaction failed, when status is FAILED.", - "nullable": true + "description": "Hex encoded ephemeral public key." } }, - "required": [ - "status" - ] + "required": ["organizationId", "ephemeralKey"] }, "GetGasUsageRequest": { "type": "object", @@ -12254,9 +10238,7 @@ "description": "Unique identifier for a given Organization." } }, - "required": [ - "organizationId" - ] + "required": ["organizationId"] }, "GetGasUsageResponse": { "type": "object", @@ -12275,11 +10257,7 @@ "description": "The total gas usage (in USD) of all sponsored transactions processed over the last `window_duration_minutes`" } }, - "required": [ - "windowDurationMinutes", - "windowLimitUsd", - "usageUsd" - ] + "required": ["windowDurationMinutes", "windowLimitUsd", "usageUsd"] }, "GetIpAllowlistRequest": { "type": "object", @@ -12294,9 +10272,7 @@ "nullable": true } }, - "required": [ - "organizationId" - ] + "required": ["organizationId"] }, "GetIpAllowlistResponse": { "type": "object", @@ -12305,9 +10281,7 @@ "$ref": "#/components/schemas/IpAllowlist" } }, - "required": [ - "allowlist" - ] + "required": ["allowlist"] }, "GetLatestBootProofRequest": { "type": "object", @@ -12321,10 +10295,7 @@ "description": "Name of enclave app." } }, - "required": [ - "organizationId", - "appName" - ] + "required": ["organizationId", "appName"] }, "GetMfaPoliciesRequest": { "type": "object", @@ -12338,10 +10309,7 @@ "description": "Unique identifier for a given user." } }, - "required": [ - "organizationId", - "userId" - ] + "required": ["organizationId", "userId"] }, "GetMfaPoliciesResponse": { "type": "object", @@ -12354,9 +10322,7 @@ "description": "A list of multi-factor authentication policies for a user." } }, - "required": [ - "mfaPolicies" - ] + "required": ["mfaPolicies"] }, "GetMfaPolicyRequest": { "type": "object", @@ -12374,11 +10340,7 @@ "description": "Unique identifier for a given MFA policy." } }, - "required": [ - "organizationId", - "userId", - "mfaPolicyId" - ] + "required": ["organizationId", "userId", "mfaPolicyId"] }, "GetMfaPolicyResponse": { "type": "object", @@ -12387,9 +10349,7 @@ "$ref": "#/components/schemas/MfaPolicy" } }, - "required": [ - "mfaPolicy" - ] + "required": ["mfaPolicy"] }, "GetMfaStatusRequest": { "type": "object", @@ -12408,10 +10368,7 @@ "nullable": true } }, - "required": [ - "organizationId", - "activityId" - ] + "required": ["organizationId", "activityId"] }, "GetMfaStatusResponse": { "type": "object", @@ -12424,9 +10381,7 @@ "description": "A list of MFA statuses for the activity's votes." } }, - "required": [ - "mfaStatuses" - ] + "required": ["mfaStatuses"] }, "GetNoncesRequest": { "type": "object", @@ -12470,11 +10425,7 @@ "description": "Whether to fetch the gas station nonce used for sponsored transactions." } }, - "required": [ - "organizationId", - "address", - "caip2" - ] + "required": ["organizationId", "address", "caip2"] }, "GetNoncesResponse": { "type": "object", @@ -12505,10 +10456,7 @@ "description": "Unique identifier for a given OAuth 2.0 Credential." } }, - "required": [ - "organizationId", - "oauth2CredentialId" - ] + "required": ["organizationId", "oauth2CredentialId"] }, "GetOauth2CredentialResponse": { "type": "object", @@ -12517,9 +10465,7 @@ "$ref": "#/components/schemas/Oauth2Credential" } }, - "required": [ - "oauth2Credential" - ] + "required": ["oauth2Credential"] }, "GetOauthProvidersRequest": { "type": "object", @@ -12534,9 +10480,7 @@ "nullable": true } }, - "required": [ - "organizationId" - ] + "required": ["organizationId"] }, "GetOauthProvidersResponse": { "type": "object", @@ -12549,9 +10493,7 @@ "description": "A list of Oauth providers." } }, - "required": [ - "oauthProviders" - ] + "required": ["oauthProviders"] }, "GetOnRampTransactionStatusRequest": { "type": "object", @@ -12570,10 +10512,7 @@ "nullable": true } }, - "required": [ - "organizationId", - "transactionId" - ] + "required": ["organizationId", "transactionId"] }, "GetOnRampTransactionStatusResponse": { "type": "object", @@ -12583,9 +10522,7 @@ "description": "The status of the fiat on ramp transaction." } }, - "required": [ - "transactionStatus" - ] + "required": ["transactionStatus"] }, "GetOrganizationConfigsRequest": { "type": "object", @@ -12595,9 +10532,7 @@ "description": "Unique identifier for a given organization." } }, - "required": [ - "organizationId" - ] + "required": ["organizationId"] }, "GetOrganizationConfigsResponse": { "type": "object", @@ -12606,9 +10541,7 @@ "$ref": "#/components/schemas/Config" } }, - "required": [ - "configs" - ] + "required": ["configs"] }, "GetPoliciesRequest": { "type": "object", @@ -12618,9 +10551,7 @@ "description": "Unique identifier for a given organization." } }, - "required": [ - "organizationId" - ] + "required": ["organizationId"] }, "GetPoliciesResponse": { "type": "object", @@ -12633,9 +10564,7 @@ "description": "A list of policies." } }, - "required": [ - "policies" - ] + "required": ["policies"] }, "GetPolicyEvaluationsRequest": { "type": "object", @@ -12649,10 +10578,7 @@ "description": "Unique identifier for a given activity." } }, - "required": [ - "organizationId", - "activityId" - ] + "required": ["organizationId", "activityId"] }, "GetPolicyEvaluationsResponse": { "type": "object", @@ -12664,9 +10590,7 @@ } } }, - "required": [ - "policyEvaluations" - ] + "required": ["policyEvaluations"] }, "GetPolicyRequest": { "type": "object", @@ -12680,10 +10604,7 @@ "description": "Unique identifier for a given policy." } }, - "required": [ - "organizationId", - "policyId" - ] + "required": ["organizationId", "policyId"] }, "GetPolicyResponse": { "type": "object", @@ -12692,9 +10613,7 @@ "$ref": "#/components/schemas/Policy" } }, - "required": [ - "policy" - ] + "required": ["policy"] }, "GetPrivateKeyRequest": { "type": "object", @@ -12708,10 +10627,7 @@ "description": "Unique identifier for a given private key." } }, - "required": [ - "organizationId", - "privateKeyId" - ] + "required": ["organizationId", "privateKeyId"] }, "GetPrivateKeyResponse": { "type": "object", @@ -12720,9 +10636,7 @@ "$ref": "#/components/schemas/PrivateKey" } }, - "required": [ - "privateKey" - ] + "required": ["privateKey"] }, "GetPrivateKeysRequest": { "type": "object", @@ -12732,9 +10646,7 @@ "description": "Unique identifier for a given organization." } }, - "required": [ - "organizationId" - ] + "required": ["organizationId"] }, "GetPrivateKeysResponse": { "type": "object", @@ -12747,9 +10659,7 @@ "description": "A list of private keys." } }, - "required": [ - "privateKeys" - ] + "required": ["privateKeys"] }, "GetSendTransactionStatusRequest": { "type": "object", @@ -12763,10 +10673,7 @@ "description": "The unique identifier of a send transaction request." } }, - "required": [ - "organizationId", - "sendTransactionStatusId" - ] + "required": ["organizationId", "sendTransactionStatusId"] }, "GetSendTransactionStatusResponse": { "type": "object", @@ -12790,9 +10697,7 @@ "$ref": "#/components/schemas/TxError" } }, - "required": [ - "txStatus" - ] + "required": ["txStatus"] }, "GetSessionProfileRequest": { "type": "object", @@ -12806,10 +10711,7 @@ "description": "Unique identifier for a session profile." } }, - "required": [ - "organizationId", - "sessionProfileId" - ] + "required": ["organizationId", "sessionProfileId"] }, "GetSessionProfileResponse": { "type": "object", @@ -12818,9 +10720,7 @@ "$ref": "#/components/schemas/SessionProfile" } }, - "required": [ - "sessionProfile" - ] + "required": ["sessionProfile"] }, "GetSessionProfilesRequest": { "type": "object", @@ -12830,9 +10730,7 @@ "description": "Unique identifier for a given organization." } }, - "required": [ - "organizationId" - ] + "required": ["organizationId"] }, "GetSessionProfilesResponse": { "type": "object", @@ -12845,9 +10743,7 @@ "description": "A list of session profiles for users in the organization." } }, - "required": [ - "sessionProfiles" - ] + "required": ["sessionProfiles"] }, "GetSmartContractInterfaceRequest": { "type": "object", @@ -12861,10 +10757,7 @@ "description": "Unique identifier for a given smart contract interface." } }, - "required": [ - "organizationId", - "smartContractInterfaceId" - ] + "required": ["organizationId", "smartContractInterfaceId"] }, "GetSmartContractInterfaceResponse": { "type": "object", @@ -12873,9 +10766,7 @@ "$ref": "#/components/schemas/data.v1.SmartContractInterface" } }, - "required": [ - "smartContractInterface" - ] + "required": ["smartContractInterface"] }, "GetSmartContractInterfacesRequest": { "type": "object", @@ -12885,9 +10776,7 @@ "description": "Unique identifier for a given organization." } }, - "required": [ - "organizationId" - ] + "required": ["organizationId"] }, "GetSmartContractInterfacesResponse": { "type": "object", @@ -12900,9 +10789,7 @@ "description": "A list of smart contract interfaces." } }, - "required": [ - "smartContractInterfaces" - ] + "required": ["smartContractInterfaces"] }, "GetSubOrgIdsRequest": { "type": "object", @@ -12923,9 +10810,7 @@ "$ref": "#/components/schemas/Pagination" } }, - "required": [ - "organizationId" - ] + "required": ["organizationId"] }, "GetSubOrgIdsResponse": { "type": "object", @@ -12938,9 +10823,7 @@ "description": "List of unique identifiers for the matching sub-organizations." } }, - "required": [ - "organizationIds" - ] + "required": ["organizationIds"] }, "GetTvcAppDeploymentsRequest": { "type": "object", @@ -12954,10 +10837,7 @@ "description": "Unique identifier for a given TVC App." } }, - "required": [ - "organizationId", - "appId" - ] + "required": ["organizationId", "appId"] }, "GetTvcAppDeploymentsResponse": { "type": "object", @@ -12970,9 +10850,7 @@ "description": "List of deployments for this TVC App" } }, - "required": [ - "tvcDeployments" - ] + "required": ["tvcDeployments"] }, "GetTvcAppRequest": { "type": "object", @@ -12986,10 +10864,7 @@ "description": "Unique identifier for a given TVC App." } }, - "required": [ - "organizationId", - "tvcAppId" - ] + "required": ["organizationId", "tvcAppId"] }, "GetTvcAppResponse": { "type": "object", @@ -12998,9 +10873,7 @@ "$ref": "#/components/schemas/TvcApp" } }, - "required": [ - "tvcApp" - ] + "required": ["tvcApp"] }, "GetTvcAppsRequest": { "type": "object", @@ -13010,9 +10883,7 @@ "description": "Unique identifier for a given organization." } }, - "required": [ - "organizationId" - ] + "required": ["organizationId"] }, "GetTvcAppsResponse": { "type": "object", @@ -13025,9 +10896,7 @@ "description": "A list of TVC Apps." } }, - "required": [ - "tvcApps" - ] + "required": ["tvcApps"] }, "GetTvcDeploymentDebugLogsRequest": { "type": "object", @@ -13051,10 +10920,7 @@ "description": "Return logs newer than this many seconds ago. If unset or zero, no since-time limit is applied. Useful for clients that poll to follow logs." } }, - "required": [ - "organizationId", - "deploymentId" - ] + "required": ["organizationId", "deploymentId"] }, "GetTvcDeploymentDebugLogsResponse": { "type": "object", @@ -13067,9 +10933,7 @@ "description": "Application log entries sorted by platform timestamp." } }, - "required": [ - "entries" - ] + "required": ["entries"] }, "GetTvcDeploymentRequest": { "type": "object", @@ -13083,10 +10947,7 @@ "description": "Unique identifier for a given TVC Deployment." } }, - "required": [ - "organizationId", - "deploymentId" - ] + "required": ["organizationId", "deploymentId"] }, "GetTvcDeploymentResponse": { "type": "object", @@ -13095,9 +10956,7 @@ "$ref": "#/components/schemas/TvcDeployment" } }, - "required": [ - "tvcDeployment" - ] + "required": ["tvcDeployment"] }, "GetUserRequest": { "type": "object", @@ -13109,12 +10968,9 @@ "userId": { "type": "string", "description": "Unique identifier for a given user." - } - }, - "required": [ - "organizationId", - "userId" - ] + } + }, + "required": ["organizationId", "userId"] }, "GetUserResponse": { "type": "object", @@ -13123,9 +10979,7 @@ "$ref": "#/components/schemas/User" } }, - "required": [ - "user" - ] + "required": ["user"] }, "GetUsersRequest": { "type": "object", @@ -13135,9 +10989,7 @@ "description": "Unique identifier for a given organization." } }, - "required": [ - "organizationId" - ] + "required": ["organizationId"] }, "GetUsersResponse": { "type": "object", @@ -13150,9 +11002,7 @@ "description": "A list of users." } }, - "required": [ - "users" - ] + "required": ["users"] }, "GetVerifiedSubOrgIdsRequest": { "type": "object", @@ -13173,9 +11023,7 @@ "$ref": "#/components/schemas/Pagination" } }, - "required": [ - "organizationId" - ] + "required": ["organizationId"] }, "GetVerifiedSubOrgIdsResponse": { "type": "object", @@ -13188,9 +11036,7 @@ "description": "List of unique identifiers for the matching sub-organizations." } }, - "required": [ - "organizationIds" - ] + "required": ["organizationIds"] }, "GetWalletAccountRequest": { "type": "object", @@ -13214,10 +11060,7 @@ "nullable": true } }, - "required": [ - "organizationId", - "walletId" - ] + "required": ["organizationId", "walletId"] }, "GetWalletAccountResponse": { "type": "object", @@ -13226,9 +11069,7 @@ "$ref": "#/components/schemas/WalletAccount" } }, - "required": [ - "account" - ] + "required": ["account"] }, "GetWalletAccountsRequest": { "type": "object", @@ -13251,9 +11092,7 @@ "$ref": "#/components/schemas/Pagination" } }, - "required": [ - "organizationId" - ] + "required": ["organizationId"] }, "GetWalletAccountsResponse": { "type": "object", @@ -13266,9 +11105,7 @@ "description": "A list of accounts generated from a wallet that share a common seed." } }, - "required": [ - "accounts" - ] + "required": ["accounts"] }, "GetWalletAddressBalancesRequest": { "type": "object", @@ -13306,11 +11143,7 @@ "description": "CAIP-2 chain ID (e.g., 'eip155:1' for Ethereum mainnet or 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' for Solana mainnet). Human-readable Solana aliases ('solana:mainnet', 'solana:devnet') are also accepted and normalized to canonical CAIP-2 values." } }, - "required": [ - "organizationId", - "address", - "caip2" - ] + "required": ["organizationId", "address", "caip2"] }, "GetWalletAddressBalancesResponse": { "type": "object", @@ -13336,10 +11169,7 @@ "description": "Unique identifier for a given wallet." } }, - "required": [ - "organizationId", - "walletId" - ] + "required": ["organizationId", "walletId"] }, "GetWalletResponse": { "type": "object", @@ -13348,9 +11178,7 @@ "$ref": "#/components/schemas/Wallet" } }, - "required": [ - "wallet" - ] + "required": ["wallet"] }, "GetWalletsRequest": { "type": "object", @@ -13360,9 +11188,7 @@ "description": "Unique identifier for a given organization." } }, - "required": [ - "organizationId" - ] + "required": ["organizationId"] }, "GetWalletsResponse": { "type": "object", @@ -13375,9 +11201,7 @@ "description": "A list of wallets." } }, - "required": [ - "wallets" - ] + "required": ["wallets"] }, "GetWhoamiRequest": { "type": "object", @@ -13387,9 +11211,7 @@ "description": "Unique identifier for a given organization. If the request is being made by a WebAuthN user and their sub-organization ID is unknown, this can be the parent organization ID; using the sub-organization ID when possible is preferred due to performance reasons." } }, - "required": [ - "organizationId" - ] + "required": ["organizationId"] }, "GetWhoamiResponse": { "type": "object", @@ -13411,12 +11233,7 @@ "description": "Human-readable name for a user." } }, - "required": [ - "organizationId", - "organizationName", - "userId", - "username" - ] + "required": ["organizationId", "organizationName", "userId", "username"] }, "HashFunction": { "type": "string", @@ -13466,9 +11283,7 @@ "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_IMPORT_PRIVATE_KEY" - ] + "enum": ["ACTIVITY_TYPE_IMPORT_PRIVATE_KEY"] }, "timestampMs": { "type": "string", @@ -13486,12 +11301,7 @@ "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, "ImportPrivateKeyResult": { "type": "object", @@ -13508,10 +11318,7 @@ "description": "A list of addresses." } }, - "required": [ - "privateKeyId", - "addresses" - ] + "required": ["privateKeyId", "addresses"] }, "ImportWalletIntent": { "type": "object", @@ -13536,21 +11343,14 @@ "description": "A list of wallet Accounts." } }, - "required": [ - "userId", - "walletName", - "encryptedBundle", - "accounts" - ] + "required": ["userId", "walletName", "encryptedBundle", "accounts"] }, "ImportWalletRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_IMPORT_WALLET" - ] + "enum": ["ACTIVITY_TYPE_IMPORT_WALLET"] }, "timestampMs": { "type": "string", @@ -13568,12 +11368,7 @@ "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, "ImportWalletResult": { "type": "object", @@ -13590,10 +11385,7 @@ "description": "A list of account addresses." } }, - "required": [ - "walletId", - "addresses" - ] + "required": ["walletId", "addresses"] }, "InitFiatOnRampIntent": { "type": "object", @@ -13655,9 +11447,7 @@ "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_INIT_FIAT_ON_RAMP" - ] + "enum": ["ACTIVITY_TYPE_INIT_FIAT_ON_RAMP"] }, "timestampMs": { "type": "string", @@ -13675,12 +11465,7 @@ "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, "InitFiatOnRampResult": { "type": "object", @@ -13698,10 +11483,7 @@ "description": "Optional signature of the MoonPay Widget URL. The signature is generated if the Init Fiat On Ramp intent includes the urlForSignature field. The signature can be used to initialize the MoonPay SDKs when URL signing is enabled for your project." } }, - "required": [ - "onRampUrl", - "onRampTransactionId" - ] + "required": ["onRampUrl", "onRampTransactionId"] }, "InitImportPrivateKeyIntent": { "type": "object", @@ -13711,18 +11493,14 @@ "description": "The ID of the User importing a Private Key." } }, - "required": [ - "userId" - ] + "required": ["userId"] }, "InitImportPrivateKeyRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_INIT_IMPORT_PRIVATE_KEY" - ] + "enum": ["ACTIVITY_TYPE_INIT_IMPORT_PRIVATE_KEY"] }, "timestampMs": { "type": "string", @@ -13740,12 +11518,7 @@ "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, "InitImportPrivateKeyResult": { "type": "object", @@ -13755,41 +11528,7 @@ "description": "Import bundle containing a public key and signature to use for importing client data." } }, - "required": [ - "importBundle" - ] - }, - "InitImportSecretsIntent": { - "type": "object", - "properties": { - "encryptionSuite": { - "$ref": "#/components/schemas/TransportEncryptionSuite" - }, - "numSecrets": { - "type": "integer", - "format": "int32", - "description": "The number of secrets the user intends to import." - } - }, - "required": [ - "encryptionSuite", - "numSecrets" - ] - }, - "InitImportSecretsResult": { - "type": "object", - "properties": { - "enclaveTargetMessages": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Enclave ingress target keys along with metadata specific to the encryption suite. For enclave encrypt v1 this will be ServerTargetMsgV1." - } - }, - "required": [ - "enclaveTargetMessages" - ] + "required": ["importBundle"] }, "InitImportWalletIntent": { "type": "object", @@ -13799,18 +11538,14 @@ "description": "The ID of the User importing a Wallet." } }, - "required": [ - "userId" - ] + "required": ["userId"] }, "InitImportWalletRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_INIT_IMPORT_WALLET" - ] + "enum": ["ACTIVITY_TYPE_INIT_IMPORT_WALLET"] }, "timestampMs": { "type": "string", @@ -13828,12 +11563,7 @@ "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, "InitImportWalletResult": { "type": "object", @@ -13843,9 +11573,7 @@ "description": "Import bundle containing a public key and signature to use for importing client data." } }, - "required": [ - "importBundle" - ] + "required": ["importBundle"] }, "InitOtpAuthIntent": { "type": "object", @@ -13885,10 +11613,7 @@ "nullable": true } }, - "required": [ - "otpType", - "contact" - ] + "required": ["otpType", "contact"] }, "InitOtpAuthIntentV2": { "type": "object", @@ -13939,10 +11664,7 @@ "nullable": true } }, - "required": [ - "otpType", - "contact" - ] + "required": ["otpType", "contact"] }, "InitOtpAuthIntentV3": { "type": "object", @@ -14002,20 +11724,14 @@ "nullable": true } }, - "required": [ - "otpType", - "contact", - "appName" - ] + "required": ["otpType", "contact", "appName"] }, "InitOtpAuthRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_INIT_OTP_AUTH_V3" - ] + "enum": ["ACTIVITY_TYPE_INIT_OTP_AUTH_V3"] }, "timestampMs": { "type": "string", @@ -14033,12 +11749,7 @@ "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, "InitOtpAuthResult": { "type": "object", @@ -14048,9 +11759,7 @@ "description": "Unique identifier for an OTP authentication" } }, - "required": [ - "otpId" - ] + "required": ["otpId"] }, "InitOtpAuthResultV2": { "type": "object", @@ -14060,9 +11769,7 @@ "description": "Unique identifier for an OTP authentication" } }, - "required": [ - "otpId" - ] + "required": ["otpId"] }, "InitOtpIntent": { "type": "object", @@ -14118,10 +11825,7 @@ "nullable": true } }, - "required": [ - "otpType", - "contact" - ] + "required": ["otpType", "contact"] }, "InitOtpIntentV2": { "type": "object", @@ -14181,11 +11885,7 @@ "nullable": true } }, - "required": [ - "otpType", - "contact", - "appName" - ] + "required": ["otpType", "contact", "appName"] }, "InitOtpIntentV3": { "type": "object", @@ -14245,20 +11945,14 @@ "nullable": true } }, - "required": [ - "otpType", - "contact", - "appName" - ] + "required": ["otpType", "contact", "appName"] }, "InitOtpRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_INIT_OTP_V3" - ] + "enum": ["ACTIVITY_TYPE_INIT_OTP_V3"] }, "timestampMs": { "type": "string", @@ -14276,12 +11970,7 @@ "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, "InitOtpResult": { "type": "object", @@ -14291,9 +11980,7 @@ "description": "Unique identifier for an OTP authentication" } }, - "required": [ - "otpId" - ] + "required": ["otpId"] }, "InitOtpResultV2": { "type": "object", @@ -14307,10 +11994,7 @@ "description": "Signed bundle containing a target encryption key to use when submitting OTP codes." } }, - "required": [ - "otpId", - "otpEncryptionTargetBundle" - ] + "required": ["otpId", "otpEncryptionTargetBundle"] }, "InitUserEmailRecoveryIntent": { "type": "object", @@ -14347,10 +12031,7 @@ "nullable": true } }, - "required": [ - "email", - "targetPublicKey" - ] + "required": ["email", "targetPublicKey"] }, "InitUserEmailRecoveryIntentV2": { "type": "object", @@ -14387,20 +12068,14 @@ "nullable": true } }, - "required": [ - "email", - "targetPublicKey", - "emailCustomization" - ] + "required": ["email", "targetPublicKey", "emailCustomization"] }, "InitUserEmailRecoveryRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_INIT_USER_EMAIL_RECOVERY_V2" - ] + "enum": ["ACTIVITY_TYPE_INIT_USER_EMAIL_RECOVERY_V2"] }, "timestampMs": { "type": "string", @@ -14418,12 +12093,7 @@ "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, "InitUserEmailRecoveryResult": { "type": "object", @@ -14433,9 +12103,7 @@ "description": "Unique identifier for the user being recovered." } }, - "required": [ - "userId" - ] + "required": ["userId"] }, "Intent": { "type": "object", @@ -14878,38 +12546,11 @@ "earnWithdrawIntent": { "$ref": "#/components/schemas/EarnWithdrawIntent" }, - "executeSwapIntent": { - "$ref": "#/components/schemas/ExecuteSwapIntent" - }, - "upsertSwapConfigIntent": { - "$ref": "#/components/schemas/UpsertSwapConfigIntent" - }, - "createTvcOperatorIntent": { - "$ref": "#/components/schemas/CreateTvcOperatorIntent" - }, - "createTvcQuorumKeyIntent": { - "$ref": "#/components/schemas/CreateTvcQuorumKeyIntent" - }, - "reEncryptTvcQuorumKeyShareIntent": { - "$ref": "#/components/schemas/ReEncryptTvcQuorumKeyShareIntent" - }, - "initImportSecretsIntent": { - "$ref": "#/components/schemas/InitImportSecretsIntent" - }, - "solSendTransactionIntentV2": { - "$ref": "#/components/schemas/SolSendTransactionIntentV2" - }, - "claimSwapFeesIntent": { - "$ref": "#/components/schemas/ClaimSwapFeesIntent" - }, "earnSetWrapperStateIntent": { "$ref": "#/components/schemas/EarnSetWrapperStateIntent" }, "claimEarnFeesIntent": { "$ref": "#/components/schemas/ClaimEarnFeesIntent" - }, - "updateWalletAccountNameIntent": { - "$ref": "#/components/schemas/UpdateWalletAccountNameIntent" } } }, @@ -14977,147 +12618,41 @@ "nullable": true } }, - "required": [ - "organizationId", - "rules" - ] + "required": ["organizationId", "rules"] }, "IpAllowlistIntentRule": { "type": "object", "properties": { - "cidr": { - "type": "string", - "description": "CIDR block (e.g., '192.168.1.0/24', '2001:db8::/32')." - }, - "label": { - "type": "string", - "description": "Optional human-readable label for this rule (e.g., 'Office VPN').", - "nullable": true - } - }, - "required": [ - "cidr" - ] - }, - "IpAllowlistRule": { - "type": "object", - "properties": { - "cidr": { - "type": "string", - "description": "CIDR block (e.g., '192.168.1.0/24')." - }, - "label": { - "type": "string", - "description": "Optional human-readable label for this rule.", - "nullable": true - }, - "createdAt": { - "type": "string", - "description": "Creation timestamp as millisecond epoch string." - } - }, - "required": [ - "cidr" - ] - }, - "ListEarnEnabledVaultsRequest": { - "type": "object", - "properties": { - "organizationId": { - "type": "string", - "description": "Unique identifier for a given Organization." - }, - "provider": { - "$ref": "#/components/schemas/EarnProvider" - }, - "caip19": { - "type": "string", - "description": "Optional filter: only return enabled vaults whose underlying asset matches this CAIP-19 asset ID (e.g. 'eip155:8453/erc20:0x833589...'). The chain is taken from the CAIP-19 identifier.", - "nullable": true - } - }, - "required": [ - "organizationId" - ] - }, - "ListEarnEnabledVaultsResponse": { - "type": "object", - "properties": { - "enabledVaults": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EarnEnabledVault" - }, - "description": "The organization's deployed wrappers." - } - } - }, - "ListEarnPositionsRequest": { - "type": "object", - "properties": { - "organizationId": { - "type": "string", - "description": "Unique identifier for a given Organization." - }, - "walletAddress": { - "type": "string", - "description": "The wallet address to return positions for." - } - }, - "required": [ - "organizationId", - "walletAddress" - ] - }, - "ListEarnPositionsResponse": { - "type": "object", - "properties": { - "positions": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EarnPosition" - }, - "description": "The wallet's active Earn positions." - } - } - }, - "ListEarnVaultsRequest": { - "type": "object", - "properties": { - "organizationId": { + "cidr": { "type": "string", - "description": "Unique identifier for a given Organization. Annotates which vaults the organization has already enabled." - }, - "provider": { - "$ref": "#/components/schemas/EarnProvider" + "description": "CIDR block (e.g., '192.168.1.0/24', '2001:db8::/32')." }, - "caip19": { + "label": { "type": "string", - "description": "CAIP-19 asset ID (e.g. 'eip155:8453/erc20:0x833589...') to return vaults for. Only vaults whose underlying asset matches are returned; the chain is taken from the CAIP-19 identifier." - }, - "paginationOptions": { - "$ref": "#/components/schemas/Pagination" + "description": "Optional human-readable label for this rule (e.g., 'Office VPN').", + "nullable": true } }, - "required": [ - "organizationId", - "caip19" - ] + "required": ["cidr"] }, - "ListEarnVaultsResponse": { + "IpAllowlistRule": { "type": "object", "properties": { - "vaults": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EarnVault" - }, - "description": "The catalog of wrappable vaults, sorted by TVL (USD) descending. To page, pass page_info.end_cursor as the pagination after cursor." + "cidr": { + "type": "string", + "description": "CIDR block (e.g., '192.168.1.0/24')." }, - "pageInfo": { - "$ref": "#/components/schemas/PageInfo" + "label": { + "type": "string", + "description": "Optional human-readable label for this rule.", + "nullable": true + }, + "createdAt": { + "type": "string", + "description": "Creation timestamp as millisecond epoch string." } - } + }, + "required": ["cidr"] }, "ListFiatOnRampCredentialsRequest": { "type": "object", @@ -15127,9 +12662,7 @@ "description": "Unique identifier for a given Organization." } }, - "required": [ - "organizationId" - ] + "required": ["organizationId"] }, "ListFiatOnRampCredentialsResponse": { "type": "object", @@ -15141,9 +12674,7 @@ } } }, - "required": [ - "fiatOnRampCredentials" - ] + "required": ["fiatOnRampCredentials"] }, "ListOauth2CredentialsRequest": { "type": "object", @@ -15153,9 +12684,7 @@ "description": "Unique identifier for a given Organization." } }, - "required": [ - "organizationId" - ] + "required": ["organizationId"] }, "ListOauth2CredentialsResponse": { "type": "object", @@ -15167,9 +12696,7 @@ } } }, - "required": [ - "oauth2Credentials" - ] + "required": ["oauth2Credentials"] }, "ListPrivateKeyTagsRequest": { "type": "object", @@ -15179,9 +12706,7 @@ "description": "Unique identifier for a given organization." } }, - "required": [ - "organizationId" - ] + "required": ["organizationId"] }, "ListPrivateKeyTagsResponse": { "type": "object", @@ -15194,9 +12719,7 @@ "description": "A list of private key tags." } }, - "required": [ - "privateKeyTags" - ] + "required": ["privateKeyTags"] }, "ListSupportedAssetsRequest": { "type": "object", @@ -15230,10 +12753,7 @@ "description": "CAIP-2 chain ID (e.g., 'eip155:1' for Ethereum mainnet or 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' for Solana mainnet). Human-readable Solana aliases ('solana:mainnet', 'solana:devnet') are also accepted and normalized to canonical CAIP-2 values." } }, - "required": [ - "organizationId", - "caip2" - ] + "required": ["organizationId", "caip2"] }, "ListSupportedAssetsResponse": { "type": "object", @@ -15255,9 +12775,7 @@ "description": "Unique identifier for a given organization." } }, - "required": [ - "organizationId" - ] + "required": ["organizationId"] }, "ListUserTagsResponse": { "type": "object", @@ -15270,9 +12788,7 @@ "description": "A list of user tags." } }, - "required": [ - "userTags" - ] + "required": ["userTags"] }, "ListWebhookEndpointsRequest": { "type": "object", @@ -15282,9 +12798,7 @@ "description": "Unique identifier for a given Organization." } }, - "required": [ - "organizationId" - ] + "required": ["organizationId"] }, "ListWebhookEndpointsResponse": { "type": "object", @@ -15296,9 +12810,7 @@ } } }, - "required": [ - "webhookEndpoints" - ] + "required": ["webhookEndpoints"] }, "LogLine": { "type": "object", @@ -15311,9 +12823,7 @@ "$ref": "#/components/schemas/external.data.v1.Timestamp" } }, - "required": [ - "content" - ] + "required": ["content"] }, "LoginUsage": { "type": "object", @@ -15323,9 +12833,7 @@ "description": "Public key for authentication" } }, - "required": [ - "publicKey" - ] + "required": ["publicKey"] }, "MfaPolicy": { "type": "object", @@ -15438,9 +12946,7 @@ "$ref": "#/components/schemas/TokenUsage" } }, - "required": [ - "stamp" - ] + "required": ["stamp"] }, "NativeRevertError": { "type": "object", @@ -15505,9 +13011,7 @@ "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_OAUTH2_AUTHENTICATE" - ] + "enum": ["ACTIVITY_TYPE_OAUTH2_AUTHENTICATE"] }, "timestampMs": { "type": "string", @@ -15525,12 +13029,7 @@ "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, "Oauth2AuthenticateResult": { "type": "object", @@ -15540,9 +13039,7 @@ "description": "Base64 encoded OIDC token issued by Turnkey to be used with the LoginWithOAuth activity" } }, - "required": [ - "oidcToken" - ] + "required": ["oidcToken"] }, "Oauth2Credential": { "type": "object", @@ -15585,10 +13082,7 @@ }, "Oauth2Provider": { "type": "string", - "enum": [ - "OAUTH2_PROVIDER_X", - "OAUTH2_PROVIDER_DISCORD" - ] + "enum": ["OAUTH2_PROVIDER_X", "OAUTH2_PROVIDER_DISCORD"] }, "OauthIntent": { "type": "object", @@ -15617,10 +13111,7 @@ "nullable": true } }, - "required": [ - "oidcToken", - "targetPublicKey" - ] + "required": ["oidcToken", "targetPublicKey"] }, "OauthLoginIntent": { "type": "object", @@ -15649,19 +13140,14 @@ "nullable": true } }, - "required": [ - "oidcToken", - "publicKey" - ] + "required": ["oidcToken", "publicKey"] }, "OauthLoginRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_OAUTH_LOGIN" - ] + "enum": ["ACTIVITY_TYPE_OAUTH_LOGIN"] }, "timestampMs": { "type": "string", @@ -15679,12 +13165,7 @@ "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, "OauthLoginResult": { "type": "object", @@ -15694,9 +13175,7 @@ "description": "Signed JWT containing an expiry, public key, session type, user id, and organization id" } }, - "required": [ - "session" - ] + "required": ["session"] }, "OauthProvider": { "type": "object", @@ -15750,10 +13229,7 @@ "description": "Base64 encoded OIDC token" } }, - "required": [ - "providerName", - "oidcToken" - ] + "required": ["providerName", "oidcToken"] }, "OauthProviderParamsV2": { "type": "object", @@ -15770,18 +13246,14 @@ "$ref": "#/components/schemas/OidcClaims" } }, - "required": [ - "providerName" - ] + "required": ["providerName"] }, "OauthRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_OAUTH" - ] + "enum": ["ACTIVITY_TYPE_OAUTH"] }, "timestampMs": { "type": "string", @@ -15799,12 +13271,7 @@ "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, "OauthResult": { "type": "object", @@ -15822,11 +13289,7 @@ "description": "HPKE encrypted credential bundle" } }, - "required": [ - "userId", - "apiKeyId", - "credentialBundle" - ] + "required": ["userId", "apiKeyId", "credentialBundle"] }, "OidcClaims": { "type": "object", @@ -15844,11 +13307,7 @@ "description": "The audience from the OIDC token (aud claim)" } }, - "required": [ - "iss", - "sub", - "aud" - ] + "required": ["iss", "sub", "aud"] }, "Operator": { "type": "string", @@ -15897,20 +13356,14 @@ "nullable": true } }, - "required": [ - "otpId", - "otpCode", - "targetPublicKey" - ] + "required": ["otpId", "otpCode", "targetPublicKey"] }, "OtpAuthRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_OTP_AUTH" - ] + "enum": ["ACTIVITY_TYPE_OTP_AUTH"] }, "timestampMs": { "type": "string", @@ -15928,12 +13381,7 @@ "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, "OtpAuthResult": { "type": "object", @@ -15951,9 +13399,7 @@ "description": "HPKE encrypted credential bundle" } }, - "required": [ - "userId" - ] + "required": ["userId"] }, "OtpLoginIntent": { "type": "object", @@ -15985,10 +13431,7 @@ "nullable": true } }, - "required": [ - "verificationToken", - "publicKey" - ] + "required": ["verificationToken", "publicKey"] }, "OtpLoginIntentV2": { "type": "object", @@ -16020,20 +13463,14 @@ "nullable": true } }, - "required": [ - "verificationToken", - "publicKey", - "clientSignature" - ] + "required": ["verificationToken", "publicKey", "clientSignature"] }, "OtpLoginRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_OTP_LOGIN_V2" - ] + "enum": ["ACTIVITY_TYPE_OTP_LOGIN_V2"] }, "timestampMs": { "type": "string", @@ -16051,12 +13488,7 @@ "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, "OtpLoginResult": { "type": "object", @@ -16066,9 +13498,7 @@ "description": "Signed JWT containing an expiry, public key, session type, user id, and organization id" } }, - "required": [ - "session" - ] + "required": ["session"] }, "Outcome": { "type": "string", @@ -16082,25 +13512,6 @@ "OUTCOME_REQUIRES_AUTHENTICATORS" ] }, - "PageInfo": { - "type": "object", - "properties": { - "hasNextPage": { - "type": "boolean" - }, - "hasPreviousPage": { - "type": "boolean" - }, - "startCursor": { - "type": "string", - "nullable": true - }, - "endCursor": { - "type": "string", - "nullable": true - } - } - }, "Pagination": { "type": "object", "properties": { @@ -16120,9 +13531,7 @@ }, "PathFormat": { "type": "string", - "enum": [ - "PATH_FORMAT_BIP32" - ] + "enum": ["PATH_FORMAT_BIP32"] }, "PayloadEncoding": { "type": "string", @@ -16208,9 +13617,7 @@ "description": "The unique identifier for the provisioning quorum key share" } }, - "required": [ - "provisioningShareId" - ] + "required": ["provisioningShareId"] }, "PrivateKey": { "type": "object", @@ -16326,19 +13733,14 @@ }, "type": { "type": "string", - "enum": [ - "public-key" - ] + "enum": ["public-key"] }, "rawId": { "type": "string" }, "authenticatorAttachment": { "type": "string", - "enum": [ - "cross-platform", - "platform" - ], + "enum": ["cross-platform", "platform"], "nullable": true }, "response": { @@ -16372,60 +13774,7 @@ "description": "Signature from the share set operator approving the manifest" } }, - "required": [ - "operatorId", - "reEncryptedShareHex", - "signature" - ] - }, - "ReEncryptTvcQuorumKeyShareIntent": { - "type": "object", - "properties": { - "attestationDocB64": { - "type": "string", - "description": "Base64-encoded attestation document for the TVC deployment provisioning enclave" - }, - "manifestB64": { - "type": "string", - "description": "Base64-encoded manifest for the TVC deployment" - }, - "operatorEncryptKey": { - "type": "string", - "description": "Operator encryption public key used to encrypt the hosted TVC quorum key share" - }, - "operatorSignKey": { - "type": "string", - "description": "Operator signing public key used to approve the TVC manifest" - }, - "deploymentId": { - "type": "string", - "description": "Unique identifier of the TVC deployment receiving the re-encrypted quorum key share" - }, - "appQuorumKey": { - "type": "string", - "description": "Quorum key for the TVC application" - } - }, - "required": [ - "attestationDocB64", - "manifestB64", - "operatorEncryptKey", - "operatorSignKey", - "deploymentId", - "appQuorumKey" - ] - }, - "ReEncryptTvcQuorumKeyShareResult": { - "type": "object", - "properties": { - "provisioningShareId": { - "type": "string", - "description": "The unique identifier for the provisioning quorum key share" - } - }, - "required": [ - "provisioningShareId" - ] + "required": ["operatorId", "reEncryptedShareHex", "signature"] }, "RecoverUserIntent": { "type": "object", @@ -16438,19 +13787,14 @@ "description": "Unique identifier for the user performing recovery." } }, - "required": [ - "authenticator", - "userId" - ] + "required": ["authenticator", "userId"] }, "RecoverUserRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_RECOVER_USER" - ] + "enum": ["ACTIVITY_TYPE_RECOVER_USER"] }, "timestampMs": { "type": "string", @@ -16468,12 +13812,7 @@ "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, "RecoverUserResult": { "type": "object", @@ -16486,9 +13825,7 @@ "description": "ID of the authenticator created." } }, - "required": [ - "authenticatorId" - ] + "required": ["authenticatorId"] }, "RejectActivityIntent": { "type": "object", @@ -16498,18 +13835,14 @@ "description": "An artifact verifying a User's action." } }, - "required": [ - "fingerprint" - ] + "required": ["fingerprint"] }, "RejectActivityRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_REJECT_ACTIVITY" - ] + "enum": ["ACTIVITY_TYPE_REJECT_ACTIVITY"] }, "timestampMs": { "type": "string", @@ -16527,12 +13860,7 @@ "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, "RemoveIpAllowlistIntent": { "type": "object", @@ -16549,9 +13877,7 @@ "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_REMOVE_IP_ALLOWLIST" - ] + "enum": ["ACTIVITY_TYPE_REMOVE_IP_ALLOWLIST"] }, "timestampMs": { "type": "string", @@ -16569,12 +13895,7 @@ "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, "RemoveIpAllowlistResult": { "type": "object" @@ -16586,18 +13907,14 @@ "$ref": "#/components/schemas/FeatureName" } }, - "required": [ - "name" - ] + "required": ["name"] }, "RemoveOrganizationFeatureRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_REMOVE_ORGANIZATION_FEATURE" - ] + "enum": ["ACTIVITY_TYPE_REMOVE_ORGANIZATION_FEATURE"] }, "timestampMs": { "type": "string", @@ -16615,12 +13932,7 @@ "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, "RemoveOrganizationFeatureResult": { "type": "object", @@ -16633,9 +13945,7 @@ "description": "Resulting list of organization features." } }, - "required": [ - "features" - ] + "required": ["features"] }, "RequiredAuthenticationMethod": { "type": "object", @@ -16648,9 +13958,7 @@ "description": "A list of authentication methods for this MFA step. If only one method is provided, it is required. If multiple are provided, the user must satisfy ANY one of them." } }, - "required": [ - "any" - ] + "required": ["any"] }, "RequiredAuthenticationMethodParams": { "type": "object", @@ -16663,9 +13971,7 @@ "description": "A list of authentication methods for this MFA step. If only one method is provided, it is required. If multiple are provided, the user must satisfy ANY one of them." } }, - "required": [ - "any" - ] + "required": ["any"] }, "RestoreTvcDeploymentIntent": { "type": "object", @@ -16675,18 +13981,14 @@ "description": "The unique identifier of the TVC deployment to restore." } }, - "required": [ - "deploymentId" - ] + "required": ["deploymentId"] }, "RestoreTvcDeploymentRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_RESTORE_TVC_DEPLOYMENT" - ] + "enum": ["ACTIVITY_TYPE_RESTORE_TVC_DEPLOYMENT"] }, "timestampMs": { "type": "string", @@ -16704,12 +14006,7 @@ "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, "RestoreTvcDeploymentResult": { "type": "object", @@ -16719,9 +14016,7 @@ "description": "The unique identifier of the restored TVC deployment." } }, - "required": [ - "deploymentId" - ] + "required": ["deploymentId"] }, "Result": { "type": "object", @@ -17098,38 +14393,11 @@ "earnWithdrawResult": { "$ref": "#/components/schemas/EarnWithdrawResult" }, - "executeSwapResult": { - "$ref": "#/components/schemas/ExecuteSwapResult" - }, - "upsertSwapConfigResult": { - "$ref": "#/components/schemas/UpsertSwapConfigResult" - }, - "createTvcOperatorResult": { - "$ref": "#/components/schemas/CreateTvcOperatorResult" - }, - "createTvcQuorumKeyResult": { - "$ref": "#/components/schemas/CreateTvcQuorumKeyResult" - }, - "reEncryptTvcQuorumKeyShareResult": { - "$ref": "#/components/schemas/ReEncryptTvcQuorumKeyShareResult" - }, - "initImportSecretsResult": { - "$ref": "#/components/schemas/InitImportSecretsResult" - }, - "solSendTransactionResultV2": { - "$ref": "#/components/schemas/SolSendTransactionResultV2" - }, - "claimSwapFeesResult": { - "$ref": "#/components/schemas/ClaimSwapFeesResult" - }, "earnSetWrapperStateResult": { "$ref": "#/components/schemas/EarnSetWrapperStateResult" }, "claimEarnFeesResult": { "$ref": "#/components/schemas/ClaimEarnFeesResult" - }, - "updateWalletAccountNameResult": { - "$ref": "#/components/schemas/UpdateWalletAccountNameResult" } } }, @@ -17186,11 +14454,7 @@ "description": "A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body." } }, - "required": [ - "userName", - "apiKeys", - "authenticators" - ] + "required": ["userName", "apiKeys", "authenticators"] }, "RootUserParamsV2": { "type": "object", @@ -17226,12 +14490,7 @@ "description": "A list of Oauth providers. This field, if not needed, should be an empty array in your request body." } }, - "required": [ - "userName", - "apiKeys", - "authenticators", - "oauthProviders" - ] + "required": ["userName", "apiKeys", "authenticators", "oauthProviders"] }, "RootUserParamsV3": { "type": "object", @@ -17265,14 +14524,9 @@ "$ref": "#/components/schemas/OauthProviderParams" }, "description": "A list of Oauth providers. This field, if not needed, should be an empty array in your request body." - } - }, - "required": [ - "userName", - "apiKeys", - "authenticators", - "oauthProviders" - ] + } + }, + "required": ["userName", "apiKeys", "authenticators", "oauthProviders"] }, "RootUserParamsV4": { "type": "object", @@ -17313,12 +14567,7 @@ "description": "A list of Oauth providers. This field, if not needed, should be an empty array in your request body." } }, - "required": [ - "userName", - "apiKeys", - "authenticators", - "oauthProviders" - ] + "required": ["userName", "apiKeys", "authenticators", "oauthProviders"] }, "RootUserParamsV5": { "type": "object", @@ -17359,12 +14608,7 @@ "description": "A list of Oauth providers. This field, if not needed, should be an empty array in your request body." } }, - "required": [ - "userName", - "apiKeys", - "authenticators", - "oauthProviders" - ] + "required": ["userName", "apiKeys", "authenticators", "oauthProviders"] }, "Selector": { "type": "object", @@ -17372,106 +14616,363 @@ "subject": { "type": "string" }, - "operator": { - "$ref": "#/components/schemas/Operator" + "operator": { + "$ref": "#/components/schemas/Operator" + }, + "target": { + "type": "string" + } + } + }, + "SelectorV2": { + "type": "object", + "properties": { + "subject": { + "type": "string" + }, + "operator": { + "$ref": "#/components/schemas/Operator" + }, + "targets": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "SessionProfile": { + "type": "object", + "properties": { + "sessionProfileId": { + "type": "string", + "description": "Unique identifier for a given Session Profile." + }, + "sessionProfileName": { + "type": "string", + "description": "Human-readable name for a Session Profile." + }, + "scope": { + "type": "string", + "description": "The specific scope that a session created with this profile is limited to." + }, + "expirationSeconds": { + "type": "string", + "description": "Optional window (in seconds) indicating how long sessions created with this profile should last.", + "nullable": true + }, + "notes": { + "type": "string", + "description": "Optional human-readable notes added by a User to describe a particular Session Profile.", + "nullable": true + }, + "createdAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + } + }, + "required": [ + "sessionProfileId", + "sessionProfileName", + "scope", + "createdAt", + "updatedAt" + ] + }, + "SetIpAllowlistIntent": { + "type": "object", + "properties": { + "publicKey": { + "type": "string", + "description": "The public component of an API key. If null, the IP allowlist applies at the organization level. If set, it applies only to this specific API key.", + "nullable": true + }, + "enabled": { + "type": "boolean", + "description": "Whether the IP allowlist is enabled. Only meaningful for organization-level allowlists. Omit for API key-level allowlists.", + "nullable": true + }, + "rules": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IpAllowlistIntentRule" + }, + "description": "List of IP allowlist rules with CIDR blocks and optional labels." + }, + "onEvaluationError": { + "type": "string", + "description": "Behavior when an error occurs during IP allowlist evaluation. Valid values: ALLOW, DENY. Defaults to DENY.", + "nullable": true + } + } + }, + "SetIpAllowlistRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_SET_IP_ALLOWLIST"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/SetIpAllowlistIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "SetIpAllowlistResult": { + "type": "object" + }, + "SetOrganizationFeatureIntent": { + "type": "object", + "properties": { + "name": { + "$ref": "#/components/schemas/FeatureName" + }, + "value": { + "type": "string", + "description": "Optional value for the feature. Will override existing values if feature is already set.", + "nullable": true + } + }, + "required": ["name", "value"] + }, + "SetOrganizationFeatureRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_SET_ORGANIZATION_FEATURE"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/SetOrganizationFeatureIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "SetOrganizationFeatureResult": { + "type": "object", + "properties": { + "features": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Feature" + }, + "description": "Resulting list of organization features." + } + }, + "required": ["features"] + }, + "SetPaymentMethodIntent": { + "type": "object", + "properties": { + "number": { + "type": "string", + "description": "The account number of the customer's credit card." + }, + "cvv": { + "type": "string", + "description": "The verification digits of the customer's credit card." + }, + "expiryMonth": { + "type": "string", + "description": "The month that the credit card expires." + }, + "expiryYear": { + "type": "string", + "description": "The year that the credit card expires." + }, + "cardHolderEmail": { + "type": "string", + "description": "The email that will receive invoices for the credit card." + }, + "cardHolderName": { + "type": "string", + "description": "The name associated with the credit card." + } + }, + "required": [ + "number", + "cvv", + "expiryMonth", + "expiryYear", + "cardHolderEmail", + "cardHolderName" + ] + }, + "SetPaymentMethodIntentV2": { + "type": "object", + "properties": { + "paymentMethodId": { + "type": "string", + "description": "The id of the payment method that was created clientside." + }, + "cardHolderEmail": { + "type": "string", + "description": "The email that will receive invoices for the credit card." + }, + "cardHolderName": { + "type": "string", + "description": "The name associated with the credit card." + } + }, + "required": ["paymentMethodId", "cardHolderEmail", "cardHolderName"] + }, + "SetPaymentMethodResult": { + "type": "object", + "properties": { + "lastFour": { + "type": "string", + "description": "The last four digits of the credit card added." + }, + "cardHolderName": { + "type": "string", + "description": "The name associated with the payment method." + }, + "cardHolderEmail": { + "type": "string", + "description": "The email address associated with the payment method." + } + }, + "required": ["lastFour", "cardHolderName", "cardHolderEmail"] + }, + "SignRawPayloadIntent": { + "type": "object", + "properties": { + "privateKeyId": { + "type": "string", + "description": "Unique identifier for a given Private Key." + }, + "payload": { + "type": "string", + "description": "Raw unsigned payload to be signed." }, - "target": { - "type": "string" + "encoding": { + "$ref": "#/components/schemas/PayloadEncoding" + }, + "hashFunction": { + "$ref": "#/components/schemas/HashFunction" } - } + }, + "required": ["privateKeyId", "payload", "encoding", "hashFunction"] }, - "SelectorV2": { + "SignRawPayloadIntentV2": { "type": "object", "properties": { - "subject": { - "type": "string" + "signWith": { + "type": "string", + "description": "A Wallet account address, Private Key address, or Private Key identifier." }, - "operator": { - "$ref": "#/components/schemas/Operator" + "payload": { + "type": "string", + "description": "Raw unsigned payload to be signed." }, - "targets": { - "type": "array", - "items": { - "type": "string" - } + "encoding": { + "$ref": "#/components/schemas/PayloadEncoding" + }, + "hashFunction": { + "$ref": "#/components/schemas/HashFunction" } - } + }, + "required": ["signWith", "payload", "encoding", "hashFunction"] }, - "SessionProfile": { + "SignRawPayloadRequest": { "type": "object", "properties": { - "sessionProfileId": { + "type": { "type": "string", - "description": "Unique identifier for a given Session Profile." + "enum": ["ACTIVITY_TYPE_SIGN_RAW_PAYLOAD_V2"] }, - "sessionProfileName": { + "timestampMs": { "type": "string", - "description": "Human-readable name for a Session Profile." + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, - "scope": { + "organizationId": { "type": "string", - "description": "The specific scope that a session created with this profile is limited to." + "description": "Unique identifier for a given Organization." }, - "expirationSeconds": { - "type": "string", - "description": "Optional window (in seconds) indicating how long sessions created with this profile should last.", - "nullable": true + "parameters": { + "$ref": "#/components/schemas/SignRawPayloadIntentV2" }, - "notes": { - "type": "string", - "description": "Optional human-readable notes added by a User to describe a particular Session Profile.", + "generateAppProofs": { + "type": "boolean", "nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "SignRawPayloadResult": { + "type": "object", + "properties": { + "r": { + "type": "string", + "description": "Component of an ECSDA signature." }, - "createdAt": { - "$ref": "#/components/schemas/external.data.v1.Timestamp" + "s": { + "type": "string", + "description": "Component of an ECSDA signature." }, - "updatedAt": { - "$ref": "#/components/schemas/external.data.v1.Timestamp" + "v": { + "type": "string", + "description": "Component of an ECSDA signature." } }, - "required": [ - "sessionProfileId", - "sessionProfileName", - "scope", - "createdAt", - "updatedAt" - ] + "required": ["r", "s", "v"] }, - "SetIpAllowlistIntent": { + "SignRawPayloadsIntent": { "type": "object", "properties": { - "publicKey": { + "signWith": { "type": "string", - "description": "The public component of an API key. If null, the IP allowlist applies at the organization level. If set, it applies only to this specific API key.", - "nullable": true - }, - "enabled": { - "type": "boolean", - "description": "Whether the IP allowlist is enabled. Only meaningful for organization-level allowlists. Omit for API key-level allowlists.", - "nullable": true + "description": "A Wallet account address, Private Key address, or Private Key identifier." }, - "rules": { + "payloads": { "type": "array", "items": { - "$ref": "#/components/schemas/IpAllowlistIntentRule" + "type": "string" }, - "description": "List of IP allowlist rules with CIDR blocks and optional labels." + "description": "An array of raw unsigned payloads to be signed." }, - "onEvaluationError": { - "type": "string", - "description": "Behavior when an error occurs during IP allowlist evaluation. Valid values: ALLOW, DENY. Defaults to DENY.", - "nullable": true + "encoding": { + "$ref": "#/components/schemas/PayloadEncoding" + }, + "hashFunction": { + "$ref": "#/components/schemas/HashFunction" } - } + }, + "required": ["signWith", "payloads", "encoding", "hashFunction"] }, - "SetIpAllowlistRequest": { + "SignRawPayloadsRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_SET_IP_ALLOWLIST" - ] + "enum": ["ACTIVITY_TYPE_SIGN_RAW_PAYLOADS"] }, "timestampMs": { "type": "string", @@ -17482,48 +14983,66 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/components/schemas/SetIpAllowlistIntent" + "$ref": "#/components/schemas/SignRawPayloadsIntent" }, "generateAppProofs": { "type": "boolean", "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "SetIpAllowlistResult": { - "type": "object" + "SignRawPayloadsResult": { + "type": "object", + "properties": { + "signatures": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SignRawPayloadResult" + } + } + } }, - "SetOrganizationFeatureIntent": { + "SignTransactionIntent": { "type": "object", "properties": { - "name": { - "$ref": "#/components/schemas/FeatureName" + "privateKeyId": { + "type": "string", + "description": "Unique identifier for a given Private Key." }, - "value": { + "unsignedTransaction": { "type": "string", - "description": "Optional value for the feature. Will override existing values if feature is already set.", - "nullable": true + "description": "Raw unsigned transaction to be signed by a particular Private Key." + }, + "type": { + "$ref": "#/components/schemas/TransactionType" } }, - "required": [ - "name", - "value" - ] + "required": ["privateKeyId", "unsignedTransaction", "type"] }, - "SetOrganizationFeatureRequest": { + "SignTransactionIntentV2": { + "type": "object", + "properties": { + "signWith": { + "type": "string", + "description": "A Wallet account address, Private Key address, or Private Key identifier." + }, + "unsignedTransaction": { + "type": "string", + "description": "Raw unsigned transaction to be signed" + }, + "type": { + "$ref": "#/components/schemas/TransactionType" + } + }, + "required": ["signWith", "unsignedTransaction", "type"] + }, + "SignTransactionRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_SET_ORGANIZATION_FEATURE" - ] + "enum": ["ACTIVITY_TYPE_SIGN_TRANSACTION_V2"] }, "timestampMs": { "type": "string", @@ -17534,174 +15053,161 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/components/schemas/SetOrganizationFeatureIntent" + "$ref": "#/components/schemas/SignTransactionIntentV2" }, "generateAppProofs": { "type": "boolean", "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "SetOrganizationFeatureResult": { + "SignTransactionResult": { "type": "object", "properties": { - "features": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Feature" - }, - "description": "Resulting list of organization features." + "signedTransaction": { + "type": "string" } }, - "required": [ - "features" - ] + "required": ["signedTransaction"] }, - "SetPaymentMethodIntent": { + "SignupUsage": { "type": "object", "properties": { - "number": { + "email": { "type": "string", - "description": "The account number of the customer's credit card." + "nullable": true }, - "cvv": { + "phoneNumber": { "type": "string", - "description": "The verification digits of the customer's credit card." + "nullable": true }, - "expiryMonth": { - "type": "string", - "description": "The month that the credit card expires." + "apiKeys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ApiKeyParamsV2" + } }, - "expiryYear": { - "type": "string", - "description": "The year that the credit card expires." + "authenticators": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AuthenticatorParamsV2" + } }, - "cardHolderEmail": { + "oauthProviders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OauthProviderParams" + } + } + } + }, + "SignupUsageV2": { + "type": "object", + "properties": { + "email": { "type": "string", - "description": "The email that will receive invoices for the credit card." + "nullable": true }, - "cardHolderName": { + "phoneNumber": { "type": "string", - "description": "The name associated with the credit card." + "nullable": true + }, + "apiKeys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ApiKeyParamsV2" + } + }, + "authenticators": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AuthenticatorParamsV2" + } + }, + "oauthProviders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OauthProviderParamsV2" + } } - }, - "required": [ - "number", - "cvv", - "expiryMonth", - "expiryYear", - "cardHolderEmail", - "cardHolderName" - ] + } }, - "SetPaymentMethodIntentV2": { + "SimpleClientExtensionResults": { "type": "object", "properties": { - "paymentMethodId": { - "type": "string", - "description": "The id of the payment method that was created clientside." + "appid": { + "type": "boolean", + "nullable": true }, - "cardHolderEmail": { - "type": "string", - "description": "The email that will receive invoices for the credit card." + "appidExclude": { + "type": "boolean", + "nullable": true }, - "cardHolderName": { - "type": "string", - "description": "The name associated with the credit card." + "credProps": { + "$ref": "#/components/schemas/CredPropsAuthenticationExtensionsClientOutputs" } - }, - "required": [ - "paymentMethodId", - "cardHolderEmail", - "cardHolderName" + } + }, + "SmartContractInterfaceType": { + "type": "string", + "enum": [ + "SMART_CONTRACT_INTERFACE_TYPE_ETHEREUM", + "SMART_CONTRACT_INTERFACE_TYPE_SOLANA" ] }, - "SetPaymentMethodResult": { + "SmsCustomizationParams": { "type": "object", "properties": { - "lastFour": { - "type": "string", - "description": "The last four digits of the credit card added." - }, - "cardHolderName": { - "type": "string", - "description": "The name associated with the payment method." - }, - "cardHolderEmail": { + "template": { "type": "string", - "description": "The email address associated with the payment method." + "description": "Template containing references to .OtpCode i.e Your OTP is {{.OtpCode}}", + "nullable": true } - }, - "required": [ - "lastFour", - "cardHolderName", - "cardHolderEmail" - ] + } }, - "SignRawPayloadIntent": { + "SolSendTransactionIntent": { "type": "object", "properties": { - "privateKeyId": { + "unsignedTransaction": { "type": "string", - "description": "Unique identifier for a given Private Key." + "description": "Base64-encoded serialized unsigned Solana transaction" }, - "payload": { + "signWith": { "type": "string", - "description": "Raw unsigned payload to be signed." + "description": "A wallet or private key address to sign with. This does not support private key IDs." }, - "encoding": { - "$ref": "#/components/schemas/PayloadEncoding" + "sponsor": { + "type": "boolean", + "description": "Whether to sponsor this transaction via Gas Station.", + "nullable": true }, - "hashFunction": { - "$ref": "#/components/schemas/HashFunction" - } - }, - "required": [ - "privateKeyId", - "payload", - "encoding", - "hashFunction" - ] - }, - "SignRawPayloadIntentV2": { - "type": "object", - "properties": { - "signWith": { + "caip2": { "type": "string", - "description": "A Wallet account address, Private Key address, or Private Key identifier." + "enum": [ + "solana:mainnet", + "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", + "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d", + "solana:devnet", + "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1", + "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1wcaWoxPkrZBG" + ], + "description": "CAIP-2 chain ID (e.g., 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' for Solana mainnet). Human-readable Solana aliases ('solana:mainnet', 'solana:devnet') are also accepted and normalized to canonical CAIP-2 values." }, - "payload": { + "recentBlockhash": { "type": "string", - "description": "Raw unsigned payload to be signed." - }, - "encoding": { - "$ref": "#/components/schemas/PayloadEncoding" - }, - "hashFunction": { - "$ref": "#/components/schemas/HashFunction" + "description": "user-provided blockhash for replay protection / deadline control. If omitted and sponsor=true, we fetch a fresh blockhash during execution", + "nullable": true } }, - "required": [ - "signWith", - "payload", - "encoding", - "hashFunction" - ] + "required": ["unsignedTransaction", "signWith", "caip2"] }, - "SignRawPayloadRequest": { + "SolSendTransactionRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_SIGN_RAW_PAYLOAD_V2" - ] + "enum": ["ACTIVITY_TYPE_SOL_SEND_TRANSACTION"] }, "timestampMs": { "type": "string", @@ -17712,163 +15218,164 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/components/schemas/SignRawPayloadIntentV2" + "$ref": "#/components/schemas/SolSendTransactionIntent" }, "generateAppProofs": { "type": "boolean", "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "SignRawPayloadResult": { + "SolSendTransactionResult": { "type": "object", "properties": { - "r": { - "type": "string", - "description": "Component of an ECSDA signature." - }, - "s": { - "type": "string", - "description": "Component of an ECSDA signature." - }, - "v": { + "sendTransactionStatusId": { "type": "string", - "description": "Component of an ECSDA signature." + "description": "The send_transaction_status ID associated with the transaction submission" } }, - "required": [ - "r", - "s", - "v" - ] + "required": ["sendTransactionStatusId"] }, - "SignRawPayloadsIntent": { + "SolanaConfig": { "type": "object", "properties": { - "signWith": { + "rentPrefundEnabled": { + "type": "boolean", + "description": "Whether Solana rent prefunding is enabled for the organization. When omitted, the existing rent-prefund state is left unchanged.", + "nullable": true + } + } + }, + "SolanaFailureDetails": { + "type": "object", + "properties": { + "source": { "type": "string", - "description": "A Wallet account address, Private Key address, or Private Key identifier." + "description": "Where the Solana failure occurred, such as simulation or preflight." }, - "payloads": { + "rpcCode": { + "type": "integer", + "format": "int32", + "description": "The Solana JSON-RPC error code, if available.", + "nullable": true + }, + "rpcMessage": { + "type": "string", + "description": "The Solana JSON-RPC error message, if available.", + "nullable": true + }, + "transactionErrorJson": { + "type": "string", + "description": "The raw Solana transaction error object serialized as JSON, if available.", + "nullable": true + }, + "logs": { "type": "array", "items": { "type": "string" }, - "description": "An array of raw unsigned payloads to be signed." + "description": "Program logs returned by Solana simulation or preflight, if available." }, - "encoding": { - "$ref": "#/components/schemas/PayloadEncoding" + "unitsConsumed": { + "type": "string", + "format": "uint64", + "description": "Compute units consumed during simulation or preflight, if available.", + "nullable": true }, - "hashFunction": { - "$ref": "#/components/schemas/HashFunction" + "innerInstructionsJson": { + "type": "string", + "description": "The raw Solana inner instructions payload serialized as JSON, if available.", + "nullable": true } - }, - "required": [ - "signWith", - "payloads", - "encoding", - "hashFunction" - ] + } }, - "SignRawPayloadsRequest": { + "SolanaSendTransactionStatus": { "type": "object", "properties": { - "type": { + "signature": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_SIGN_RAW_PAYLOADS" - ] - }, - "timestampMs": { + "description": "The Solana transaction signature, if available.", + "nullable": true + } + } + }, + "SparkClaimLeaf": { + "type": "object", + "properties": { + "leafId": { "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + "description": "Leaf identifier (UUID)." }, - "organizationId": { + "ciphertext": { "type": "string", - "description": "Unique identifier for a given Organization." - }, - "parameters": { - "$ref": "#/components/schemas/SignRawPayloadsIntent" + "description": "ECIES ciphertext (hex-encoded) containing the inbound transfer secret. Decrypted inside the enclave using the wallet's Identity key." }, - "generateAppProofs": { - "type": "boolean", - "nullable": true + "senderSignature": { + "type": "string", + "description": "Hex-encoded 64-byte compact ECDSA signature binding (leaf_id, transfer_id, ciphertext) to the sender's identity key. Verified inside the enclave before decryption." } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["leafId", "ciphertext", "senderSignature"] }, - "SignRawPayloadsResult": { + "SparkClaimPackage": { "type": "object", "properties": { - "signatures": { + "leaves": { "type": "array", "items": { - "$ref": "#/components/schemas/SignRawPayloadResult" - } - } - } - }, - "SignTransactionIntent": { - "type": "object", - "properties": { - "privateKeyId": { - "type": "string", - "description": "Unique identifier for a given Private Key." + "$ref": "#/components/schemas/SparkClaimLeaf" + }, + "description": "Leaves being claimed." }, - "unsignedTransaction": { + "threshold": { + "type": "integer", + "format": "int64", + "description": "Shamir threshold for reconstructing the per-leaf claim secret." + }, + "operatorRecipients": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SparkOperatorRecipient" + }, + "description": "Operators that will receive Shamir shares." + }, + "transferId": { "type": "string", - "description": "Raw unsigned transaction to be signed by a particular Private Key." + "description": "Spark transfer identifier (UUID). Used together with each leaf's sender_signature to verify the sender bound this ciphertext to this transfer." }, - "type": { - "$ref": "#/components/schemas/TransactionType" + "senderIdentityPublicKey": { + "type": "string", + "description": "Sender's compressed secp256k1 identity public key (hex-encoded, 33 bytes). Used to verify the per-leaf sender_signature fields." } }, "required": [ - "privateKeyId", - "unsignedTransaction", - "type" + "leaves", + "threshold", + "operatorRecipients", + "transferId", + "senderIdentityPublicKey" ] }, - "SignTransactionIntentV2": { + "SparkClaimTransferIntent": { "type": "object", "properties": { "signWith": { "type": "string", - "description": "A Wallet account address, Private Key address, or Private Key identifier." - }, - "unsignedTransaction": { - "type": "string", - "description": "Raw unsigned transaction to be signed" + "description": "A Spark wallet account address identifying the wallet." }, - "type": { - "$ref": "#/components/schemas/TransactionType" + "claim": { + "$ref": "#/components/schemas/SparkClaimPackage" } }, - "required": [ - "signWith", - "unsignedTransaction", - "type" - ] + "required": ["signWith", "claim"] }, - "SignTransactionRequest": { + "SparkClaimTransferRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_SIGN_TRANSACTION_V2" - ] + "enum": ["ACTIVITY_TYPE_SPARK_CLAIM_TRANSFER"] }, "timestampMs": { "type": "string", @@ -17879,413 +15386,292 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/components/schemas/SignTransactionIntentV2" - }, - "generateAppProofs": { - "type": "boolean", - "nullable": true - } - }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] - }, - "SignTransactionResult": { - "type": "object", - "properties": { - "signedTransaction": { - "type": "string" + "$ref": "#/components/schemas/SparkClaimTransferIntent" } }, - "required": [ - "signedTransaction" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "SignupUsage": { + "SparkClaimTransferResult": { "type": "object", "properties": { - "email": { - "type": "string", - "nullable": true - }, - "phoneNumber": { - "type": "string", - "nullable": true - }, - "apiKeys": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ApiKeyParamsV2" - } - }, - "authenticators": { + "operatorPackages": { "type": "array", "items": { - "$ref": "#/components/schemas/AuthenticatorParamsV2" - } + "$ref": "#/components/schemas/SparkEncryptedOperatorPackage" + }, + "description": "Per-operator ECIES-encrypted packages." }, - "oauthProviders": { + "newLeafPublicKeys": { "type": "array", "items": { - "$ref": "#/components/schemas/OauthProviderParams" - } + "$ref": "#/components/schemas/SparkLeafPublicKey" + }, + "description": "Newly-derived SigningLeaf public keys, one per leaf, in input order." } - } + }, + "required": ["operatorPackages", "newLeafPublicKeys"] }, - "SignupUsageV2": { + "SparkDepositDerivation": { + "type": "object" + }, + "SparkEncryptedOperatorPackage": { "type": "object", "properties": { - "email": { + "operatorId": { "type": "string", - "nullable": true + "description": "Spark operator identifier (UUID)." }, - "phoneNumber": { + "encryptedPackage": { "type": "string", - "nullable": true - }, - "apiKeys": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ApiKeyParamsV2" - } - }, - "authenticators": { - "type": "array", - "items": { - "$ref": "#/components/schemas/AuthenticatorParamsV2" - } - }, - "oauthProviders": { - "type": "array", - "items": { - "$ref": "#/components/schemas/OauthProviderParamsV2" - } + "description": "ECIES ciphertext (hex-encoded) opaque to Turnkey after emission." } - } + }, + "required": ["operatorId", "encryptedPackage"] }, - "SimpleClientExtensionResults": { + "SparkFrostCommitment": { "type": "object", "properties": { - "appid": { - "type": "boolean", - "nullable": true + "id": { + "type": "string", + "description": "FROST participant identifier, hex-encoded (32-byte scalar)." }, - "appidExclude": { - "type": "boolean", - "nullable": true + "hiding": { + "type": "string", + "description": "Hiding commitment D, hex-encoded compressed secp256k1 point." }, - "credProps": { - "$ref": "#/components/schemas/CredPropsAuthenticationExtensionsClientOutputs" + "binding": { + "type": "string", + "description": "Binding commitment E, hex-encoded compressed secp256k1 point." } - } + }, + "required": ["id", "hiding", "binding"] }, - "SmartContractInterfaceType": { - "type": "string", - "enum": [ - "SMART_CONTRACT_INTERFACE_TYPE_ETHEREUM", - "SMART_CONTRACT_INTERFACE_TYPE_SOLANA" - ] + "SparkHtlcPreimageDerivation": { + "type": "object" }, - "SmsCustomizationParams": { - "type": "object", - "properties": { - "template": { - "type": "string", - "description": "Template containing references to .OtpCode i.e Your OTP is {{.OtpCode}}", - "nullable": true - } - } + "SparkIdentityDerivation": { + "type": "object" }, - "SolSendTransactionIntent": { + "SparkKeyDerivation": { "type": "object", "properties": { - "unsignedTransaction": { - "type": "string", - "description": "Base64-encoded serialized unsigned Solana transaction" + "identity": { + "$ref": "#/components/schemas/SparkIdentityDerivation" }, - "signWith": { - "type": "string", - "description": "A wallet or private key address to sign with. This does not support private key IDs." + "signingLeaf": { + "$ref": "#/components/schemas/SparkSigningLeafDerivation" }, - "sponsor": { - "type": "boolean", - "description": "Whether to sponsor this transaction via Gas Station.", - "nullable": true + "deposit": { + "$ref": "#/components/schemas/SparkDepositDerivation" }, - "caip2": { - "type": "string", - "enum": [ - "solana:mainnet", - "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", - "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d", - "solana:devnet", - "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1", - "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1wcaWoxPkrZBG" - ], - "description": "CAIP-2 chain ID (e.g., 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' for Solana mainnet). Human-readable Solana aliases ('solana:mainnet', 'solana:devnet') are also accepted and normalized to canonical CAIP-2 values." + "staticDeposit": { + "$ref": "#/components/schemas/SparkStaticDepositDerivation" }, - "recentBlockhash": { - "type": "string", - "description": "user-provided blockhash for replay protection / deadline control. If omitted and sponsor=true, we fetch a fresh blockhash during execution", - "nullable": true + "htlcPreimage": { + "$ref": "#/components/schemas/SparkHtlcPreimageDerivation" } - }, - "required": [ - "unsignedTransaction", - "signWith", - "caip2" - ] + } }, - "SolSendTransactionIntentV2": { + "SparkLeafPublicKey": { "type": "object", "properties": { - "unsignedTransaction": { - "type": "string", - "description": "Hex-encoded serialized unsigned Solana transaction (full wire format with zeroed signature placeholders)" - }, - "signWiths": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Ordered Solana signer addresses Turnkey signs with. Between 1 and 16 signers. For sponsored transactions this must list every required signer of the transaction in transaction order." - }, - "sponsor": { - "type": "boolean", - "description": "Whether to sponsor this transaction via Gas Station.", - "nullable": true - }, - "caip2": { + "leafId": { "type": "string", - "enum": [ - "solana:mainnet", - "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", - "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d", - "solana:devnet", - "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1", - "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1wcaWoxPkrZBG" - ], - "description": "CAIP-2 chain ID (e.g., 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' for Solana mainnet). Human-readable Solana aliases ('solana:mainnet', 'solana:devnet') are also accepted and normalized to canonical CAIP-2 values." + "description": "The Spark leaf_id this public key was derived for." }, - "recentBlockhash": { + "publicKey": { "type": "string", - "description": "User-provided blockhash for replay protection / deadline control. If provided, it is used as-is, including for sponsored transactions (the transaction is only broadcastable while the blockhash is current). If omitted and sponsor=true, a fresh blockhash is fetched during execution.", - "nullable": true + "description": "Hex-encoded compressed secp256k1 point (33 bytes) for the SigningLeaf derivation at leaf_id." } }, - "required": [ - "unsignedTransaction", - "signWiths", - "caip2" - ] + "required": ["leafId", "publicKey"] }, - "SolSendTransactionRequest": { + "SparkLightningReceivePackage": { "type": "object", "properties": { - "type": { - "type": "string", - "enum": [ - "ACTIVITY_TYPE_SOL_SEND_TRANSACTION" - ] - }, - "timestampMs": { - "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." - }, - "organizationId": { - "type": "string", - "description": "Unique identifier for a given Organization." - }, - "parameters": { - "$ref": "#/components/schemas/SolSendTransactionIntent" + "threshold": { + "type": "integer", + "format": "int64", + "description": "Feldman VSS threshold for reconstructing the preimage." }, - "generateAppProofs": { - "type": "boolean", - "nullable": true + "operatorRecipients": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SparkOperatorRecipient" + }, + "description": "Operators that will receive Feldman shares of the preimage. Order must match the operators' numeric IDs in the Spark operator config - share index is the 1-based position in this list." } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["threshold", "operatorRecipients"] }, - "SolSendTransactionResult": { + "SparkOperatorRecipient": { "type": "object", "properties": { - "sendTransactionStatusId": { + "operatorId": { "type": "string", - "description": "The send_transaction_status ID associated with the transaction submission" + "description": "Spark operator identifier (UUID)." + }, + "encryptionPublicKey": { + "type": "string", + "description": "Operator's ECIES encryption pubkey (hex-encoded compressed secp256k1 point)." } }, - "required": [ - "sendTransactionStatusId" - ] + "required": ["operatorId", "encryptionPublicKey"] }, - "SolSendTransactionResultV2": { + "SparkPartialSignature": { "type": "object", "properties": { - "sendTransactionStatusId": { + "signatureShare": { "type": "string", - "description": "The send_transaction_status ID associated with the transaction submission" + "description": "Hex-encoded FROST partial signature." + }, + "hiding": { + "type": "string", + "description": "Turnkey's hiding commitment D (hex-encoded compressed secp256k1 point). Forward to the Spark Operator." + }, + "binding": { + "type": "string", + "description": "Turnkey's binding commitment E (hex-encoded compressed secp256k1 point). Forward to the Spark Operator." } }, - "required": [ - "sendTransactionStatusId" - ] + "required": ["signatureShare", "hiding", "binding"] }, - "SolanaConfig": { + "SparkPrepareLightningReceiveIntent": { "type": "object", "properties": { - "rentPrefundEnabled": { - "type": "boolean", - "description": "Whether Solana rent prefunding is enabled for the organization. When omitted, the existing rent-prefund state is left unchanged.", - "nullable": true + "signWith": { + "type": "string", + "description": "A Spark wallet account address identifying the wallet." + }, + "lightningReceive": { + "$ref": "#/components/schemas/SparkLightningReceivePackage" } - } + }, + "required": ["signWith", "lightningReceive"] }, - "SolanaFailureDetails": { + "SparkPrepareLightningReceiveRequest": { "type": "object", "properties": { - "source": { + "type": { "type": "string", - "description": "Where the Solana failure occurred, such as simulation or preflight." - }, - "rpcCode": { - "type": "integer", - "format": "int32", - "description": "The Solana JSON-RPC error code, if available.", - "nullable": true + "enum": ["ACTIVITY_TYPE_SPARK_PREPARE_LIGHTNING_RECEIVE"] }, - "rpcMessage": { + "timestampMs": { "type": "string", - "description": "The Solana JSON-RPC error message, if available.", - "nullable": true + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, - "transactionErrorJson": { + "organizationId": { "type": "string", - "description": "The raw Solana transaction error object serialized as JSON, if available.", - "nullable": true + "description": "Unique identifier for a given Organization." }, - "logs": { + "parameters": { + "$ref": "#/components/schemas/SparkPrepareLightningReceiveIntent" + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "SparkPrepareLightningReceiveResult": { + "type": "object", + "properties": { + "operatorPackages": { "type": "array", "items": { - "type": "string" + "$ref": "#/components/schemas/SparkEncryptedOperatorPackage" }, - "description": "Program logs returned by Solana simulation or preflight, if available." - }, - "unitsConsumed": { - "type": "string", - "format": "uint64", - "description": "Compute units consumed during simulation or preflight, if available.", - "nullable": true + "description": "Per-operator ECIES-encrypted Feldman share packages." }, - "innerInstructionsJson": { + "paymentHash": { "type": "string", - "description": "The raw Solana inner instructions payload serialized as JSON, if available.", - "nullable": true + "description": "Hex-encoded SHA256(preimage). Forward to the Lightning node." } - } + }, + "required": ["operatorPackages", "paymentHash"] }, - "SolanaSendTransactionStatus": { + "SparkPrepareTransferIntent": { "type": "object", "properties": { - "signature": { + "signWith": { "type": "string", - "description": "The Solana transaction signature, if available.", - "nullable": true + "description": "A Spark wallet account address identifying the wallet." + }, + "transfer": { + "$ref": "#/components/schemas/SparkTransferPackage" } - } + }, + "required": ["signWith", "transfer"] }, - "SparkClaimLeaf": { + "SparkPrepareTransferRequest": { "type": "object", "properties": { - "leafId": { + "type": { "type": "string", - "description": "Leaf identifier (UUID)." + "enum": ["ACTIVITY_TYPE_SPARK_PREPARE_TRANSFER"] }, - "ciphertext": { + "timestampMs": { "type": "string", - "description": "ECIES ciphertext (hex-encoded) containing the inbound transfer secret. Decrypted inside the enclave using the wallet's Identity key." + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, - "senderSignature": { + "organizationId": { "type": "string", - "description": "Hex-encoded 64-byte compact ECDSA signature binding (leaf_id, transfer_id, ciphertext) to the sender's identity key. Verified inside the enclave before decryption." + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/SparkPrepareTransferIntent" } }, - "required": [ - "leafId", - "ciphertext", - "senderSignature" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "SparkClaimPackage": { + "SparkPrepareTransferResult": { "type": "object", "properties": { - "leaves": { + "operatorPackages": { "type": "array", "items": { - "$ref": "#/components/schemas/SparkClaimLeaf" + "$ref": "#/components/schemas/SparkEncryptedOperatorPackage" }, - "description": "Leaves being claimed." + "description": "Per-operator ECIES-encrypted packages." }, - "threshold": { - "type": "integer", - "format": "int64", - "description": "Shamir threshold for reconstructing the per-leaf claim secret." + "transferUserSignature": { + "type": "string", + "description": "Hex-encoded ECDSA-DER signature of the TransferPackage signing payload, signed with the wallet's IDENTITY key." }, - "operatorRecipients": { + "newLeafPublicKeys": { "type": "array", "items": { - "$ref": "#/components/schemas/SparkOperatorRecipient" + "$ref": "#/components/schemas/SparkLeafPublicKey" }, - "description": "Operators that will receive Shamir shares." - }, - "transferId": { - "type": "string", - "description": "Spark transfer identifier (UUID). Used together with each leaf's sender_signature to verify the sender bound this ciphertext to this transfer." - }, - "senderIdentityPublicKey": { - "type": "string", - "description": "Sender's compressed secp256k1 identity public key (hex-encoded, 33 bytes). Used to verify the per-leaf sender_signature fields." + "description": "Newly-derived SigningLeaf public keys, one per leaf, in input order." } }, "required": [ - "leaves", - "threshold", - "operatorRecipients", - "transferId", - "senderIdentityPublicKey" + "operatorPackages", + "transferUserSignature", + "newLeafPublicKeys" ] }, - "SparkClaimTransferIntent": { + "SparkSignFrostIntent": { "type": "object", "properties": { "signWith": { "type": "string", - "description": "A Spark wallet account address identifying the wallet." + "description": "A Spark wallet account address identifying the wallet to sign with." }, - "claim": { - "$ref": "#/components/schemas/SparkClaimPackage" + "signatures": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SparkSignatureRequest" + }, + "description": "Batched sign requests. Each produces a partial signature plus Turnkey's public commitments." } }, - "required": [ - "signWith", - "claim" - ] + "required": ["signWith", "signatures"] }, - "SparkClaimTransferRequest": { + "SparkSignFrostRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_SPARK_CLAIM_TRANSFER" - ] + "enum": ["ACTIVITY_TYPE_SPARK_SIGN_FROST"] }, "timestampMs": { "type": "string", @@ -18296,208 +15682,180 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/components/schemas/SparkClaimTransferIntent" + "$ref": "#/components/schemas/SparkSignFrostIntent" } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "SparkClaimTransferResult": { + "SparkSignFrostResult": { "type": "object", "properties": { - "operatorPackages": { + "signatures": { "type": "array", "items": { - "$ref": "#/components/schemas/SparkEncryptedOperatorPackage" + "$ref": "#/components/schemas/SparkPartialSignature" }, - "description": "Per-operator ECIES-encrypted packages." + "description": "Partial signatures plus Turnkey commitments, one per request, in order." + } + }, + "required": ["signatures"] + }, + "SparkSignatureRequest": { + "type": "object", + "properties": { + "derivation": { + "$ref": "#/components/schemas/SparkKeyDerivation" }, - "newLeafPublicKeys": { + "message": { + "type": "string", + "description": "Hex-encoded 32-byte sighash to sign." + }, + "verifyingKey": { + "type": "string", + "description": "Aggregate group verifying key (hex-encoded compressed secp256k1 point), computed as P_ops + P_user. Bound into the nonce HMAC." + }, + "operatorCommitments": { "type": "array", "items": { - "$ref": "#/components/schemas/SparkLeafPublicKey" + "$ref": "#/components/schemas/SparkFrostCommitment" }, - "description": "Newly-derived SigningLeaf public keys, one per leaf, in input order." + "description": "Commitments for every non-Turnkey participant. MUST NOT include an entry under Turnkey's identifier. Bound into the nonce HMAC." + }, + "adaptorPublicKey": { + "type": "string", + "description": "Optional adaptor point T (hex-encoded 33-byte compressed secp256k1 pubkey). When set, Turnkey produces a Schnorr adaptor pre-signature with the FROST challenge bound to `R+T` (where `R` is the aggregate group nonce commitment from FROST). The party holding the discrete log `t` completes the pre-sig to a valid BIP-340 signature by adding `t` (or `-t`, for parity) to the signature scalar `s`. This is primarily used by Spark leaves-swap and other adaptor-bound flows; absent or empty leads to plain FROST signing (the typical case).", + "nullable": true } }, "required": [ - "operatorPackages", - "newLeafPublicKeys" + "derivation", + "message", + "verifyingKey", + "operatorCommitments" ] }, - "SparkDepositDerivation": { - "type": "object" - }, - "SparkEncryptedOperatorPackage": { + "SparkSigningLeafDerivation": { "type": "object", "properties": { - "operatorId": { - "type": "string", - "description": "Spark operator identifier (UUID)." - }, - "encryptedPackage": { + "leafId": { "type": "string", - "description": "ECIES ciphertext (hex-encoded) opaque to Turnkey after emission." + "description": "Unique identifier for the Spark signing leaf." } }, - "required": [ - "operatorId", - "encryptedPackage" - ] + "required": ["leafId"] }, - "SparkFrostCommitment": { + "SparkStaticDepositDerivation": { "type": "object", "properties": { - "id": { - "type": "string", - "description": "FROST participant identifier, hex-encoded (32-byte scalar)." - }, - "hiding": { - "type": "string", - "description": "Hiding commitment D, hex-encoded compressed secp256k1 point." - }, - "binding": { - "type": "string", - "description": "Binding commitment E, hex-encoded compressed secp256k1 point." + "index": { + "type": "integer", + "format": "int64", + "description": "Index used to derive the static deposit key." } }, - "required": [ - "id", - "hiding", - "binding" - ] - }, - "SparkHtlcPreimageDerivation": { - "type": "object" - }, - "SparkIdentityDerivation": { - "type": "object" + "required": ["index"] }, - "SparkKeyDerivation": { + "SparkTransferLeaf": { "type": "object", "properties": { - "identity": { - "$ref": "#/components/schemas/SparkIdentityDerivation" + "leafId": { + "type": "string", + "description": "Leaf identifier (UUID)." }, - "signingLeaf": { - "$ref": "#/components/schemas/SparkSigningLeafDerivation" + "oldLeafDerivation": { + "$ref": "#/components/schemas/SparkKeyDerivation" }, - "deposit": { - "$ref": "#/components/schemas/SparkDepositDerivation" + "newLeafDerivation": { + "$ref": "#/components/schemas/SparkKeyDerivation" }, - "staticDeposit": { - "$ref": "#/components/schemas/SparkStaticDepositDerivation" + "refundSignature": { + "type": "string", + "description": "Client-produced CPFP refund signature (hex-encoded), passed through verbatim into the per-operator SendLeafKeyTweak. Empty omits the field from the operator package.", + "nullable": true }, - "htlcPreimage": { - "$ref": "#/components/schemas/SparkHtlcPreimageDerivation" - } - } - }, - "SparkLeafPublicKey": { - "type": "object", - "properties": { - "leafId": { + "directRefundSignature": { "type": "string", - "description": "The Spark leaf_id this public key was derived for." + "description": "Client-produced direct refund signature (hex-encoded). Passed through verbatim.", + "nullable": true }, - "publicKey": { + "directFromCpfpRefundSignature": { "type": "string", - "description": "Hex-encoded compressed secp256k1 point (33 bytes) for the SigningLeaf derivation at leaf_id." + "description": "Client-produced direct-from-CPFP refund signature (hex-encoded). Passed through verbatim.", + "nullable": true } }, - "required": [ - "leafId", - "publicKey" - ] + "required": ["leafId", "oldLeafDerivation", "newLeafDerivation"] }, - "SparkLightningReceivePackage": { + "SparkTransferPackage": { "type": "object", "properties": { + "transferId": { + "type": "string", + "description": "Spark transfer identifier (UUID)." + }, + "leaves": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SparkTransferLeaf" + }, + "description": "Leaves being transferred." + }, "threshold": { "type": "integer", "format": "int64", - "description": "Feldman VSS threshold for reconstructing the preimage." + "description": "Feldman VSS threshold for reconstructing the per-leaf tweak scalar." }, "operatorRecipients": { "type": "array", "items": { "$ref": "#/components/schemas/SparkOperatorRecipient" }, - "description": "Operators that will receive Feldman shares of the preimage. Order must match the operators' numeric IDs in the Spark operator config - share index is the 1-based position in this list." - } - }, - "required": [ - "threshold", - "operatorRecipients" - ] - }, - "SparkOperatorRecipient": { - "type": "object", - "properties": { - "operatorId": { - "type": "string", - "description": "Spark operator identifier (UUID)." + "description": "Operators that will receive Feldman shares of the per-leaf tweak. Order must match the operators' numeric IDs in the Spark operator config - share index is the 1-based position in this list." }, - "encryptionPublicKey": { + "receiverPublicKey": { "type": "string", - "description": "Operator's ECIES encryption pubkey (hex-encoded compressed secp256k1 point)." + "description": "Recipient's identity pubkey (hex-encoded compressed secp256k1 point). Each leaf's new_priv is ECIES-encrypted to this key and embedded in the per-operator package for claim-time delivery." } }, "required": [ - "operatorId", - "encryptionPublicKey" + "transferId", + "leaves", + "threshold", + "operatorRecipients", + "receiverPublicKey" ] }, - "SparkPartialSignature": { + "StampLoginIntent": { "type": "object", "properties": { - "signatureShare": { + "publicKey": { "type": "string", - "description": "Hex-encoded FROST partial signature." + "description": "Client-side public key generated by the user, which will be conditionally added to org data based on the passkey stamp associated with this request" }, - "hiding": { + "expirationSeconds": { "type": "string", - "description": "Turnkey's hiding commitment D (hex-encoded compressed secp256k1 point). Forward to the Spark Operator." + "description": "Expiration window (in seconds) indicating how long the Session is valid for. If not provided, a default of 15 minutes will be used.", + "nullable": true }, - "binding": { - "type": "string", - "description": "Turnkey's binding commitment E (hex-encoded compressed secp256k1 point). Forward to the Spark Operator." - } - }, - "required": [ - "signatureShare", - "hiding", - "binding" - ] - }, - "SparkPrepareLightningReceiveIntent": { - "type": "object", - "properties": { - "signWith": { - "type": "string", - "description": "A Spark wallet account address identifying the wallet." + "invalidateExisting": { + "type": "boolean", + "description": "Invalidate all other previously generated Login API keys", + "nullable": true }, - "lightningReceive": { - "$ref": "#/components/schemas/SparkLightningReceivePackage" + "sessionProfileId": { + "type": "string", + "description": "Optional session profile ID to specify which Session Profile to use for this login. If not provided, the default read/write session will be used.", + "nullable": true } }, - "required": [ - "signWith", - "lightningReceive" - ] + "required": ["publicKey"] }, - "SparkPrepareLightningReceiveRequest": { + "StampLoginRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_SPARK_PREPARE_LIGHTNING_RECEIVE" - ] + "enum": ["ACTIVITY_TYPE_STAMP_LOGIN"] }, "timestampMs": { "type": "string", @@ -18508,1045 +15866,1063 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/components/schemas/SparkPrepareLightningReceiveIntent" + "$ref": "#/components/schemas/StampLoginIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "SparkPrepareLightningReceiveResult": { + "StampLoginResult": { "type": "object", "properties": { - "operatorPackages": { - "type": "array", - "items": { - "$ref": "#/components/schemas/SparkEncryptedOperatorPackage" - }, - "description": "Per-operator ECIES-encrypted Feldman share packages." - }, - "paymentHash": { + "session": { "type": "string", - "description": "Hex-encoded SHA256(preimage). Forward to the Lightning node." + "description": "Signed JWT containing an expiry, public key, session type, user id, and organization id" } }, - "required": [ - "operatorPackages", - "paymentHash" - ] + "required": ["session"] }, - "SparkPrepareTransferIntent": { + "Status": { "type": "object", "properties": { - "signWith": { - "type": "string", - "description": "A Spark wallet account address identifying the wallet." + "code": { + "type": "integer", + "format": "int32" }, - "transfer": { - "$ref": "#/components/schemas/SparkTransferPackage" + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Any" + } } - }, - "required": [ - "signWith", - "transfer" - ] + } }, - "SparkPrepareTransferRequest": { + "TagType": { + "type": "string", + "enum": ["TAG_TYPE_USER", "TAG_TYPE_PRIVATE_KEY"] + }, + "TokenUsage": { "type": "object", "properties": { "type": { - "type": "string", - "enum": [ - "ACTIVITY_TYPE_SPARK_PREPARE_TRANSFER" - ] + "$ref": "#/components/schemas/UsageType" }, - "timestampMs": { + "tokenId": { "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + "description": "Unique identifier for the verification token" }, - "organizationId": { - "type": "string", - "description": "Unique identifier for a given Organization." + "signup": { + "$ref": "#/components/schemas/SignupUsage" }, - "parameters": { - "$ref": "#/components/schemas/SparkPrepareTransferIntent" + "login": { + "$ref": "#/components/schemas/LoginUsage" + }, + "signupV2": { + "$ref": "#/components/schemas/SignupUsageV2" } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" + "required": ["type", "tokenId"] + }, + "TransactionType": { + "type": "string", + "enum": [ + "TRANSACTION_TYPE_ETHEREUM", + "TRANSACTION_TYPE_SOLANA", + "TRANSACTION_TYPE_TRON", + "TRANSACTION_TYPE_BITCOIN", + "TRANSACTION_TYPE_TEMPO" ] }, - "SparkPrepareTransferResult": { + "TvcApp": { "type": "object", "properties": { - "operatorPackages": { - "type": "array", - "items": { - "$ref": "#/components/schemas/SparkEncryptedOperatorPackage" - }, - "description": "Per-operator ECIES-encrypted packages." + "id": { + "type": "string", + "description": "Unique Identifier for this TVC App." + }, + "organizationId": { + "type": "string", + "description": "Unique Identifier of the Organization for this TVC App" + }, + "name": { + "type": "string", + "description": "Name for this TVC App." + }, + "quorumPublicKey": { + "type": "string", + "description": "Public key for the Quorum Key associated with this TVC App" + }, + "manifestSet": { + "$ref": "#/components/schemas/TvcOperatorSet" + }, + "shareSet": { + "$ref": "#/components/schemas/TvcOperatorSet" + }, + "enableEgress": { + "type": "boolean", + "description": "Whether or not this TVC App has network egress enabled." + }, + "createdAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + }, + "liveDeploymentId": { + "type": "string", + "description": "The deployment currently designated to receive traffic. Null if no deployment for this app is deployed.", + "nullable": true }, - "transferUserSignature": { + "publicDomain": { "type": "string", - "description": "Hex-encoded ECDSA-DER signature of the TransferPackage signing payload, signed with the wallet's IDENTITY key." + "description": "The public domain for ingress to this TVC App (in the format \"app-.turnkey.cloud\")." }, - "newLeafPublicKeys": { - "type": "array", - "items": { - "$ref": "#/components/schemas/SparkLeafPublicKey" - }, - "description": "Newly-derived SigningLeaf public keys, one per leaf, in input order." + "enableDebugModeDeployments": { + "type": "boolean", + "description": "Whether this app permits debug-mode deployments. Set at app creation via CreateTvcAppIntent.enable_debug_mode_deployments and never updated thereafter. Debug-mode deployments expose logs and emit zero'd attestation PCRs, so remote attestation cannot succeed. The app's quorum key is therefore considered permanently insecure once enabled — a new app with a fresh quorum key must be created to return to a secure posture." } }, "required": [ - "operatorPackages", - "transferUserSignature", - "newLeafPublicKeys" + "id", + "organizationId", + "name", + "quorumPublicKey", + "manifestSet", + "shareSet", + "enableEgress", + "createdAt", + "updatedAt", + "publicDomain", + "enableDebugModeDeployments" ] }, - "SparkSignFrostIntent": { + "TvcContainerSpec": { "type": "object", "properties": { - "signWith": { + "containerUrl": { "type": "string", - "description": "A Spark wallet account address identifying the wallet to sign with." + "description": "The URL for this container image." }, - "signatures": { + "path": { + "type": "string", + "description": "The path (in-container) to the executable binary." + }, + "args": { "type": "array", "items": { - "$ref": "#/components/schemas/SparkSignatureRequest" + "type": "string" }, - "description": "Batched sign requests. Each produces a partial signature plus Turnkey's public commitments." + "description": "The arguments to pass to the executable." + }, + "hasPullSecret": { + "type": "boolean", + "description": "Whether or not this container requires a pull secret to access." + }, + "healthCheckType": { + "$ref": "#/components/schemas/TvcHealthCheckType" + }, + "healthCheckPort": { + "type": "integer", + "format": "int64", + "description": "The port to use for health checks against this executable." + }, + "publicIngressPort": { + "type": "integer", + "format": "int64", + "description": "The port to use for public ingress to this executable." } }, "required": [ - "signWith", - "signatures" + "containerUrl", + "path", + "args", + "hasPullSecret", + "healthCheckType", + "healthCheckPort", + "publicIngressPort" ] }, - "SparkSignFrostRequest": { + "TvcDeployment": { "type": "object", "properties": { - "type": { + "id": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_SPARK_SIGN_FROST" - ] + "description": "Unique Identifier for this TVC Deployment." }, - "timestampMs": { + "organizationId": { "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + "description": "Unique Identifier of the Organization for this TVC Deployment" }, - "organizationId": { + "appId": { "type": "string", - "description": "Unique identifier for a given Organization." + "description": "Unique Identifier of the TVC App for this deployment" }, - "parameters": { - "$ref": "#/components/schemas/SparkSignFrostIntent" + "manifestSet": { + "$ref": "#/components/schemas/TvcOperatorSet" + }, + "shareSet": { + "$ref": "#/components/schemas/TvcOperatorSet" + }, + "manifest": { + "$ref": "#/components/schemas/TvcManifest" + }, + "manifestApprovals": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TvcOperatorApproval" + }, + "description": "List of operator approvals for this manifest" + }, + "qosVersion": { + "type": "string", + "description": "QOS Version used for this deployment" + }, + "pivotContainer": { + "$ref": "#/components/schemas/TvcContainerSpec" + }, + "createdAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + }, + "delete": { + "type": "boolean", + "description": "Whether or not the user wants this deployment deleted from the cluster." } }, "required": [ - "type", - "timestampMs", + "id", "organizationId", - "parameters" + "appId", + "manifestSet", + "shareSet", + "manifest", + "manifestApprovals", + "qosVersion", + "pivotContainer", + "createdAt", + "updatedAt", + "delete" ] }, - "SparkSignFrostResult": { + "TvcDeploymentDebugLogEntry": { "type": "object", "properties": { - "signatures": { - "type": "array", - "items": { - "$ref": "#/components/schemas/SparkPartialSignature" - }, - "description": "Partial signatures plus Turnkey commitments, one per request, in order." + "line": { + "$ref": "#/components/schemas/LogLine" + }, + "replicaLabel": { + "type": "string", + "description": "Public replica label that produced this log line, for example 'replica 2/3'." } }, - "required": [ - "signatures" - ] + "required": ["line", "replicaLabel"] }, - "SparkSignatureRequest": { + "TvcHealthCheckType": { + "type": "string", + "enum": ["TVC_HEALTH_CHECK_TYPE_HTTP", "TVC_HEALTH_CHECK_TYPE_GRPC"] + }, + "TvcManifest": { "type": "object", "properties": { - "derivation": { - "$ref": "#/components/schemas/SparkKeyDerivation" - }, - "message": { + "id": { "type": "string", - "description": "Hex-encoded 32-byte sighash to sign." + "description": "Unique Identifier for this TVC Manifest." }, - "verifyingKey": { + "manifest": { "type": "string", - "description": "Aggregate group verifying key (hex-encoded compressed secp256k1 point), computed as P_ops + P_user. Bound into the nonce HMAC." + "format": "byte", + "description": "The manifest content (raw UTF-8 JSON bytes)" }, - "operatorCommitments": { - "type": "array", - "items": { - "$ref": "#/components/schemas/SparkFrostCommitment" - }, - "description": "Commitments for every non-Turnkey participant. MUST NOT include an entry under Turnkey's identifier. Bound into the nonce HMAC." + "createdAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" }, - "adaptorPublicKey": { - "type": "string", - "description": "Optional adaptor point T (hex-encoded 33-byte compressed secp256k1 pubkey). When set, Turnkey produces a Schnorr adaptor pre-signature with the FROST challenge bound to `R+T` (where `R` is the aggregate group nonce commitment from FROST). The party holding the discrete log `t` completes the pre-sig to a valid BIP-340 signature by adding `t` (or `-t`, for parity) to the signature scalar `s`. This is primarily used by Spark leaves-swap and other adaptor-bound flows; absent or empty leads to plain FROST signing (the typical case).", - "nullable": true + "updatedAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" } }, - "required": [ - "derivation", - "message", - "verifyingKey", - "operatorCommitments" - ] + "required": ["id", "manifest", "createdAt", "updatedAt"] }, - "SparkSigningLeafDerivation": { + "TvcManifestApproval": { "type": "object", "properties": { - "leafId": { + "operatorId": { "type": "string", - "description": "Unique identifier for the Spark signing leaf." + "description": "Unique identifier of the operator providing this approval" + }, + "signature": { + "type": "string", + "description": "Signature from the operator approving the manifest" } }, - "required": [ - "leafId" - ] + "required": ["operatorId", "signature"] }, - "SparkStaticDepositDerivation": { + "TvcOperator": { "type": "object", "properties": { - "index": { - "type": "integer", - "format": "int64", - "description": "Index used to derive the static deposit key." + "id": { + "type": "string", + "description": "Unique Identifier for this TVC Operator." + }, + "name": { + "type": "string", + "description": "Name of this TVC Operator." + }, + "publicKey": { + "type": "string", + "description": "Public key for this TVC Operator." + }, + "createdAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" } }, - "required": [ - "index" - ] + "required": ["id", "name", "publicKey", "createdAt", "updatedAt"] }, - "SparkTransferLeaf": { + "TvcOperatorApproval": { "type": "object", "properties": { - "leafId": { + "id": { "type": "string", - "description": "Leaf identifier (UUID)." + "description": "Unique ID for this approval" }, - "oldLeafDerivation": { - "$ref": "#/components/schemas/SparkKeyDerivation" + "manifestId": { + "type": "string", + "description": "Unique Identifier of the TVC Manifest being approved" }, - "newLeafDerivation": { - "$ref": "#/components/schemas/SparkKeyDerivation" + "operator": { + "$ref": "#/components/schemas/TvcOperator" }, - "refundSignature": { + "approval": { "type": "string", - "description": "Client-produced CPFP refund signature (hex-encoded), passed through verbatim into the per-operator SendLeafKeyTweak. Empty omits the field from the operator package.", - "nullable": true + "format": "byte", + "description": "Signature of the operator over the deployment manifest" }, - "directRefundSignature": { + "createdAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + } + }, + "required": [ + "id", + "manifestId", + "operator", + "approval", + "createdAt", + "updatedAt" + ] + }, + "TvcOperatorParams": { + "type": "object", + "properties": { + "name": { "type": "string", - "description": "Client-produced direct refund signature (hex-encoded). Passed through verbatim.", - "nullable": true + "description": "The name for this new operator" }, - "directFromCpfpRefundSignature": { + "publicKey": { "type": "string", - "description": "Client-produced direct-from-CPFP refund signature (hex-encoded). Passed through verbatim.", - "nullable": true + "description": "Public key for this operator" } }, - "required": [ - "leafId", - "oldLeafDerivation", - "newLeafDerivation" - ] + "required": ["name", "publicKey"] }, - "SparkTransferPackage": { + "TvcOperatorSet": { "type": "object", "properties": { - "transferId": { + "id": { "type": "string", - "description": "Spark transfer identifier (UUID)." + "description": "Unique Identifier for this TVC Operator Set." }, - "leaves": { + "name": { + "type": "string", + "description": "Name of this TVC Operator Set." + }, + "organizationId": { + "type": "string", + "description": "Unique Identifier of the Organization for this TVC Operator Set" + }, + "operators": { "type": "array", "items": { - "$ref": "#/components/schemas/SparkTransferLeaf" + "$ref": "#/components/schemas/TvcOperator" }, - "description": "Leaves being transferred." + "description": "List of TVC Operators in this set" }, "threshold": { "type": "integer", "format": "int64", - "description": "Feldman VSS threshold for reconstructing the per-leaf tweak scalar." + "description": "Threshold number of operators required for quorum." }, - "operatorRecipients": { - "type": "array", - "items": { - "$ref": "#/components/schemas/SparkOperatorRecipient" - }, - "description": "Operators that will receive Feldman shares of the per-leaf tweak. Order must match the operators' numeric IDs in the Spark operator config - share index is the 1-based position in this list." + "createdAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" }, - "receiverPublicKey": { - "type": "string", - "description": "Recipient's identity pubkey (hex-encoded compressed secp256k1 point). Each leaf's new_priv is ECIES-encrypted to this key and embedded in the per-operator package for claim-time delivery." + "updatedAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" } }, "required": [ - "transferId", - "leaves", + "id", + "name", + "organizationId", + "operators", "threshold", - "operatorRecipients", - "receiverPublicKey" + "createdAt", + "updatedAt" ] }, - "StampLoginIntent": { + "TvcOperatorSetParams": { "type": "object", "properties": { - "publicKey": { + "name": { "type": "string", - "description": "Client-side public key generated by the user, which will be conditionally added to org data based on the passkey stamp associated with this request" + "description": "Short description for this new operator set" }, - "expirationSeconds": { - "type": "string", - "description": "Expiration window (in seconds) indicating how long the Session is valid for. If not provided, a default of 15 minutes will be used.", - "nullable": true + "newOperators": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TvcOperatorParams" + }, + "description": "Operators to create as part of this new operator set" }, - "invalidateExisting": { - "type": "boolean", - "description": "Invalidate all other previously generated Login API keys", - "nullable": true + "existingOperatorIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Existing operators to use as part of this new operator set" }, - "sessionProfileId": { - "type": "string", - "description": "Optional session profile ID to specify which Session Profile to use for this login. If not provided, the default read/write session will be used.", - "nullable": true + "threshold": { + "type": "integer", + "format": "int64", + "description": "The threshold of operators needed to reach consensus in this new Operator Set" } }, - "required": [ - "publicKey" - ] + "required": ["name", "threshold"] }, - "StampLoginRequest": { + "TxError": { "type": "object", "properties": { - "type": { + "message": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_STAMP_LOGIN" - ] + "description": "Human-readable error message describing what went wrong." }, - "timestampMs": { - "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + "revertChain": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RevertChainEntry" + }, + "description": "Chain of revert errors from nested contract calls, ordered from outermost to innermost." }, - "organizationId": { - "type": "string", - "description": "Unique identifier for a given Organization." + "solana": { + "$ref": "#/components/schemas/SolanaFailureDetails" }, - "parameters": { - "$ref": "#/components/schemas/StampLoginIntent" + "eth": { + "$ref": "#/components/schemas/EthFailureDetails" + } + } + }, + "UnknownRevertError": { + "type": "object", + "properties": { + "selector": { + "type": "string", + "description": "The 4-byte error selector, if available.", + "nullable": true }, - "generateAppProofs": { - "type": "boolean", + "data": { + "type": "string", + "description": "The raw error data, hex-encoded.", "nullable": true } - }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + } }, - "StampLoginResult": { + "UpdateAllowedOriginsIntent": { "type": "object", "properties": { - "session": { - "type": "string", - "description": "Signed JWT containing an expiry, public key, session type, user id, and organization id" + "allowedOrigins": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Additional origins requests are allowed from besides Turnkey origins" } }, - "required": [ - "session" - ] + "required": ["allowedOrigins"] }, - "Status": { + "UpdateAllowedOriginsResult": { + "type": "object" + }, + "UpdateAuthProxyConfigIntent": { "type": "object", "properties": { - "code": { + "allowedOrigins": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Updated list of allowed origins for CORS." + }, + "allowedAuthMethods": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Updated list of allowed proxy authentication methods." + }, + "sendFromEmailAddress": { + "type": "string", + "description": "Custom 'from' address for auth-related emails.", + "nullable": true + }, + "replyToEmailAddress": { + "type": "string", + "description": "Custom reply-to address for auth-related emails.", + "nullable": true + }, + "emailAuthTemplateId": { + "type": "string", + "description": "Template ID for email-auth messages.", + "nullable": true + }, + "otpTemplateId": { + "type": "string", + "description": "Template ID for OTP SMS messages.", + "nullable": true + }, + "emailCustomizationParams": { + "$ref": "#/components/schemas/EmailCustomizationParams" + }, + "smsCustomizationParams": { + "$ref": "#/components/schemas/SmsCustomizationParams" + }, + "walletKitSettings": { + "$ref": "#/components/schemas/WalletKitSettingsParams" + }, + "otpExpirationSeconds": { "type": "integer", - "format": "int32" + "format": "int32", + "description": "OTP code lifetime in seconds.", + "nullable": true }, - "message": { - "type": "string" + "verificationTokenExpirationSeconds": { + "type": "integer", + "format": "int32", + "description": "Verification-token lifetime in seconds.", + "nullable": true }, - "details": { + "sessionExpirationSeconds": { + "type": "integer", + "format": "int32", + "description": "Session lifetime in seconds.", + "nullable": true + }, + "otpAlphanumeric": { + "type": "boolean", + "description": "Enable alphanumeric OTP codes.", + "nullable": true + }, + "otpLength": { + "type": "integer", + "format": "int32", + "description": "Desired OTP code length (6–9).", + "nullable": true + }, + "sendFromEmailSenderName": { + "type": "string", + "description": "Custom 'from' email sender for auth-related emails.", + "nullable": true + }, + "verificationTokenRequiredForGetAccountPii": { + "type": "boolean", + "description": "Verification token required for get account with PII (email/phone number). Default false.", + "nullable": true + }, + "socialLinkingClientIds": { "type": "array", "items": { - "$ref": "#/components/schemas/Any" - } + "type": "string" + }, + "description": "Whitelisted OAuth client IDs for social account linking. When a user authenticates via a social provider with an email matching an existing account, the accounts will be linked if the client ID is in this list and the issuer is considered a trusted provider." } } }, - "TagType": { - "type": "string", - "enum": [ - "TAG_TYPE_USER", - "TAG_TYPE_PRIVATE_KEY" - ] + "UpdateAuthProxyConfigResult": { + "type": "object", + "properties": { + "configId": { + "type": "string", + "description": "Unique identifier for a given User. (representing the turnkey signer user id)" + } + } }, - "TokenUsage": { + "UpdateFiatOnRampCredentialIntent": { "type": "object", "properties": { - "type": { - "$ref": "#/components/schemas/UsageType" + "fiatOnrampCredentialId": { + "type": "string", + "description": "The ID of the fiat on-ramp credential to update" }, - "tokenId": { + "onrampProvider": { + "$ref": "#/components/schemas/FiatOnRampProvider" + }, + "projectId": { "type": "string", - "description": "Unique identifier for the verification token" + "description": "Project ID for the on-ramp provider. Some providers, like Coinbase, require this additional identifier.", + "nullable": true }, - "signup": { - "$ref": "#/components/schemas/SignupUsage" + "publishableApiKey": { + "type": "string", + "description": "Publishable API key for the on-ramp provider" }, - "login": { - "$ref": "#/components/schemas/LoginUsage" + "encryptedSecretApiKey": { + "type": "string", + "description": "Secret API key for the on-ramp provider encrypted to our on-ramp encryption public key" }, - "signupV2": { - "$ref": "#/components/schemas/SignupUsageV2" + "encryptedPrivateApiKey": { + "type": "string", + "description": "Private API key for the on-ramp provider encrypted to our on-ramp encryption public key. Some providers, like Coinbase, require this additional key.", + "nullable": true } }, "required": [ - "type", - "tokenId" - ] - }, - "TransactionType": { - "type": "string", - "enum": [ - "TRANSACTION_TYPE_ETHEREUM", - "TRANSACTION_TYPE_SOLANA", - "TRANSACTION_TYPE_TRON", - "TRANSACTION_TYPE_BITCOIN", - "TRANSACTION_TYPE_TEMPO" - ] - }, - "TransportEncryptionSuite": { - "type": "string", - "enum": [ - "TRANSPORT_ENCRYPTION_SUITE_ENCLAVE_ENCRYPT_V1" + "fiatOnrampCredentialId", + "onrampProvider", + "publishableApiKey", + "encryptedSecretApiKey" ] }, - "TvcApp": { + "UpdateFiatOnRampCredentialRequest": { "type": "object", "properties": { - "id": { - "type": "string", - "description": "Unique Identifier for this TVC App." - }, - "organizationId": { + "type": { "type": "string", - "description": "Unique Identifier of the Organization for this TVC App" + "enum": ["ACTIVITY_TYPE_UPDATE_FIAT_ON_RAMP_CREDENTIAL"] }, - "name": { + "timestampMs": { "type": "string", - "description": "Name for this TVC App." + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, - "quorumPublicKey": { + "organizationId": { "type": "string", - "description": "Public key for the Quorum Key associated with this TVC App" - }, - "manifestSet": { - "$ref": "#/components/schemas/TvcOperatorSet" + "description": "Unique identifier for a given Organization." }, - "shareSet": { - "$ref": "#/components/schemas/TvcOperatorSet" + "parameters": { + "$ref": "#/components/schemas/UpdateFiatOnRampCredentialIntent" }, - "enableEgress": { + "generateAppProofs": { "type": "boolean", - "description": "Whether or not this TVC App has network egress enabled." - }, - "createdAt": { - "$ref": "#/components/schemas/external.data.v1.Timestamp" - }, - "updatedAt": { - "$ref": "#/components/schemas/external.data.v1.Timestamp" - }, - "liveDeploymentId": { - "type": "string", - "description": "The deployment currently designated to receive traffic. Null if no deployment for this app is deployed.", "nullable": true - }, - "publicDomain": { + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "UpdateFiatOnRampCredentialResult": { + "type": "object", + "properties": { + "fiatOnRampCredentialId": { "type": "string", - "description": "The public domain for ingress to this TVC App (in the format \"app-.turnkey.cloud\")." - }, - "enableDebugModeDeployments": { - "type": "boolean", - "description": "Whether this app permits debug-mode deployments. Set at app creation via CreateTvcAppIntent.enable_debug_mode_deployments and never updated thereafter. Debug-mode deployments expose logs and emit zero'd attestation PCRs, so remote attestation cannot succeed. The app's quorum key is therefore considered permanently insecure once enabled — a new app with a fresh quorum key must be created to return to a secure posture." + "description": "Unique identifier of the Fiat On-Ramp credential that was updated" } }, - "required": [ - "id", - "organizationId", - "name", - "quorumPublicKey", - "manifestSet", - "shareSet", - "enableEgress", - "createdAt", - "updatedAt", - "publicDomain", - "enableDebugModeDeployments" - ] + "required": ["fiatOnRampCredentialId"] }, - "TvcContainerSpec": { + "UpdateMfaPolicyIntent": { "type": "object", "properties": { - "containerUrl": { + "userId": { "type": "string", - "description": "The URL for this container image." + "description": "The ID of the User to update the MFA Policy for." }, - "path": { + "mfaPolicyId": { "type": "string", - "description": "The path (in-container) to the executable binary." + "description": "Unique identifier for a given MFA Policy." }, - "args": { + "mfaPolicyName": { + "type": "string", + "description": "Human-readable name for a Policy.", + "nullable": true + }, + "condition": { + "type": "string", + "description": "A condition expression that evaluates to true or false, determining when this MFA policy applies.", + "nullable": true + }, + "requiredAuthenticationMethods": { "type": "array", "items": { - "type": "string" + "$ref": "#/components/schemas/RequiredAuthenticationMethodParams" }, - "description": "The arguments to pass to the executable." - }, - "hasPullSecret": { - "type": "boolean", - "description": "Whether or not this container requires a pull secret to access." - }, - "healthCheckType": { - "$ref": "#/components/schemas/TvcHealthCheckType" + "description": "An ordered list of authentication requirements. Each requirement must be satisfied sequentially to complete MFA." }, - "healthCheckPort": { + "order": { "type": "integer", "format": "int64", - "description": "The port to use for health checks against this executable." + "description": "The order in which this MFA policy is evaluated, starting from 0, relative to other MFA policies. Lower order values are evaluated first.", + "nullable": true }, - "publicIngressPort": { - "type": "integer", - "format": "int64", - "description": "The port to use for public ingress to this executable." + "notes": { + "type": "string", + "description": "Notes for an MFA Policy.", + "nullable": true } }, - "required": [ - "containerUrl", - "path", - "args", - "hasPullSecret", - "healthCheckType", - "healthCheckPort", - "publicIngressPort" - ] + "required": ["userId", "mfaPolicyId"] }, - "TvcDeployment": { + "UpdateMfaPolicyRequest": { "type": "object", "properties": { - "id": { + "type": { "type": "string", - "description": "Unique Identifier for this TVC Deployment." + "enum": ["ACTIVITY_TYPE_UPDATE_MFA_POLICY"] }, - "organizationId": { + "timestampMs": { "type": "string", - "description": "Unique Identifier of the Organization for this TVC Deployment" + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, - "appId": { + "organizationId": { "type": "string", - "description": "Unique Identifier of the TVC App for this deployment" - }, - "manifestSet": { - "$ref": "#/components/schemas/TvcOperatorSet" - }, - "shareSet": { - "$ref": "#/components/schemas/TvcOperatorSet" - }, - "manifest": { - "$ref": "#/components/schemas/TvcManifest" - }, - "manifestApprovals": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TvcOperatorApproval" - }, - "description": "List of operator approvals for this manifest" + "description": "Unique identifier for a given Organization." }, - "qosVersion": { + "parameters": { + "$ref": "#/components/schemas/UpdateMfaPolicyIntent" + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "UpdateMfaPolicyResult": { + "type": "object", + "properties": { + "mfaPolicyId": { "type": "string", - "description": "QOS Version used for this deployment" - }, - "pivotContainer": { - "$ref": "#/components/schemas/TvcContainerSpec" - }, - "createdAt": { - "$ref": "#/components/schemas/external.data.v1.Timestamp" - }, - "updatedAt": { - "$ref": "#/components/schemas/external.data.v1.Timestamp" - }, - "delete": { - "type": "boolean", - "description": "Whether or not the user wants this deployment deleted from the cluster." + "description": "Unique identifier for a given MFA Policy." } }, - "required": [ - "id", - "organizationId", - "appId", - "manifestSet", - "shareSet", - "manifest", - "manifestApprovals", - "qosVersion", - "pivotContainer", - "createdAt", - "updatedAt", - "delete" - ] + "required": ["mfaPolicyId"] }, - "TvcDeploymentDebugLogEntry": { + "UpdateOauth2CredentialIntent": { "type": "object", "properties": { - "line": { - "$ref": "#/components/schemas/LogLine" + "oauth2CredentialId": { + "type": "string", + "description": "The ID of the OAuth 2.0 credential to update" + }, + "provider": { + "$ref": "#/components/schemas/Oauth2Provider" + }, + "clientId": { + "type": "string", + "description": "The Client ID issued by the OAuth 2.0 provider" }, - "replicaLabel": { + "encryptedClientSecret": { "type": "string", - "description": "Public replica label that produced this log line, for example 'replica 2/3'." + "description": "The client secret issued by the OAuth 2.0 provider encrypted to the TLS Fetcher quorum key" } }, "required": [ - "line", - "replicaLabel" - ] - }, - "TvcHealthCheckType": { - "type": "string", - "enum": [ - "TVC_HEALTH_CHECK_TYPE_HTTP", - "TVC_HEALTH_CHECK_TYPE_GRPC" + "oauth2CredentialId", + "provider", + "clientId", + "encryptedClientSecret" ] }, - "TvcManifest": { + "UpdateOauth2CredentialRequest": { "type": "object", "properties": { - "id": { + "type": { "type": "string", - "description": "Unique Identifier for this TVC Manifest." + "enum": ["ACTIVITY_TYPE_UPDATE_OAUTH2_CREDENTIAL"] }, - "manifest": { + "timestampMs": { "type": "string", - "format": "byte", - "description": "The manifest content (raw UTF-8 JSON bytes)" + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, - "createdAt": { - "$ref": "#/components/schemas/external.data.v1.Timestamp" + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." }, - "updatedAt": { - "$ref": "#/components/schemas/external.data.v1.Timestamp" + "parameters": { + "$ref": "#/components/schemas/UpdateOauth2CredentialIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true } }, - "required": [ - "id", - "manifest", - "createdAt", - "updatedAt" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "TvcManifestApproval": { + "UpdateOauth2CredentialResult": { "type": "object", "properties": { - "operatorId": { - "type": "string", - "description": "Unique identifier of the operator providing this approval" - }, - "signature": { + "oauth2CredentialId": { "type": "string", - "description": "Signature from the operator approving the manifest" + "description": "Unique identifier of the OAuth 2.0 credential that was updated" } }, - "required": [ - "operatorId", - "signature" - ] + "required": ["oauth2CredentialId"] }, - "TvcOperator": { + "UpdateOrganizationNameIntent": { "type": "object", "properties": { - "id": { - "type": "string", - "description": "Unique Identifier for this TVC Operator." - }, - "name": { - "type": "string", - "description": "Name of this TVC Operator." - }, - "publicKey": { + "organizationName": { "type": "string", - "description": "Public key for this TVC Operator." - }, - "createdAt": { - "$ref": "#/components/schemas/external.data.v1.Timestamp" - }, - "updatedAt": { - "$ref": "#/components/schemas/external.data.v1.Timestamp" + "description": "New name for the Organization." } }, - "required": [ - "id", - "name", - "publicKey", - "createdAt", - "updatedAt" - ] + "required": ["organizationName"] }, - "TvcOperatorApproval": { + "UpdateOrganizationNameRequest": { "type": "object", "properties": { - "id": { + "type": { "type": "string", - "description": "Unique ID for this approval" + "enum": ["ACTIVITY_TYPE_UPDATE_ORGANIZATION_NAME"] }, - "manifestId": { + "timestampMs": { "type": "string", - "description": "Unique Identifier of the TVC Manifest being approved" - }, - "operator": { - "$ref": "#/components/schemas/TvcOperator" + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, - "approval": { + "organizationId": { "type": "string", - "format": "byte", - "description": "Signature of the operator over the deployment manifest" + "description": "Unique identifier for a given Organization." }, - "createdAt": { - "$ref": "#/components/schemas/external.data.v1.Timestamp" + "parameters": { + "$ref": "#/components/schemas/UpdateOrganizationNameIntent" }, - "updatedAt": { - "$ref": "#/components/schemas/external.data.v1.Timestamp" + "generateAppProofs": { + "type": "boolean", + "nullable": true } }, - "required": [ - "id", - "manifestId", - "operator", - "approval", - "createdAt", - "updatedAt" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "TvcOperatorParams": { + "UpdateOrganizationNameResult": { "type": "object", "properties": { - "name": { + "organizationId": { "type": "string", - "description": "The name for this new operator" + "description": "Unique identifier for the Organization." }, - "publicKey": { + "organizationName": { "type": "string", - "description": "Public key for this operator" + "description": "The updated organization name." } }, - "required": [ - "name", - "publicKey" - ] + "required": ["organizationId", "organizationName"] }, - "TvcOperatorSet": { + "UpdatePolicyIntent": { "type": "object", "properties": { - "id": { - "type": "string", - "description": "Unique Identifier for this TVC Operator Set." - }, - "name": { + "policyId": { "type": "string", - "description": "Name of this TVC Operator Set." + "description": "Unique identifier for a given Policy." }, - "organizationId": { + "policyName": { "type": "string", - "description": "Unique Identifier of the Organization for this TVC Operator Set" + "description": "Human-readable name for a Policy.", + "nullable": true }, - "operators": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TvcOperator" - }, - "description": "List of TVC Operators in this set" + "policyEffect": { + "$ref": "#/components/schemas/Effect" }, - "threshold": { - "type": "integer", - "format": "int64", - "description": "Threshold number of operators required for quorum." + "policyCondition": { + "type": "string", + "description": "The condition expression that triggers the Effect (optional).", + "nullable": true }, - "createdAt": { - "$ref": "#/components/schemas/external.data.v1.Timestamp" + "policyConsensus": { + "type": "string", + "description": "The consensus expression that triggers the Effect (optional).", + "nullable": true }, - "updatedAt": { - "$ref": "#/components/schemas/external.data.v1.Timestamp" + "policyNotes": { + "type": "string", + "description": "Accompanying notes for a Policy (optional).", + "nullable": true } }, - "required": [ - "id", - "name", - "organizationId", - "operators", - "threshold", - "createdAt", - "updatedAt" - ] + "required": ["policyId"] }, - "TvcOperatorSetParams": { + "UpdatePolicyIntentV2": { "type": "object", "properties": { - "name": { + "policyId": { "type": "string", - "description": "Short description for this new operator set" + "description": "Unique identifier for a given Policy." }, - "newOperators": { - "type": "array", - "items": { - "$ref": "#/components/schemas/TvcOperatorParams" - }, - "description": "Operators to create as part of this new operator set" + "policyName": { + "type": "string", + "description": "Human-readable name for a Policy.", + "nullable": true }, - "existingOperatorIds": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Existing operators to use as part of this new operator set" + "policyEffect": { + "$ref": "#/components/schemas/Effect" }, - "threshold": { - "type": "integer", - "format": "int64", - "description": "The threshold of operators needed to reach consensus in this new Operator Set" + "policyCondition": { + "type": "string", + "description": "The condition expression that triggers the Effect (optional).", + "nullable": true + }, + "policyConsensus": { + "type": "string", + "description": "The consensus expression that triggers the Effect (optional).", + "nullable": true + }, + "policyNotes": { + "type": "string", + "description": "Accompanying notes for a Policy (optional).", + "nullable": true } }, - "required": [ - "name", - "threshold" - ] + "required": ["policyId"] }, - "TxError": { + "UpdatePolicyRequest": { "type": "object", "properties": { - "message": { + "type": { "type": "string", - "description": "Human-readable error message describing what went wrong." + "enum": ["ACTIVITY_TYPE_UPDATE_POLICY_V2"] }, - "revertChain": { - "type": "array", - "items": { - "$ref": "#/components/schemas/RevertChainEntry" - }, - "description": "Chain of revert errors from nested contract calls, ordered from outermost to innermost." + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, - "solana": { - "$ref": "#/components/schemas/SolanaFailureDetails" + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." }, - "eth": { - "$ref": "#/components/schemas/EthFailureDetails" + "parameters": { + "$ref": "#/components/schemas/UpdatePolicyIntentV2" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true } - } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "UnknownRevertError": { + "UpdatePolicyResult": { "type": "object", "properties": { - "selector": { - "type": "string", - "description": "The 4-byte error selector, if available.", - "nullable": true - }, - "data": { + "policyId": { "type": "string", - "description": "The raw error data, hex-encoded.", - "nullable": true + "description": "Unique identifier for a given Policy." } - } + }, + "required": ["policyId"] }, - "UpdateAllowedOriginsIntent": { + "UpdatePolicyResultV2": { "type": "object", "properties": { - "allowedOrigins": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Additional origins requests are allowed from besides Turnkey origins" + "policyId": { + "type": "string", + "description": "Unique identifier for a given Policy." } }, - "required": [ - "allowedOrigins" - ] - }, - "UpdateAllowedOriginsResult": { - "type": "object" + "required": ["policyId"] }, - "UpdateAuthProxyConfigIntent": { + "UpdatePrivateKeyTagIntent": { "type": "object", "properties": { - "allowedOrigins": { + "privateKeyTagId": { + "type": "string", + "description": "Unique identifier for a given Private Key Tag." + }, + "newPrivateKeyTagName": { + "type": "string", + "description": "The new, human-readable name for the tag with the given ID.", + "nullable": true + }, + "addPrivateKeyIds": { "type": "array", "items": { "type": "string" }, - "description": "Updated list of allowed origins for CORS." + "description": "A list of Private Keys IDs to add this tag to." }, - "allowedAuthMethods": { + "removePrivateKeyIds": { "type": "array", "items": { "type": "string" }, - "description": "Updated list of allowed proxy authentication methods." - }, - "sendFromEmailAddress": { - "type": "string", - "description": "Custom 'from' address for auth-related emails.", - "nullable": true - }, - "replyToEmailAddress": { - "type": "string", - "description": "Custom reply-to address for auth-related emails.", - "nullable": true - }, - "emailAuthTemplateId": { + "description": "A list of Private Key IDs to remove this tag from." + } + }, + "required": [ + "privateKeyTagId", + "addPrivateKeyIds", + "removePrivateKeyIds" + ] + }, + "UpdatePrivateKeyTagRequest": { + "type": "object", + "properties": { + "type": { "type": "string", - "description": "Template ID for email-auth messages.", - "nullable": true + "enum": ["ACTIVITY_TYPE_UPDATE_PRIVATE_KEY_TAG"] }, - "otpTemplateId": { + "timestampMs": { "type": "string", - "description": "Template ID for OTP SMS messages.", - "nullable": true - }, - "emailCustomizationParams": { - "$ref": "#/components/schemas/EmailCustomizationParams" - }, - "smsCustomizationParams": { - "$ref": "#/components/schemas/SmsCustomizationParams" - }, - "walletKitSettings": { - "$ref": "#/components/schemas/WalletKitSettingsParams" - }, - "otpExpirationSeconds": { - "type": "integer", - "format": "int32", - "description": "OTP code lifetime in seconds.", - "nullable": true - }, - "verificationTokenExpirationSeconds": { - "type": "integer", - "format": "int32", - "description": "Verification-token lifetime in seconds.", - "nullable": true - }, - "sessionExpirationSeconds": { - "type": "integer", - "format": "int32", - "description": "Session lifetime in seconds.", - "nullable": true - }, - "otpAlphanumeric": { - "type": "boolean", - "description": "Enable alphanumeric OTP codes.", - "nullable": true - }, - "otpLength": { - "type": "integer", - "format": "int32", - "description": "Desired OTP code length (6–9).", - "nullable": true + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, - "sendFromEmailSenderName": { + "organizationId": { "type": "string", - "description": "Custom 'from' email sender for auth-related emails.", - "nullable": true - }, - "verificationTokenRequiredForGetAccountPii": { - "type": "boolean", - "description": "Verification token required for get account with PII (email/phone number). Default false.", - "nullable": true + "description": "Unique identifier for a given Organization." }, - "socialLinkingClientIds": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Whitelisted OAuth client IDs for social account linking. When a user authenticates via a social provider with an email matching an existing account, the accounts will be linked if the client ID is in this list and the issuer is considered a trusted provider." + "parameters": { + "$ref": "#/components/schemas/UpdatePrivateKeyTagIntent" }, - "captchaEnabled": { + "generateAppProofs": { "type": "boolean", - "description": "Whether captcha verification is required on sign up & otp init.", "nullable": true } - } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "UpdateAuthProxyConfigResult": { + "UpdatePrivateKeyTagResult": { "type": "object", "properties": { - "configId": { + "privateKeyTagId": { "type": "string", - "description": "Unique identifier for a given User. (representing the turnkey signer user id)" + "description": "Unique identifier for a given Private Key Tag." } - } + }, + "required": ["privateKeyTagId"] }, - "UpdateFiatOnRampCredentialIntent": { + "UpdateRootQuorumIntent": { "type": "object", "properties": { - "fiatOnrampCredentialId": { - "type": "string", - "description": "The ID of the fiat on-ramp credential to update" - }, - "onrampProvider": { - "$ref": "#/components/schemas/FiatOnRampProvider" - }, - "projectId": { - "type": "string", - "description": "Project ID for the on-ramp provider. Some providers, like Coinbase, require this additional identifier.", - "nullable": true - }, - "publishableApiKey": { - "type": "string", - "description": "Publishable API key for the on-ramp provider" - }, - "encryptedSecretApiKey": { - "type": "string", - "description": "Secret API key for the on-ramp provider encrypted to our on-ramp encryption public key" + "threshold": { + "type": "integer", + "format": "int32", + "description": "The threshold of unique approvals to reach quorum." }, - "encryptedPrivateApiKey": { - "type": "string", - "description": "Private API key for the on-ramp provider encrypted to our on-ramp encryption public key. Some providers, like Coinbase, require this additional key.", - "nullable": true + "userIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The unique identifiers of users who comprise the quorum set." } }, - "required": [ - "fiatOnrampCredentialId", - "onrampProvider", - "publishableApiKey", - "encryptedSecretApiKey" - ] + "required": ["threshold", "userIds"] }, - "UpdateFiatOnRampCredentialRequest": { + "UpdateRootQuorumRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_UPDATE_FIAT_ON_RAMP_CREDENTIAL" - ] + "enum": ["ACTIVITY_TYPE_UPDATE_ROOT_QUORUM"] }, "timestampMs": { "type": "string", @@ -19557,85 +16933,81 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/components/schemas/UpdateFiatOnRampCredentialIntent" + "$ref": "#/components/schemas/UpdateRootQuorumIntent" }, "generateAppProofs": { "type": "boolean", "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "UpdateFiatOnRampCredentialResult": { + "UpdateRootQuorumResult": { + "type": "object" + }, + "UpdateTvcAppLiveDeploymentIntent": { "type": "object", "properties": { - "fiatOnRampCredentialId": { + "deploymentId": { "type": "string", - "description": "Unique identifier of the Fiat On-Ramp credential that was updated" + "description": "The unique identifier of the TVC deployment to set as live for the app." } }, - "required": [ - "fiatOnRampCredentialId" - ] + "required": ["deploymentId"] }, - "UpdateMfaPolicyIntent": { + "UpdateTvcAppLiveDeploymentRequest": { "type": "object", "properties": { - "userId": { - "type": "string", - "description": "The ID of the User to update the MFA Policy for." - }, - "mfaPolicyId": { + "type": { "type": "string", - "description": "Unique identifier for a given MFA Policy." + "enum": ["ACTIVITY_TYPE_UPDATE_TVC_APP_LIVE_DEPLOYMENT"] }, - "mfaPolicyName": { + "timestampMs": { "type": "string", - "description": "Human-readable name for a Policy.", - "nullable": true + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, - "condition": { + "organizationId": { "type": "string", - "description": "A condition expression that evaluates to true or false, determining when this MFA policy applies.", - "nullable": true + "description": "Unique identifier for a given Organization." }, - "requiredAuthenticationMethods": { - "type": "array", - "items": { - "$ref": "#/components/schemas/RequiredAuthenticationMethodParams" - }, - "description": "An ordered list of authentication requirements. Each requirement must be satisfied sequentially to complete MFA." + "parameters": { + "$ref": "#/components/schemas/UpdateTvcAppLiveDeploymentIntent" }, - "order": { - "type": "integer", - "format": "int64", - "description": "The order in which this MFA policy is evaluated, starting from 0, relative to other MFA policies. Lower order values are evaluated first.", + "generateAppProofs": { + "type": "boolean", "nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "UpdateTvcAppLiveDeploymentResult": { + "type": "object" + }, + "UpdateUserEmailIntent": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "Unique identifier for a given User." + }, + "userEmail": { + "type": "string", + "description": "The user's email address. Setting this to an empty string will remove the user's email." }, - "notes": { + "verificationToken": { "type": "string", - "description": "Notes for an MFA Policy.", + "description": "Signed JWT containing a unique id, expiry, verification type, contact", "nullable": true } }, - "required": [ - "userId", - "mfaPolicyId" - ] + "required": ["userId", "userEmail"] }, - "UpdateMfaPolicyRequest": { + "UpdateUserEmailRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_UPDATE_MFA_POLICY" - ] + "enum": ["ACTIVITY_TYPE_UPDATE_USER_EMAIL"] }, "timestampMs": { "type": "string", @@ -19646,62 +17018,77 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/components/schemas/UpdateMfaPolicyIntent" + "$ref": "#/components/schemas/UpdateUserEmailIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "UpdateMfaPolicyResult": { + "UpdateUserEmailResult": { "type": "object", "properties": { - "mfaPolicyId": { + "userId": { "type": "string", - "description": "Unique identifier for a given MFA Policy." + "description": "Unique identifier of the User whose email was updated." } }, - "required": [ - "mfaPolicyId" - ] + "required": ["userId"] }, - "UpdateOauth2CredentialIntent": { + "UpdateUserIntent": { "type": "object", "properties": { - "oauth2CredentialId": { + "userId": { "type": "string", - "description": "The ID of the OAuth 2.0 credential to update" + "description": "Unique identifier for a given User." }, - "provider": { - "$ref": "#/components/schemas/Oauth2Provider" + "userName": { + "type": "string", + "description": "Human-readable name for a User.", + "nullable": true }, - "clientId": { + "userEmail": { "type": "string", - "description": "The Client ID issued by the OAuth 2.0 provider" + "description": "The user's email address.", + "nullable": true }, - "encryptedClientSecret": { + "userTagIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "An updated list of User Tags to apply to this User. This field, if not needed, should be an empty array in your request body." + }, + "userPhoneNumber": { "type": "string", - "description": "The client secret issued by the OAuth 2.0 provider encrypted to the TLS Fetcher quorum key" + "description": "The user's phone number in E.164 format e.g. +13214567890", + "nullable": true } }, - "required": [ - "oauth2CredentialId", - "provider", - "clientId", - "encryptedClientSecret" - ] + "required": ["userId"] }, - "UpdateOauth2CredentialRequest": { + "UpdateUserNameIntent": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "Unique identifier for a given User." + }, + "userName": { + "type": "string", + "description": "Human-readable name for a User." + } + }, + "required": ["userId", "userName"] + }, + "UpdateUserNameRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_UPDATE_OAUTH2_CREDENTIAL" - ] + "enum": ["ACTIVITY_TYPE_UPDATE_USER_NAME"] }, "timestampMs": { "type": "string", @@ -19712,52 +17099,50 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/components/schemas/UpdateOauth2CredentialIntent" + "$ref": "#/components/schemas/UpdateUserNameIntent" }, "generateAppProofs": { "type": "boolean", "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "UpdateOauth2CredentialResult": { + "UpdateUserNameResult": { "type": "object", "properties": { - "oauth2CredentialId": { + "userId": { "type": "string", - "description": "Unique identifier of the OAuth 2.0 credential that was updated" + "description": "Unique identifier of the User whose name was updated." } }, - "required": [ - "oauth2CredentialId" - ] + "required": ["userId"] }, - "UpdateOrganizationNameIntent": { + "UpdateUserPhoneNumberIntent": { "type": "object", "properties": { - "organizationName": { + "userId": { "type": "string", - "description": "New name for the Organization." + "description": "Unique identifier for a given User." + }, + "userPhoneNumber": { + "type": "string", + "description": "The user's phone number in E.164 format e.g. +13214567890. Setting this to an empty string will remove the user's phone number." + }, + "verificationToken": { + "type": "string", + "description": "Signed JWT containing a unique id, expiry, verification type, contact", + "nullable": true } }, - "required": [ - "organizationName" - ] + "required": ["userId", "userPhoneNumber"] }, - "UpdateOrganizationNameRequest": { + "UpdateUserPhoneNumberRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_UPDATE_ORGANIZATION_NAME" - ] + "enum": ["ACTIVITY_TYPE_UPDATE_USER_PHONE_NUMBER"] }, "timestampMs": { "type": "string", @@ -19768,115 +17153,95 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/components/schemas/UpdateOrganizationNameIntent" + "$ref": "#/components/schemas/UpdateUserPhoneNumberIntent" }, "generateAppProofs": { "type": "boolean", "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "UpdateOrganizationNameResult": { + "UpdateUserPhoneNumberResult": { "type": "object", "properties": { - "organizationId": { - "type": "string", - "description": "Unique identifier for the Organization." - }, - "organizationName": { + "userId": { "type": "string", - "description": "The updated organization name." + "description": "Unique identifier of the User whose phone number was updated." } }, - "required": [ - "organizationId", - "organizationName" - ] + "required": ["userId"] }, - "UpdatePolicyIntent": { + "UpdateUserRequest": { "type": "object", "properties": { - "policyId": { + "type": { "type": "string", - "description": "Unique identifier for a given Policy." + "enum": ["ACTIVITY_TYPE_UPDATE_USER"] }, - "policyName": { + "timestampMs": { "type": "string", - "description": "Human-readable name for a Policy.", - "nullable": true - }, - "policyEffect": { - "$ref": "#/components/schemas/Effect" + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, - "policyCondition": { + "organizationId": { "type": "string", - "description": "The condition expression that triggers the Effect (optional).", - "nullable": true + "description": "Unique identifier for a given Organization." }, - "policyConsensus": { - "type": "string", - "description": "The consensus expression that triggers the Effect (optional).", - "nullable": true + "parameters": { + "$ref": "#/components/schemas/UpdateUserIntent" }, - "policyNotes": { - "type": "string", - "description": "Accompanying notes for a Policy (optional).", + "generateAppProofs": { + "type": "boolean", "nullable": true } }, - "required": [ - "policyId" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "UpdatePolicyIntentV2": { + "UpdateUserResult": { "type": "object", "properties": { - "policyId": { + "userId": { "type": "string", - "description": "Unique identifier for a given Policy." - }, - "policyName": { + "description": "A User ID." + } + }, + "required": ["userId"] + }, + "UpdateUserTagIntent": { + "type": "object", + "properties": { + "userTagId": { "type": "string", - "description": "Human-readable name for a Policy.", - "nullable": true - }, - "policyEffect": { - "$ref": "#/components/schemas/Effect" + "description": "Unique identifier for a given User Tag." }, - "policyCondition": { + "newUserTagName": { "type": "string", - "description": "The condition expression that triggers the Effect (optional).", + "description": "The new, human-readable name for the tag with the given ID.", "nullable": true }, - "policyConsensus": { - "type": "string", - "description": "The consensus expression that triggers the Effect (optional).", - "nullable": true + "addUserIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User IDs to add this tag to." }, - "policyNotes": { - "type": "string", - "description": "Accompanying notes for a Policy (optional).", - "nullable": true + "removeUserIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User IDs to remove this tag from." } }, - "required": [ - "policyId" - ] + "required": ["userTagId", "addUserIds", "removeUserIds"] }, - "UpdatePolicyRequest": { + "UpdateUserTagRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_UPDATE_POLICY_V2" - ] + "enum": ["ACTIVITY_TYPE_UPDATE_USER_TAG"] }, "timestampMs": { "type": "string", @@ -19887,85 +17252,45 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/components/schemas/UpdatePolicyIntentV2" + "$ref": "#/components/schemas/UpdateUserTagIntent" }, "generateAppProofs": { "type": "boolean", "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] - }, - "UpdatePolicyResult": { - "type": "object", - "properties": { - "policyId": { - "type": "string", - "description": "Unique identifier for a given Policy." - } - }, - "required": [ - "policyId" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "UpdatePolicyResultV2": { + "UpdateUserTagResult": { "type": "object", "properties": { - "policyId": { + "userTagId": { "type": "string", - "description": "Unique identifier for a given Policy." + "description": "Unique identifier for a given User Tag." } }, - "required": [ - "policyId" - ] + "required": ["userTagId"] }, - "UpdatePrivateKeyTagIntent": { + "UpdateWalletIntent": { "type": "object", "properties": { - "privateKeyTagId": { - "type": "string", - "description": "Unique identifier for a given Private Key Tag." - }, - "newPrivateKeyTagName": { + "walletId": { "type": "string", - "description": "The new, human-readable name for the tag with the given ID.", - "nullable": true - }, - "addPrivateKeyIds": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of Private Keys IDs to add this tag to." + "description": "Unique identifier for a given Wallet." }, - "removePrivateKeyIds": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of Private Key IDs to remove this tag from." + "walletName": { + "type": "string", + "description": "Human-readable name for a Wallet." } }, - "required": [ - "privateKeyTagId", - "addPrivateKeyIds", - "removePrivateKeyIds" - ] + "required": ["walletId"] }, - "UpdatePrivateKeyTagRequest": { + "UpdateWalletRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_UPDATE_PRIVATE_KEY_TAG" - ] + "enum": ["ACTIVITY_TYPE_UPDATE_WALLET"] }, "timestampMs": { "type": "string", @@ -19976,61 +17301,56 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/components/schemas/UpdatePrivateKeyTagIntent" + "$ref": "#/components/schemas/UpdateWalletIntent" }, "generateAppProofs": { "type": "boolean", "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "UpdatePrivateKeyTagResult": { + "UpdateWalletResult": { "type": "object", "properties": { - "privateKeyTagId": { + "walletId": { "type": "string", - "description": "Unique identifier for a given Private Key Tag." + "description": "A Wallet ID." } }, - "required": [ - "privateKeyTagId" - ] + "required": ["walletId"] }, - "UpdateRootQuorumIntent": { + "UpdateWebhookEndpointIntent": { "type": "object", "properties": { - "threshold": { - "type": "integer", - "format": "int32", - "description": "The threshold of unique approvals to reach quorum." + "endpointId": { + "type": "string", + "description": "Unique identifier of the webhook endpoint to update." }, - "userIds": { - "type": "array", - "items": { - "type": "string" - }, - "description": "The unique identifiers of users who comprise the quorum set." + "url": { + "type": "string", + "description": "Updated destination URL for webhook delivery.", + "nullable": true + }, + "name": { + "type": "string", + "description": "Updated human-readable name for this webhook endpoint.", + "nullable": true + }, + "isActive": { + "type": "boolean", + "description": "Whether this webhook endpoint is active.", + "nullable": true } }, - "required": [ - "threshold", - "userIds" - ] + "required": ["endpointId"] }, - "UpdateRootQuorumRequest": { + "UpdateWebhookEndpointRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_UPDATE_ROOT_QUORUM" - ] + "enum": ["ACTIVITY_TYPE_UPDATE_WEBHOOK_ENDPOINT"] }, "timestampMs": { "type": "string", @@ -20041,382 +17361,412 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/components/schemas/UpdateRootQuorumIntent" + "$ref": "#/components/schemas/UpdateWebhookEndpointIntent" }, "generateAppProofs": { "type": "boolean", "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "UpdateRootQuorumResult": { - "type": "object" - }, - "UpdateTvcAppLiveDeploymentIntent": { + "UpdateWebhookEndpointResult": { "type": "object", "properties": { - "deploymentId": { + "endpointId": { "type": "string", - "description": "The unique identifier of the TVC deployment to set as live for the app." + "description": "Unique identifier of the updated webhook endpoint." + }, + "webhookEndpoint": { + "$ref": "#/components/schemas/WebhookEndpointData" } }, - "required": [ - "deploymentId" - ] + "required": ["endpointId", "webhookEndpoint"] }, - "UpdateTvcAppLiveDeploymentRequest": { + "UpsertGasUsageConfigIntent": { "type": "object", "properties": { - "type": { + "orgWindowLimitUsd": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_UPDATE_TVC_APP_LIVE_DEPLOYMENT" - ] + "description": "Gas sponsorship USD limit for the billing organization window." }, - "timestampMs": { + "subOrgWindowLimitUsd": { "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + "description": "Gas sponsorship USD limit for sub-organizations under the billing organization." }, - "organizationId": { + "windowDurationMinutes": { "type": "string", - "description": "Unique identifier for a given Organization." - }, - "parameters": { - "$ref": "#/components/schemas/UpdateTvcAppLiveDeploymentIntent" + "description": "Rolling sponsorship window duration, expressed in minutes. This value can't exceed 30 days (43200 minutes)." }, - "generateAppProofs": { + "enabled": { "type": "boolean", + "description": "Whether gas sponsorship is enabled for the organization.", "nullable": true + }, + "solanaConfig": { + "$ref": "#/components/schemas/SolanaConfig" } }, "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" + "orgWindowLimitUsd", + "subOrgWindowLimitUsd", + "windowDurationMinutes" ] }, - "UpdateTvcAppLiveDeploymentResult": { - "type": "object" + "UpsertGasUsageConfigResult": { + "type": "object", + "properties": { + "gasUsageConfigId": { + "type": "string", + "description": "Unique identifier for the gas usage configuration that was created or updated." + } + }, + "required": ["gasUsageConfigId"] }, - "UpdateUserEmailIntent": { + "UsageType": { + "type": "string", + "enum": ["USAGE_TYPE_SIGNUP", "USAGE_TYPE_LOGIN"] + }, + "User": { "type": "object", "properties": { "userId": { "type": "string", "description": "Unique identifier for a given User." }, + "userName": { + "type": "string", + "description": "Human-readable name for a User." + }, "userEmail": { "type": "string", - "description": "The user's email address. Setting this to an empty string will remove the user's email." + "description": "The user's email address.", + "nullable": true }, - "verificationToken": { + "userPhoneNumber": { "type": "string", - "description": "Signed JWT containing a unique id, expiry, verification type, contact", + "description": "The user's phone number in E.164 format e.g. +13214567890", "nullable": true + }, + "authenticators": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Authenticator" + }, + "description": "A list of Authenticator parameters." + }, + "apiKeys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ApiKey" + }, + "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." + }, + "userTags": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User Tag IDs." + }, + "oauthProviders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OauthProvider" + }, + "description": "A list of Oauth Providers." + }, + "createdAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + }, + "mfaPolicies": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MfaPolicy" + }, + "description": "A list of MFA Policies that define multi-factor authentication requirements for this user." } }, "required": [ "userId", - "userEmail" + "userName", + "authenticators", + "apiKeys", + "userTags", + "oauthProviders", + "createdAt", + "updatedAt", + "mfaPolicies" ] }, - "UpdateUserEmailRequest": { + "UserParams": { "type": "object", "properties": { - "type": { + "userName": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_UPDATE_USER_EMAIL" - ] + "description": "Human-readable name for a User." }, - "timestampMs": { + "userEmail": { "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + "description": "The user's email address.", + "nullable": true }, - "organizationId": { - "type": "string", - "description": "Unique identifier for a given Organization." + "accessType": { + "$ref": "#/components/schemas/AccessType" }, - "parameters": { - "$ref": "#/components/schemas/UpdateUserEmailIntent" + "apiKeys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ApiKeyParams" + }, + "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." }, - "generateAppProofs": { - "type": "boolean", - "nullable": true - } - }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] - }, - "UpdateUserEmailResult": { - "type": "object", - "properties": { - "userId": { - "type": "string", - "description": "Unique identifier of the User whose email was updated." + "authenticators": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AuthenticatorParams" + }, + "description": "A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body." + }, + "userTags": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User Tag IDs. This field, if not needed, should be an empty array in your request body." } }, "required": [ - "userId" + "userName", + "accessType", + "apiKeys", + "authenticators", + "userTags" ] }, - "UpdateUserIntent": { + "UserParamsV2": { "type": "object", "properties": { - "userId": { - "type": "string", - "description": "Unique identifier for a given User." - }, "userName": { "type": "string", - "description": "Human-readable name for a User.", - "nullable": true + "description": "Human-readable name for a User." }, "userEmail": { "type": "string", "description": "The user's email address.", "nullable": true }, - "userTagIds": { + "apiKeys": { "type": "array", "items": { - "type": "string" + "$ref": "#/components/schemas/ApiKeyParams" }, - "description": "An updated list of User Tags to apply to this User. This field, if not needed, should be an empty array in your request body." + "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." }, - "userPhoneNumber": { - "type": "string", - "description": "The user's phone number in E.164 format e.g. +13214567890", - "nullable": true + "authenticators": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AuthenticatorParamsV2" + }, + "description": "A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body." + }, + "userTags": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User Tag IDs. This field, if not needed, should be an empty array in your request body." } }, - "required": [ - "userId" - ] + "required": ["userName", "apiKeys", "authenticators", "userTags"] }, - "UpdateUserNameIntent": { + "UserParamsV3": { "type": "object", "properties": { - "userId": { - "type": "string", - "description": "Unique identifier for a given User." - }, "userName": { "type": "string", "description": "Human-readable name for a User." - } - }, - "required": [ - "userId", - "userName" - ] - }, - "UpdateUserNameRequest": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "ACTIVITY_TYPE_UPDATE_USER_NAME" - ] }, - "timestampMs": { + "userEmail": { "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + "description": "The user's email address.", + "nullable": true }, - "organizationId": { + "userPhoneNumber": { "type": "string", - "description": "Unique identifier for a given Organization." + "description": "The user's phone number in E.164 format e.g. +13214567890", + "nullable": true }, - "parameters": { - "$ref": "#/components/schemas/UpdateUserNameIntent" + "apiKeys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ApiKeyParamsV2" + }, + "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." }, - "generateAppProofs": { - "type": "boolean", - "nullable": true - } - }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] - }, - "UpdateUserNameResult": { - "type": "object", - "properties": { - "userId": { - "type": "string", - "description": "Unique identifier of the User whose name was updated." + "authenticators": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AuthenticatorParamsV2" + }, + "description": "A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body." + }, + "oauthProviders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OauthProviderParams" + }, + "description": "A list of Oauth providers. This field, if not needed, should be an empty array in your request body." + }, + "userTags": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User Tag IDs. This field, if not needed, should be an empty array in your request body." } }, "required": [ - "userId" + "userName", + "apiKeys", + "authenticators", + "oauthProviders", + "userTags" ] }, - "UpdateUserPhoneNumberIntent": { + "UserParamsV4": { "type": "object", "properties": { - "userId": { + "userName": { "type": "string", - "description": "Unique identifier for a given User." + "description": "Human-readable name for a User." }, - "userPhoneNumber": { + "userEmail": { "type": "string", - "description": "The user's phone number in E.164 format e.g. +13214567890. Setting this to an empty string will remove the user's phone number." + "description": "The user's email address.", + "nullable": true }, - "verificationToken": { + "userPhoneNumber": { "type": "string", - "description": "Signed JWT containing a unique id, expiry, verification type, contact", + "description": "The user's phone number in E.164 format e.g. +13214567890", "nullable": true + }, + "apiKeys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ApiKeyParamsV2" + }, + "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." + }, + "authenticators": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AuthenticatorParamsV2" + }, + "description": "A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body." + }, + "oauthProviders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OauthProviderParamsV2" + }, + "description": "A list of Oauth providers. This field, if not needed, should be an empty array in your request body." + }, + "userTags": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User Tag IDs. This field, if not needed, should be an empty array in your request body." } }, "required": [ - "userId", - "userPhoneNumber" + "userName", + "apiKeys", + "authenticators", + "oauthProviders", + "userTags" ] }, - "UpdateUserPhoneNumberRequest": { + "ValidateTvcImageRequest": { "type": "object", "properties": { - "type": { - "type": "string", - "enum": [ - "ACTIVITY_TYPE_UPDATE_USER_PHONE_NUMBER" - ] - }, - "timestampMs": { - "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." - }, "organizationId": { "type": "string", "description": "Unique identifier for a given Organization." }, - "parameters": { - "$ref": "#/components/schemas/UpdateUserPhoneNumberIntent" + "pivotContainerImageUrl": { + "type": "string", + "description": "URL of the container image." }, - "generateAppProofs": { - "type": "boolean", + "pivotContainerEncryptedPullSecret": { + "type": "string", + "description": "HPKE-encrypted pull secret for private images.", "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["organizationId", "pivotContainerImageUrl"] }, - "UpdateUserPhoneNumberResult": { + "ValidateTvcImageResponse": { "type": "object", "properties": { - "userId": { - "type": "string", - "description": "Unique identifier of the User whose phone number was updated." + "resolvedImageDigest": { + "type": "string" } - }, - "required": [ - "userId" - ] + } }, - "UpdateUserRequest": { + "VerifyOtpIntent": { "type": "object", "properties": { - "type": { + "otpId": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_UPDATE_USER" - ] + "description": "ID representing the result of an init OTP activity." }, - "timestampMs": { + "otpCode": { "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + "description": "OTP sent out to a user's contact (email or SMS)" }, - "organizationId": { + "expirationSeconds": { "type": "string", - "description": "Unique identifier for a given Organization." - }, - "parameters": { - "$ref": "#/components/schemas/UpdateUserIntent" + "description": "Expiration window (in seconds) indicating how long the verification token is valid for. If not provided, a default of 1 hour will be used. Maximum value is 86400 seconds (24 hours)", + "nullable": true }, - "generateAppProofs": { - "type": "boolean", + "publicKey": { + "type": "string", + "description": "Client-side public key generated by the user, which will be added to the JWT response and verified in subsequent requests via a client proof signature", "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["otpId", "otpCode"] }, - "UpdateUserResult": { + "VerifyOtpIntentV2": { "type": "object", "properties": { - "userId": { + "otpId": { "type": "string", - "description": "A User ID." - } - }, - "required": [ - "userId" - ] - }, - "UpdateUserTagIntent": { - "type": "object", - "properties": { - "userTagId": { + "description": "UUID representing an OTP flow. A new UUID is created for each init OTP activity." + }, + "encryptedOtpBundle": { "type": "string", - "description": "Unique identifier for a given User Tag." + "description": "Encrypted bundle containing the OTP code and a client-generated public key. Turnkey's secure enclaves will decrypt this bundle, verify the OTP code, and issue a new Verification Token. Encrypted using the target encryption key provided in the INIT_OTP activity result." }, - "newUserTagName": { + "expirationSeconds": { "type": "string", - "description": "The new, human-readable name for the tag with the given ID.", + "description": "Expiration window (in seconds) indicating how long the verification token is valid for. If not provided, a default of 1 hour will be used. Maximum value is 86400 seconds (24 hours)", "nullable": true - }, - "addUserIds": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of User IDs to add this tag to." - }, - "removeUserIds": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of User IDs to remove this tag from." } }, - "required": [ - "userTagId", - "addUserIds", - "removeUserIds" - ] + "required": ["otpId", "encryptedOtpBundle"] }, - "UpdateUserTagRequest": { + "VerifyOtpRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_UPDATE_USER_TAG" - ] + "enum": ["ACTIVITY_TYPE_VERIFY_OTP_V2"] }, "timestampMs": { "type": "string", @@ -20427,62 +17777,81 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/components/schemas/UpdateUserTagIntent" + "$ref": "#/components/schemas/VerifyOtpIntentV2" }, "generateAppProofs": { "type": "boolean", "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "UpdateUserTagResult": { + "VerifyOtpResult": { "type": "object", "properties": { - "userTagId": { + "verificationToken": { "type": "string", - "description": "Unique identifier for a given User Tag." + "description": "Signed JWT containing a unique id, expiry, verification type, contact. Verification status of a user is updated when the token is consumed (in OTP_LOGIN requests)" } }, - "required": [ - "userTagId" - ] + "required": ["verificationToken"] }, - "UpdateWalletAccountNameIntent": { + "Vote": { "type": "object", "properties": { - "walletAccountId": { + "id": { "type": "string", - "description": "Unique identifier for a given Wallet Account." + "description": "Unique identifier for a given Vote object." }, - "name": { + "userId": { "type": "string", - "description": "Human-readable name for this Wallet Account." - } - }, - "required": [ - "walletAccountId", - "name" - ] - }, - "UpdateWalletAccountNameResult": { - "type": "object", - "properties": { - "walletAccountId": { + "description": "Unique identifier for a given User." + }, + "user": { + "$ref": "#/components/schemas/User" + }, + "activityId": { "type": "string", - "description": "Unique identifier for a given Wallet Account." + "description": "Unique identifier for a given Activity object." + }, + "selection": { + "type": "string", + "enum": ["VOTE_SELECTION_APPROVED", "VOTE_SELECTION_REJECTED"] + }, + "message": { + "type": "string", + "description": "The raw message being signed within a Vote." + }, + "publicKey": { + "type": "string", + "description": "The public component of a cryptographic key pair used to sign messages and transactions." + }, + "signature": { + "type": "string", + "description": "The signature applied to a particular vote." + }, + "scheme": { + "type": "string", + "description": "Method used to produce a signature." + }, + "createdAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" } }, "required": [ - "walletAccountId" + "id", + "userId", + "user", + "activityId", + "selection", + "message", + "publicKey", + "signature", + "scheme", + "createdAt" ] }, - "UpdateWalletIntent": { + "Wallet": { "type": "object", "properties": { "walletId": { @@ -20492,576 +17861,626 @@ "walletName": { "type": "string", "description": "Human-readable name for a Wallet." + }, + "createdAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + }, + "exported": { + "type": "boolean", + "description": "True when a given Wallet is exported, false otherwise." + }, + "imported": { + "type": "boolean", + "description": "True when a given Wallet is imported, false otherwise." } }, "required": [ - "walletId" + "walletId", + "walletName", + "createdAt", + "updatedAt", + "exported", + "imported" ] }, - "UpdateWalletRequest": { + "WalletAccount": { "type": "object", "properties": { - "type": { + "walletAccountId": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_UPDATE_WALLET" - ] + "description": "Unique identifier for a given Wallet Account." }, - "timestampMs": { + "organizationId": { "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + "description": "The Organization the Account belongs to." }, - "organizationId": { + "walletId": { "type": "string", - "description": "Unique identifier for a given Organization." + "description": "The Wallet the Account was derived from." }, - "parameters": { - "$ref": "#/components/schemas/UpdateWalletIntent" + "curve": { + "$ref": "#/components/schemas/Curve" }, - "generateAppProofs": { - "type": "boolean", + "pathFormat": { + "$ref": "#/components/schemas/PathFormat" + }, + "path": { + "type": "string", + "description": "Path used to generate the Account." + }, + "addressFormat": { + "$ref": "#/components/schemas/AddressFormat" + }, + "address": { + "type": "string", + "description": "Address generated using the Wallet seed and Account parameters." + }, + "createdAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + }, + "publicKey": { + "type": "string", + "description": "The public component of this wallet account's underlying cryptographic key pair.", "nullable": true - } - }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] - }, - "UpdateWalletResult": { - "type": "object", - "properties": { - "walletId": { + }, + "walletDetails": { + "$ref": "#/components/schemas/Wallet" + }, + "name": { "type": "string", - "description": "A Wallet ID." + "description": "Human-readable name for this Wallet Account, unique within the organization.", + "nullable": true } }, "required": [ - "walletId" + "walletAccountId", + "organizationId", + "walletId", + "curve", + "pathFormat", + "path", + "addressFormat", + "address", + "createdAt", + "updatedAt" ] }, - "UpdateWebhookEndpointIntent": { + "WalletAccountParams": { "type": "object", "properties": { - "endpointId": { - "type": "string", - "description": "Unique identifier of the webhook endpoint to update." + "curve": { + "$ref": "#/components/schemas/Curve" }, - "url": { + "pathFormat": { + "$ref": "#/components/schemas/PathFormat" + }, + "path": { "type": "string", - "description": "Updated destination URL for webhook delivery.", - "nullable": true + "description": "Path used to generate a wallet Account." + }, + "addressFormat": { + "$ref": "#/components/schemas/AddressFormat" }, "name": { "type": "string", - "description": "Updated human-readable name for this webhook endpoint.", - "nullable": true - }, - "isActive": { - "type": "boolean", - "description": "Whether this webhook endpoint is active.", + "description": "Optional human-readable name for the account.", "nullable": true } }, - "required": [ - "endpointId" - ] + "required": ["curve", "pathFormat", "path", "addressFormat"] }, - "UpdateWebhookEndpointRequest": { + "WalletKitSettingsParams": { "type": "object", "properties": { - "type": { - "type": "string", - "enum": [ - "ACTIVITY_TYPE_UPDATE_WEBHOOK_ENDPOINT" - ] + "enabledSocialProviders": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of enabled social login providers (e.g., 'apple', 'google', 'facebook')", + "title": "Enabled Social Providers" }, - "timestampMs": { - "type": "string", - "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + "oauthClientIds": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Mapping of social login providers to their Oauth client IDs.", + "title": "Oauth Client IDs" }, - "organizationId": { + "oauthRedirectUrl": { "type": "string", - "description": "Unique identifier for a given Organization." + "description": "Oauth redirect URL to be used for social login flows.", + "title": "Oauth Redirect URL" + } + } + }, + "WalletParams": { + "type": "object", + "properties": { + "walletName": { + "type": "string", + "description": "Human-readable name for a Wallet." }, - "parameters": { - "$ref": "#/components/schemas/UpdateWebhookEndpointIntent" + "accounts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/WalletAccountParams" + }, + "description": "A list of wallet Accounts. This field, if not needed, should be an empty array in your request body." }, - "generateAppProofs": { - "type": "boolean", + "mnemonicLength": { + "type": "integer", + "format": "int32", + "description": "Length of mnemonic to generate the Wallet seed. Defaults to 12. Accepted values: 12, 15, 18, 21, 24.", "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["walletName", "accounts"] }, - "UpdateWebhookEndpointResult": { + "WalletResult": { "type": "object", "properties": { - "endpointId": { - "type": "string", - "description": "Unique identifier of the updated webhook endpoint." + "walletId": { + "type": "string" }, - "webhookEndpoint": { - "$ref": "#/components/schemas/WebhookEndpointData" + "addresses": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of account addresses." } }, - "required": [ - "endpointId", - "webhookEndpoint" - ] + "required": ["walletId", "addresses"] }, - "UpsertGasUsageConfigIntent": { + "WebAuthnStamp": { "type": "object", "properties": { - "orgWindowLimitUsd": { + "credentialId": { "type": "string", - "description": "Gas sponsorship USD limit for the billing organization window." + "description": "A base64 url encoded Unique identifier for a given credential." }, - "subOrgWindowLimitUsd": { + "clientDataJson": { "type": "string", - "description": "Gas sponsorship USD limit for sub-organizations under the billing organization." + "description": "A base64 encoded payload containing metadata about the signing context and the challenge." }, - "windowDurationMinutes": { + "authenticatorData": { "type": "string", - "description": "Rolling sponsorship window duration, expressed in minutes. This value can't exceed 30 days (43200 minutes)." - }, - "enabled": { - "type": "boolean", - "description": "Whether gas sponsorship is enabled for the organization.", - "nullable": true + "description": "A base64 encoded payload containing metadata about the authenticator." }, - "solanaConfig": { - "$ref": "#/components/schemas/SolanaConfig" - } - }, - "required": [ - "orgWindowLimitUsd", - "subOrgWindowLimitUsd", - "windowDurationMinutes" - ] - }, - "UpsertGasUsageConfigResult": { - "type": "object", - "properties": { - "gasUsageConfigId": { + "signature": { "type": "string", - "description": "Unique identifier for the gas usage configuration that was created or updated." + "description": "The base64 url encoded signature bytes contained within the WebAuthn assertion response." } }, "required": [ - "gasUsageConfigId" + "credentialId", + "clientDataJson", + "authenticatorData", + "signature" ] }, - "UpsertSwapConfigIntent": { + "WebhookEndpointData": { "type": "object", "properties": { - "feeReceiverWalletAddress": { + "endpointId": { "type": "string", - "nullable": true + "description": "Unique identifier of the webhook endpoint." }, - "feeBps": { + "organizationId": { "type": "string", - "description": "Client fee in basis points applied to swaps; used for all pairs unless stable_fee_bps is set.", - "nullable": true + "description": "Unique identifier for a given Organization." }, - "provider": { + "url": { "type": "string", - "nullable": true + "description": "The destination URL for webhook delivery." }, - "stableFeeBps": { + "name": { "type": "string", - "description": "Optional override applied when both swap assets are stablecoins; falls back to fee_bps when unset.", - "nullable": true + "description": "Human-readable name for this webhook endpoint." + }, + "isActive": { + "type": "boolean", + "description": "Whether this webhook endpoint is active." + }, + "subscriptions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/WebhookSubscriptionParams" + }, + "description": "Current subscriptions attached to this endpoint." } - } + }, + "required": ["endpointId", "organizationId", "url", "name", "isActive"] }, - "UpsertSwapConfigResult": { + "WebhookSubscriptionParams": { "type": "object", "properties": { - "feeReceiverWalletAddress": { + "eventType": { "type": "string", - "nullable": true + "description": "The event type to subscribe to (for example, ACTIVITY_UPDATES, BALANCE_CONFIRMED_UPDATES, or BALANCE_FINALIZED_UPDATES)." }, - "feeBps": { + "filtersJson": { "type": "string", + "description": "JSON-encoded filter criteria for this subscription.", "nullable": true }, - "stableFeeBps": { - "type": "string", + "isActive": { + "type": "boolean", + "description": "Whether this subscription is active.", "nullable": true } - } + }, + "required": ["eventType"] }, - "UsageType": { - "type": "string", - "enum": [ - "USAGE_TYPE_SIGNUP", - "USAGE_TYPE_LOGIN" - ] + "activity.v1.Address": { + "type": "object", + "properties": { + "format": { + "$ref": "#/components/schemas/AddressFormat" + }, + "address": { + "type": "string" + } + } }, - "User": { + "activity.v1.PolicyEvaluation": { "type": "object", "properties": { - "userId": { + "id": { "type": "string", - "description": "Unique identifier for a given User." + "description": "Unique identifier for a given policy evaluation." }, - "userName": { + "activityId": { "type": "string", - "description": "Human-readable name for a User." + "description": "Unique identifier for a given Activity." }, - "userEmail": { + "organizationId": { "type": "string", - "description": "The user's email address.", - "nullable": true + "description": "Unique identifier for the Organization the Activity belongs to." }, - "userPhoneNumber": { + "voteId": { "type": "string", - "description": "The user's phone number in E.164 format e.g. +13214567890", - "nullable": true - }, - "authenticators": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Authenticator" - }, - "description": "A list of Authenticator parameters." - }, - "apiKeys": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ApiKey" - }, - "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." - }, - "userTags": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of User Tag IDs." + "description": "Unique identifier for the Vote associated with this policy evaluation." }, - "oauthProviders": { + "policyEvaluations": { "type": "array", "items": { - "$ref": "#/components/schemas/OauthProvider" + "$ref": "#/components/schemas/common.v1.PolicyEvaluation" }, - "description": "A list of Oauth Providers." + "description": "Detailed evaluation result for each Policy that was run." }, "createdAt": { "$ref": "#/components/schemas/external.data.v1.Timestamp" - }, - "updatedAt": { - "$ref": "#/components/schemas/external.data.v1.Timestamp" - }, - "mfaPolicies": { - "type": "array", - "items": { - "$ref": "#/components/schemas/MfaPolicy" - }, - "description": "A list of MFA Policies that define multi-factor authentication requirements for this user." } }, "required": [ - "userId", - "userName", - "authenticators", - "apiKeys", - "userTags", - "oauthProviders", - "createdAt", - "updatedAt", - "mfaPolicies" + "id", + "activityId", + "organizationId", + "voteId", + "policyEvaluations", + "createdAt" ] }, - "UserParams": { + "common.v1.PolicyEvaluation": { "type": "object", "properties": { - "userName": { + "policyId": { + "type": "string" + }, + "outcome": { + "$ref": "#/components/schemas/Outcome" + } + } + }, + "data.v1.Address": { + "type": "object", + "properties": { + "format": { + "$ref": "#/components/schemas/AddressFormat" + }, + "address": { + "type": "string" + } + } + }, + "data.v1.SignatureScheme": { + "type": "string", + "enum": ["SIGNATURE_SCHEME_EPHEMERAL_KEY_P256"] + }, + "data.v1.SmartContractInterface": { + "type": "object", + "properties": { + "organizationId": { "type": "string", - "description": "Human-readable name for a User." + "description": "The Organization the Smart Contract Interface belongs to." }, - "userEmail": { + "smartContractInterfaceId": { "type": "string", - "description": "The user's email address.", - "nullable": true + "description": "Unique identifier for a given Smart Contract Interface (ABI or IDL)." }, - "accessType": { - "$ref": "#/components/schemas/AccessType" + "smartContractAddress": { + "type": "string", + "description": "The address corresponding to the Smart Contract or Program." }, - "apiKeys": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ApiKeyParams" - }, - "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." + "smartContractInterface": { + "type": "string", + "description": "The JSON corresponding to the Smart Contract Interface (ABI or IDL)." }, - "authenticators": { - "type": "array", - "items": { - "$ref": "#/components/schemas/AuthenticatorParams" - }, - "description": "A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body." + "type": { + "type": "string", + "description": "The type corresponding to the Smart Contract Interface (either ETHEREUM or SOLANA)." }, - "userTags": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of User Tag IDs. This field, if not needed, should be an empty array in your request body." - } - }, - "required": [ - "userName", - "accessType", - "apiKeys", - "authenticators", - "userTags" + "label": { + "type": "string", + "description": "The label corresponding to the Smart Contract Interface (either ETHEREUM or SOLANA)." + }, + "notes": { + "type": "string", + "description": "The notes corresponding to the Smart Contract Interface (either ETHEREUM or SOLANA)." + }, + "createdAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + } + }, + "required": [ + "organizationId", + "smartContractInterfaceId", + "smartContractAddress", + "smartContractInterface", + "type", + "label", + "notes", + "createdAt", + "updatedAt" ] }, - "UserParamsV2": { + "external.data.v1.Credential": { "type": "object", "properties": { - "userName": { + "publicKey": { "type": "string", - "description": "Human-readable name for a User." + "description": "The public component of a cryptographic key pair used to sign messages and transactions." }, - "userEmail": { + "type": { + "$ref": "#/components/schemas/CredentialType" + }, + "sessionProfileId": { "type": "string", - "description": "The user's email address.", + "description": "The session profile associated with this credential, if any. This field is only applicable for credentials of type CREDENTIAL_TYPE_LOGIN.", "nullable": true + } + }, + "required": ["publicKey", "type"] + }, + "external.data.v1.Quorum": { + "type": "object", + "properties": { + "threshold": { + "type": "integer", + "format": "int32", + "description": "Count of unique approvals required to meet quorum." }, - "apiKeys": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ApiKeyParams" - }, - "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." - }, - "authenticators": { - "type": "array", - "items": { - "$ref": "#/components/schemas/AuthenticatorParamsV2" - }, - "description": "A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body." - }, - "userTags": { + "userIds": { "type": "array", "items": { "type": "string" }, - "description": "A list of User Tag IDs. This field, if not needed, should be an empty array in your request body." + "description": "Unique identifiers of quorum set members." } }, - "required": [ - "userName", - "apiKeys", - "authenticators", - "userTags" - ] + "required": ["threshold", "userIds"] }, - "UserParamsV3": { + "external.data.v1.Timestamp": { "type": "object", "properties": { - "userName": { - "type": "string", - "description": "Human-readable name for a User." + "seconds": { + "type": "string" }, - "userEmail": { + "nanos": { + "type": "string" + } + }, + "required": ["seconds", "nanos"] + }, + "v1.Tag": { + "type": "object", + "properties": { + "tagId": { "type": "string", - "description": "The user's email address.", - "nullable": true + "description": "Unique identifier for a given Tag." }, - "userPhoneNumber": { + "tagName": { "type": "string", - "description": "The user's phone number in E.164 format e.g. +13214567890", - "nullable": true - }, - "apiKeys": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ApiKeyParamsV2" - }, - "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." + "description": "Human-readable name for a Tag." }, - "authenticators": { - "type": "array", - "items": { - "$ref": "#/components/schemas/AuthenticatorParamsV2" - }, - "description": "A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body." + "tagType": { + "$ref": "#/components/schemas/TagType" }, - "oauthProviders": { - "type": "array", - "items": { - "$ref": "#/components/schemas/OauthProviderParams" - }, - "description": "A list of Oauth providers. This field, if not needed, should be an empty array in your request body." + "createdAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" }, - "userTags": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of User Tag IDs. This field, if not needed, should be an empty array in your request body." + "updatedAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" } }, - "required": [ - "userName", - "apiKeys", - "authenticators", - "oauthProviders", - "userTags" - ] + "required": ["tagId", "tagName", "tagType", "createdAt", "updatedAt"] }, - "UserParamsV4": { + "ClaimEarnFeesIntent": { "type": "object", "properties": { - "userName": { + "wrapperAddress": { "type": "string", - "description": "Human-readable name for a User." - }, - "userEmail": { + "description": "Address of the deployed Earn wrapper to claim fees for. Must be one of the org's deployed wrappers." + } + }, + "required": ["wrapperAddress"] + }, + "ClaimEarnFeesRequest": { + "type": "object", + "properties": { + "type": { "type": "string", - "description": "The user's email address.", - "nullable": true + "enum": ["ACTIVITY_TYPE_CLAIM_EARN_FEES"] }, - "userPhoneNumber": { + "timestampMs": { "type": "string", - "description": "The user's phone number in E.164 format e.g. +13214567890", - "nullable": true - }, - "apiKeys": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ApiKeyParamsV2" - }, - "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, - "authenticators": { - "type": "array", - "items": { - "$ref": "#/components/schemas/AuthenticatorParamsV2" - }, - "description": "A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body." + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." }, - "oauthProviders": { - "type": "array", - "items": { - "$ref": "#/components/schemas/OauthProviderParamsV2" - }, - "description": "A list of Oauth providers. This field, if not needed, should be an empty array in your request body." + "parameters": { + "$ref": "#/components/schemas/ClaimEarnFeesIntent" }, - "userTags": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of User Tag IDs. This field, if not needed, should be an empty array in your request body." + "generateAppProofs": { + "type": "boolean", + "nullable": true } }, - "required": [ - "userName", - "apiKeys", - "authenticators", - "oauthProviders", - "userTags" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "ValidateTvcImageRequest": { + "ClaimEarnFeesResult": { "type": "object", "properties": { - "organizationId": { + "claimRequestId": { "type": "string", - "description": "Unique identifier for a given Organization." + "description": "Identifier to poll claim status and tx hash via GetClaimEarnFeesStatus." + } + }, + "required": ["claimRequestId"] + }, + "EarnDeployWrapperIntent": { + "type": "object", + "properties": { + "vaultAddress": { + "type": "string", + "description": "Address of the underlying yield vault to wrap (from the ListEarnVaults catalog)." }, - "pivotContainerImageUrl": { + "chainCaip2": { "type": "string", - "description": "URL of the container image." + "enum": [ + "eip155:1", + "eip155:8453", + "eip155:42161", + "eip155:137", + "eip155:56", + "eip155:4217" + ], + "description": "CAIP-2 chain ID the vault lives on (e.g., 'eip155:8453' for Base)." }, - "pivotContainerEncryptedPullSecret": { + "clientFeeBps": { "type": "string", - "description": "HPKE-encrypted pull secret for private images.", - "nullable": true + "description": "Your performance fee on gross yield, in basis points (e.g., '2000' for 20%). Your fee plus Turnkey's fee cannot exceed 50% of yield." + }, + "clientFeeWallet": { + "type": "string", + "description": "The wallet address that receives the client's fee payouts on-chain. Must be a Turnkey-managed wallet address." } }, "required": [ - "organizationId", - "pivotContainerImageUrl" + "vaultAddress", + "chainCaip2", + "clientFeeBps", + "clientFeeWallet" ] }, - "ValidateTvcImageResponse": { + "EarnDeployWrapperRequest": { "type": "object", "properties": { - "resolvedImageDigest": { - "type": "string" + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_EARN_DEPLOY_WRAPPER"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/EarnDeployWrapperIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true } - } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "VerifyOtpIntent": { + "EarnDeployWrapperResult": { "type": "object", "properties": { - "otpId": { - "type": "string", - "description": "ID representing the result of an init OTP activity." - }, - "otpCode": { + "wrapperAddress": { "type": "string", - "description": "OTP sent out to a user's contact (email or SMS)" + "description": "Address of the deployed fee wrapper (the deposit target)." }, - "expirationSeconds": { + "splitterAddress": { "type": "string", - "description": "Expiration window (in seconds) indicating how long the verification token is valid for. If not provided, a default of 1 hour will be used. Maximum value is 86400 seconds (24 hours)", - "nullable": true + "description": "Address of the deployed fee splitter (PaymentSplitter for Morpho, RevenueSplitterOwner for Aave)." }, - "publicKey": { + "deployRequestId": { "type": "string", - "description": "Client-side public key generated by the user, which will be added to the JWT response and verified in subsequent requests via a client proof signature", - "nullable": true + "description": "Identifier to poll deploy status." } }, - "required": [ - "otpId", - "otpCode" - ] + "required": ["wrapperAddress", "splitterAddress", "deployRequestId"] }, - "VerifyOtpIntentV2": { + "EarnDepositIntent": { "type": "object", "properties": { - "otpId": { + "wrapperAddress": { "type": "string", - "description": "UUID representing an OTP flow. A new UUID is created for each init OTP activity." + "description": "Address of the deployed Earn wrapper to deposit into, from ListEarnVaults/ListEarnPositions. Must be one of the org's deployed wrappers." }, - "encryptedOtpBundle": { + "signWith": { "type": "string", - "description": "Encrypted bundle containing the OTP code and a client-generated public key. Turnkey's secure enclaves will decrypt this bundle, verify the OTP code, and issue a new Verification Token. Encrypted using the target encryption key provided in the INIT_OTP activity result." + "description": "A Wallet account address or Private Key address to deposit from and sign with. Must be an on-chain address; Private Key identifiers are not supported." }, - "expirationSeconds": { + "assets": { "type": "string", - "description": "Expiration window (in seconds) indicating how long the verification token is valid for. If not provided, a default of 1 hour will be used. Maximum value is 86400 seconds (24 hours)", + "description": "Amount of the underlying asset to deposit, in raw on-chain units (e.g., '1000000' for 1 USDC at 6 decimals)." + }, + "chainCaip2": { + "type": "string", + "enum": [ + "eip155:1", + "eip155:8453", + "eip155:42161", + "eip155:137", + "eip155:56", + "eip155:4217" + ], + "description": "CAIP-2 chain ID the vault lives on (e.g., 'eip155:8453' for Base)." + }, + "sponsor": { + "type": "boolean", + "description": "Whether to sponsor this transaction via Gas Station.", "nullable": true } }, - "required": [ - "otpId", - "encryptedOtpBundle" - ] + "required": ["wrapperAddress", "signWith", "assets", "chainCaip2"] }, - "VerifyOtpRequest": { + "EarnDepositRequest": { "type": "object", "properties": { "type": { "type": "string", - "enum": [ - "ACTIVITY_TYPE_VERIFY_OTP_V2" - ] + "enum": ["ACTIVITY_TYPE_EARN_DEPOSIT"] }, "timestampMs": { "type": "string", @@ -21072,591 +18491,546 @@ "description": "Unique identifier for a given Organization." }, "parameters": { - "$ref": "#/components/schemas/VerifyOtpIntentV2" + "$ref": "#/components/schemas/EarnDepositIntent" }, "generateAppProofs": { "type": "boolean", "nullable": true } }, - "required": [ - "type", - "timestampMs", - "organizationId", - "parameters" - ] + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "VerifyOtpResult": { + "EarnDepositResult": { "type": "object", "properties": { - "verificationToken": { + "depositRequestId": { "type": "string", - "description": "Signed JWT containing a unique id, expiry, verification type, contact. Verification status of a user is updated when the token is consumed (in OTP_LOGIN requests)" + "description": "Identifier to poll deposit status and tx hash via GetEarnDepositStatus." } }, - "required": [ - "verificationToken" - ] + "required": ["depositRequestId"] }, - "Vote": { + "EarnEnabledVault": { "type": "object", "properties": { - "id": { + "vaultAddress": { "type": "string", - "description": "Unique identifier for a given Vote object." + "description": "Address of the underlying yield vault." }, - "userId": { + "wrapperAddress": { "type": "string", - "description": "Unique identifier for a given User." + "description": "Address of the deployed fee wrapper (the deposit target)." }, - "user": { - "$ref": "#/components/schemas/User" + "provider": { + "$ref": "#/components/schemas/EarnProvider" }, - "activityId": { + "caip19": { "type": "string", - "description": "Unique identifier for a given Activity object." + "description": "CAIP-19 asset ID of the vault's underlying asset (e.g. 'eip155:8453/erc20:0x833589...'); the chain is encoded in the identifier." }, - "selection": { + "apyPct": { "type": "string", - "enum": [ - "VOTE_SELECTION_APPROVED", - "VOTE_SELECTION_REJECTED" - ] + "description": "Gross annual percentage yield, expressed as a decimal fraction (before Turnkey and client fees)." }, - "message": { + "totalDeposited": { "type": "string", - "description": "The raw message being signed within a Vote." + "description": "Total deposited through this wrapper (wrapper TVL), in raw on-chain units of the underlying asset." }, - "publicKey": { + "display": { + "$ref": "#/components/schemas/EarnValueDisplay" + }, + "netApyPct": { "type": "string", - "description": "The public component of a cryptographic key pair used to sign messages and transactions." + "description": "Annual percentage yield net of the Turnkey and client performance fees, expressed as a decimal fraction." }, - "signature": { + "clientFeeBps": { "type": "string", - "description": "The signature applied to a particular vote." + "description": "Client performance fee taken on yield, in basis points. Currently org-wide; moving to a per-vault setting." }, - "scheme": { + "depositsDisabled": { + "type": "boolean", + "description": "When true, deposits to this wrapper are rejected; withdrawals are unaffected. Toggled via EarnSetWrapperState." + }, + "name": { "type": "string", - "description": "Method used to produce a signature." + "description": "Human-readable vault name from the provider (e.g. 'Steakhouse Prime USDC' for Morpho; the reserve symbol for Aave)." }, - "createdAt": { - "$ref": "#/components/schemas/external.data.v1.Timestamp" + "curator": { + "type": "string", + "description": "Vault curator name(s), comma-separated when a vault has multiple. Empty for providers without curators (e.g. Aave)." + }, + "claimableClientFee": { + "type": "string", + "description": "The client's claimable performance fee (releasable now), in raw on-chain units of the underlying asset (the caip19 asset). Turnkey's fee is excluded. Only returned to the parent org; unset when a sub-org queries.", + "nullable": true + }, + "claimableClientFeeDisplay": { + "$ref": "#/components/schemas/EarnValueDisplay" } - }, - "required": [ - "id", - "userId", - "user", - "activityId", - "selection", - "message", - "publicKey", - "signature", - "scheme", - "createdAt" - ] + } }, - "Wallet": { + "EarnPosition": { "type": "object", "properties": { - "walletId": { + "vaultAddress": { "type": "string", - "description": "Unique identifier for a given Wallet." + "description": "Address of the underlying yield vault." }, - "walletName": { + "wrapperAddress": { "type": "string", - "description": "Human-readable name for a Wallet." + "description": "Address of the fee wrapper holding the position." }, - "createdAt": { - "$ref": "#/components/schemas/external.data.v1.Timestamp" + "provider": { + "$ref": "#/components/schemas/EarnProvider" }, - "updatedAt": { - "$ref": "#/components/schemas/external.data.v1.Timestamp" + "caip19": { + "type": "string", + "description": "CAIP-19 asset ID of the vault's underlying asset (e.g. 'eip155:8453/erc20:0x833589...'); the chain is encoded in the identifier." }, - "exported": { + "currentValue": { + "type": "string", + "description": "Current value of the position in the underlying asset, in raw on-chain units (already net of the wrapper fee)." + }, + "totalDeposited": { + "type": "string", + "description": "Lifetime total deposited into this position, in raw on-chain units." + }, + "totalWithdrawn": { + "type": "string", + "description": "Lifetime total withdrawn from this position, in raw on-chain units." + }, + "display": { + "$ref": "#/components/schemas/EarnPositionDisplay" + }, + "depositsDisabled": { "type": "boolean", - "description": "True when a given Wallet is exported, false otherwise." + "description": "When true, deposits to this wrapper are rejected; withdrawals are unaffected. Toggled via EarnSetWrapperState." + } + } + }, + "EarnPositionDisplay": { + "type": "object", + "properties": { + "currentValueUsd": { + "type": "string", + "description": "Current value in USD, for display only." }, - "imported": { + "totalDepositedUsd": { + "type": "string", + "description": "Total deposited in USD, for display only." + }, + "totalWithdrawnUsd": { + "type": "string", + "description": "Total withdrawn in USD, for display only." + }, + "currentValueCrypto": { + "type": "string", + "description": "Current value in the asset's own units, for display only." + }, + "totalDepositedCrypto": { + "type": "string", + "description": "Total deposited in the asset's own units, for display only." + }, + "totalWithdrawnCrypto": { + "type": "string", + "description": "Total withdrawn in the asset's own units, for display only." + } + } + }, + "EarnProvider": { + "type": "string", + "enum": ["EARN_PROVIDER_MORPHO", "EARN_PROVIDER_AAVE"] + }, + "EarnSetWrapperStateIntent": { + "type": "object", + "properties": { + "wrapperAddress": { + "type": "string", + "description": "Address of the deployed Earn wrapper to update, from ListEarnVaults/ListEarnPositions. Must be one of the org's deployed wrappers." + }, + "depositsDisabled": { "type": "boolean", - "description": "True when a given Wallet is imported, false otherwise." + "description": "When true, deposits to this wrapper are rejected; withdrawals are unaffected. Set to false to re-enable deposits.", + "nullable": true } }, - "required": [ - "walletId", - "walletName", - "createdAt", - "updatedAt", - "exported", - "imported" - ] + "required": ["wrapperAddress", "depositsDisabled"] + }, + "EarnSetWrapperStateRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_EARN_SET_WRAPPER_STATE"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/EarnSetWrapperStateIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "EarnSetWrapperStateResult": { + "type": "object", + "properties": { + "wrapperAddress": { + "type": "string", + "description": "Address of the updated Earn wrapper." + }, + "depositsDisabled": { + "type": "boolean", + "description": "The wrapper's deposit state after this activity." + } + }, + "required": ["wrapperAddress", "depositsDisabled"] }, - "WalletAccount": { + "EarnValueDisplay": { "type": "object", "properties": { - "walletAccountId": { + "usd": { "type": "string", - "description": "Unique identifier for a given Wallet Account." + "description": "USD value, for display only." }, - "organizationId": { + "crypto": { "type": "string", - "description": "The Organization the Account belongs to." - }, - "walletId": { + "description": "Normalized amount in the asset's own units, for display only." + } + } + }, + "EarnVault": { + "type": "object", + "properties": { + "vaultAddress": { "type": "string", - "description": "The Wallet the Account was derived from." - }, - "curve": { - "$ref": "#/components/schemas/Curve" + "description": "Address of the underlying yield vault." }, - "pathFormat": { - "$ref": "#/components/schemas/PathFormat" + "provider": { + "$ref": "#/components/schemas/EarnProvider" }, - "path": { + "caip19": { "type": "string", - "description": "Path used to generate the Account." + "description": "CAIP-19 asset ID of the vault's underlying asset (e.g. 'eip155:8453/erc20:0x833589...'); the chain is encoded in the identifier." }, - "addressFormat": { - "$ref": "#/components/schemas/AddressFormat" + "tvl": { + "type": "string", + "description": "Total value locked in the vault, in raw on-chain units of the underlying asset. The catalog is sorted by the USD value of this." }, - "address": { + "apyPct": { "type": "string", - "description": "Address generated using the Wallet seed and Account parameters." + "description": "Current annual percentage yield, expressed as a decimal fraction (e.g., '0.0812' for 8.12%)." }, - "createdAt": { - "$ref": "#/components/schemas/external.data.v1.Timestamp" + "enabled": { + "type": "boolean", + "description": "Whether the organization has enabled this vault." }, - "updatedAt": { - "$ref": "#/components/schemas/external.data.v1.Timestamp" + "display": { + "$ref": "#/components/schemas/EarnValueDisplay" }, - "publicKey": { + "name": { "type": "string", - "description": "The public component of this wallet account's underlying cryptographic key pair.", - "nullable": true - }, - "walletDetails": { - "$ref": "#/components/schemas/Wallet" + "description": "Human-readable vault name from the provider (e.g. 'Steakhouse Prime USDC' for Morpho; the reserve symbol for Aave)." }, - "name": { + "curator": { "type": "string", - "description": "Human-readable name for this Wallet Account, unique within the organization.", - "nullable": true + "description": "Vault curator name(s), comma-separated when a vault has multiple. Empty for providers without curators (e.g. Aave)." } - }, - "required": [ - "walletAccountId", - "organizationId", - "walletId", - "curve", - "pathFormat", - "path", - "addressFormat", - "address", - "createdAt", - "updatedAt" - ] + } }, - "WalletAccountParams": { + "EarnWithdrawIntent": { "type": "object", "properties": { - "curve": { - "$ref": "#/components/schemas/Curve" + "wrapperAddress": { + "type": "string", + "description": "Address of the deployed Earn wrapper holding the position to withdraw from, from ListEarnPositions. Must be one of the org's deployed wrappers." }, - "pathFormat": { - "$ref": "#/components/schemas/PathFormat" + "signWith": { + "type": "string", + "description": "A Wallet account address or Private Key address to withdraw to and sign with. Must be an on-chain address; Private Key identifiers are not supported." }, - "path": { + "chainCaip2": { "type": "string", - "description": "Path used to generate a wallet Account." + "enum": [ + "eip155:1", + "eip155:8453", + "eip155:42161", + "eip155:137", + "eip155:56", + "eip155:4217" + ], + "description": "CAIP-2 chain ID the vault lives on (e.g., 'eip155:8453' for Base)." }, - "addressFormat": { - "$ref": "#/components/schemas/AddressFormat" + "sponsor": { + "type": "boolean", + "description": "Whether to sponsor this transaction via Gas Station.", + "nullable": true }, - "name": { + "amountValue": { "type": "string", - "description": "Optional human-readable name for the account.", - "nullable": true + "description": "The amount of the underlying asset to withdraw, in raw on-chain units. Pass 'MAX' to withdraw the entire position." } }, - "required": [ - "curve", - "pathFormat", - "path", - "addressFormat" - ] + "required": ["wrapperAddress", "signWith", "chainCaip2", "amountValue"] }, - "WalletKitSettingsParams": { + "EarnWithdrawRequest": { "type": "object", "properties": { - "enabledSocialProviders": { - "type": "array", - "items": { - "type": "string" - }, - "description": "List of enabled social login providers (e.g., 'apple', 'google', 'facebook')", - "title": "Enabled Social Providers" + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_EARN_WITHDRAW"] }, - "oauthClientIds": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "Mapping of social login providers to their Oauth client IDs.", - "title": "Oauth Client IDs" + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." }, - "oauthRedirectUrl": { + "organizationId": { "type": "string", - "description": "Oauth redirect URL to be used for social login flows.", - "title": "Oauth Redirect URL" + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/EarnWithdrawIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true } - } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] }, - "WalletParams": { + "EarnWithdrawResult": { "type": "object", "properties": { - "walletName": { + "withdrawRequestId": { "type": "string", - "description": "Human-readable name for a Wallet." - }, - "accounts": { - "type": "array", - "items": { - "$ref": "#/components/schemas/WalletAccountParams" - }, - "description": "A list of wallet Accounts. This field, if not needed, should be an empty array in your request body." - }, - "mnemonicLength": { - "type": "integer", - "format": "int32", - "description": "Length of mnemonic to generate the Wallet seed. Defaults to 12. Accepted values: 12, 15, 18, 21, 24.", - "nullable": true + "description": "Identifier to poll withdrawal status and tx hash via GetEarnWithdrawStatus." } }, - "required": [ - "walletName", - "accounts" - ] + "required": ["withdrawRequestId"] }, - "WalletResult": { + "GetEarnDeployStatusRequest": { "type": "object", "properties": { - "walletId": { - "type": "string" + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." }, - "addresses": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of account addresses." + "deployRequestId": { + "type": "string", + "description": "The deploy_request_id returned by EarnDeployWrapper." } }, - "required": [ - "walletId", - "addresses" - ] + "required": ["organizationId", "deployRequestId"] }, - "WebAuthnStamp": { + "GetEarnDeployStatusResponse": { "type": "object", "properties": { - "credentialId": { - "type": "string", - "description": "A base64 url encoded Unique identifier for a given credential." - }, - "clientDataJson": { + "status": { "type": "string", - "description": "A base64 encoded payload containing metadata about the signing context and the challenge." + "enum": ["PENDING", "COMPLETED", "FAILED"], + "description": "Status of the wrapper deployment." }, - "authenticatorData": { + "deployTxHash": { "type": "string", - "description": "A base64 encoded payload containing metadata about the authenticator." + "description": "Transaction hash of the deployment, once available.", + "nullable": true }, - "signature": { + "error": { "type": "string", - "description": "The base64 url encoded signature bytes contained within the WebAuthn assertion response." + "description": "Reason the deployment transaction failed, when status is FAILED.", + "nullable": true } }, - "required": [ - "credentialId", - "clientDataJson", - "authenticatorData", - "signature" - ] + "required": ["status"] }, - "WebhookEndpointData": { + "GetEarnDepositStatusRequest": { "type": "object", "properties": { - "endpointId": { - "type": "string", - "description": "Unique identifier of the webhook endpoint." - }, "organizationId": { "type": "string", "description": "Unique identifier for a given Organization." }, - "url": { - "type": "string", - "description": "The destination URL for webhook delivery." - }, - "name": { + "depositRequestId": { "type": "string", - "description": "Human-readable name for this webhook endpoint." - }, - "isActive": { - "type": "boolean", - "description": "Whether this webhook endpoint is active." - }, - "subscriptions": { - "type": "array", - "items": { - "$ref": "#/components/schemas/WebhookSubscriptionParams" - }, - "description": "Current subscriptions attached to this endpoint." + "description": "The deposit_request_id returned by EarnDeposit." } - }, - "required": [ - "endpointId", - "organizationId", - "url", - "name", - "isActive" - ] + }, + "required": ["organizationId", "depositRequestId"] }, - "WebhookSubscriptionParams": { + "GetEarnDepositStatusResponse": { "type": "object", "properties": { - "eventType": { + "status": { "type": "string", - "description": "The event type to subscribe to (for example, ACTIVITY_UPDATES, BALANCE_CONFIRMED_UPDATES, or BALANCE_FINALIZED_UPDATES)." + "enum": ["PENDING", "COMPLETED", "FAILED"], + "description": "Status of the deposit." }, - "filtersJson": { + "depositTxHash": { "type": "string", - "description": "JSON-encoded filter criteria for this subscription.", + "description": "Transaction hash of the deposit, once available.", "nullable": true }, - "isActive": { - "type": "boolean", - "description": "Whether this subscription is active.", + "error": { + "type": "string", + "description": "Reason the deposit transaction failed, when status is FAILED.", "nullable": true } }, - "required": [ - "eventType" - ] + "required": ["status"] }, - "activity.v1.Address": { + "GetEarnWithdrawStatusRequest": { "type": "object", "properties": { - "format": { - "$ref": "#/components/schemas/AddressFormat" + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." }, - "address": { - "type": "string" + "withdrawRequestId": { + "type": "string", + "description": "The withdraw_request_id returned by EarnWithdraw." } - } + }, + "required": ["organizationId", "withdrawRequestId"] }, - "activity.v1.PolicyEvaluation": { + "GetEarnWithdrawStatusResponse": { "type": "object", "properties": { - "id": { - "type": "string", - "description": "Unique identifier for a given policy evaluation." - }, - "activityId": { + "status": { "type": "string", - "description": "Unique identifier for a given Activity." + "enum": ["PENDING", "COMPLETED", "FAILED"], + "description": "Status of the withdrawal." }, - "organizationId": { + "withdrawTxHash": { "type": "string", - "description": "Unique identifier for the Organization the Activity belongs to." + "description": "Transaction hash of the withdrawal, once available.", + "nullable": true }, - "voteId": { + "error": { "type": "string", - "description": "Unique identifier for the Vote associated with this policy evaluation." - }, - "policyEvaluations": { - "type": "array", - "items": { - "$ref": "#/components/schemas/common.v1.PolicyEvaluation" - }, - "description": "Detailed evaluation result for each Policy that was run." - }, - "createdAt": { - "$ref": "#/components/schemas/external.data.v1.Timestamp" + "description": "Reason the withdrawal transaction failed, when status is FAILED.", + "nullable": true } }, - "required": [ - "id", - "activityId", - "organizationId", - "voteId", - "policyEvaluations", - "createdAt" - ] + "required": ["status"] }, - "common.v1.PolicyEvaluation": { + "ListEarnEnabledVaultsRequest": { "type": "object", "properties": { - "policyId": { - "type": "string" + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." }, - "outcome": { - "$ref": "#/components/schemas/Outcome" + "provider": { + "$ref": "#/components/schemas/EarnProvider" + }, + "caip19": { + "type": "string", + "description": "Optional filter: only return enabled vaults whose underlying asset matches this CAIP-19 asset ID (e.g. 'eip155:8453/erc20:0x833589...'). The chain is taken from the CAIP-19 identifier.", + "nullable": true } - } + }, + "required": ["organizationId"] }, - "data.v1.Address": { + "ListEarnEnabledVaultsResponse": { "type": "object", "properties": { - "format": { - "$ref": "#/components/schemas/AddressFormat" - }, - "address": { - "type": "string" + "enabledVaults": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EarnEnabledVault" + }, + "description": "The organization's deployed wrappers." } } }, - "data.v1.SignatureScheme": { - "type": "string", - "enum": [ - "SIGNATURE_SCHEME_EPHEMERAL_KEY_P256" - ] - }, - "data.v1.SmartContractInterface": { + "ListEarnPositionsRequest": { "type": "object", "properties": { "organizationId": { "type": "string", - "description": "The Organization the Smart Contract Interface belongs to." - }, - "smartContractInterfaceId": { - "type": "string", - "description": "Unique identifier for a given Smart Contract Interface (ABI or IDL)." - }, - "smartContractAddress": { - "type": "string", - "description": "The address corresponding to the Smart Contract or Program." - }, - "smartContractInterface": { - "type": "string", - "description": "The JSON corresponding to the Smart Contract Interface (ABI or IDL)." - }, - "type": { - "type": "string", - "description": "The type corresponding to the Smart Contract Interface (either ETHEREUM or SOLANA)." - }, - "label": { - "type": "string", - "description": "The label corresponding to the Smart Contract Interface (either ETHEREUM or SOLANA)." + "description": "Unique identifier for a given Organization." }, - "notes": { + "walletAddress": { "type": "string", - "description": "The notes corresponding to the Smart Contract Interface (either ETHEREUM or SOLANA)." - }, - "createdAt": { - "$ref": "#/components/schemas/external.data.v1.Timestamp" - }, - "updatedAt": { - "$ref": "#/components/schemas/external.data.v1.Timestamp" + "description": "The wallet address to return positions for." } }, - "required": [ - "organizationId", - "smartContractInterfaceId", - "smartContractAddress", - "smartContractInterface", - "type", - "label", - "notes", - "createdAt", - "updatedAt" - ] + "required": ["organizationId", "walletAddress"] }, - "external.data.v1.Credential": { + "ListEarnPositionsResponse": { "type": "object", "properties": { - "publicKey": { + "positions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EarnPosition" + }, + "description": "The wallet's active Earn positions." + } + } + }, + "ListEarnVaultsRequest": { + "type": "object", + "properties": { + "organizationId": { "type": "string", - "description": "The public component of a cryptographic key pair used to sign messages and transactions." + "description": "Unique identifier for a given Organization. Annotates which vaults the organization has already enabled." }, - "type": { - "$ref": "#/components/schemas/CredentialType" + "provider": { + "$ref": "#/components/schemas/EarnProvider" }, - "sessionProfileId": { + "caip19": { "type": "string", - "description": "The session profile associated with this credential, if any. This field is only applicable for credentials of type CREDENTIAL_TYPE_LOGIN.", - "nullable": true + "description": "CAIP-19 asset ID (e.g. 'eip155:8453/erc20:0x833589...') to return vaults for. Only vaults whose underlying asset matches are returned; the chain is taken from the CAIP-19 identifier." + }, + "paginationOptions": { + "$ref": "#/components/schemas/Pagination" } }, - "required": [ - "publicKey", - "type" - ] + "required": ["organizationId", "caip19"] }, - "external.data.v1.Quorum": { + "ListEarnVaultsResponse": { "type": "object", "properties": { - "threshold": { - "type": "integer", - "format": "int32", - "description": "Count of unique approvals required to meet quorum." - }, - "userIds": { + "vaults": { "type": "array", "items": { - "type": "string" + "$ref": "#/components/schemas/EarnVault" }, - "description": "Unique identifiers of quorum set members." - } - }, - "required": [ - "threshold", - "userIds" - ] - }, - "external.data.v1.Timestamp": { - "type": "object", - "properties": { - "seconds": { - "type": "string" + "description": "The catalog of wrappable vaults, sorted by TVL (USD) descending. To page, pass page_info.end_cursor as the pagination after cursor." }, - "nanos": { - "type": "string" + "pageInfo": { + "$ref": "#/components/schemas/PageInfo" } - }, - "required": [ - "seconds", - "nanos" - ] + } }, - "v1.Tag": { + "PageInfo": { "type": "object", "properties": { - "tagId": { - "type": "string", - "description": "Unique identifier for a given Tag." - }, - "tagName": { - "type": "string", - "description": "Human-readable name for a Tag." + "hasNextPage": { + "type": "boolean" }, - "tagType": { - "$ref": "#/components/schemas/TagType" + "hasPreviousPage": { + "type": "boolean" }, - "createdAt": { - "$ref": "#/components/schemas/external.data.v1.Timestamp" + "startCursor": { + "type": "string", + "nullable": true }, - "updatedAt": { - "$ref": "#/components/schemas/external.data.v1.Timestamp" + "endCursor": { + "type": "string", + "nullable": true } - }, - "required": [ - "tagId", - "tagName", - "tagType", - "createdAt", - "updatedAt" - ] + } } } }, @@ -21673,37 +19047,20 @@ }, { "name": "WALLETS AND PRIVATE KEYS", - "tags": [ - "Wallets", - "Signing", - "Private Keys", - "Private Key Tags" - ] + "tags": ["Wallets", "Signing", "Private Keys", "Private Key Tags"] }, { "name": "USERS", - "tags": [ - "Users", - "User Tags", - "User Recovery", - "User Auth" - ] + "tags": ["Users", "User Tags", "User Recovery", "User Auth"] }, { "name": "CREDENTIALS", - "tags": [ - "Authenticators", - "API Keys", - "Sessions" - ] + "tags": ["Authenticators", "API Keys", "Sessions"] }, { "name": "ACTIVITIES", - "tags": [ - "Activities", - "Consensus" - ] + "tags": ["Activities", "Consensus"] } ], "x-original-swagger-version": "2.0" -} \ No newline at end of file +} From 49d6f032e7bd1d5d24d7af67ab65a738be98dceb Mon Sep 17 00:00:00 2001 From: Eric Velazquez Date: Thu, 30 Jul 2026 13:11:21 -0700 Subject: [PATCH 08/15] update docs --- api-reference/activities/remove-organization-feature.mdx | 6 +++--- api-reference/activities/set-organization-feature.mdx | 6 +++--- api-reference/queries/get-activity.mdx | 8 ++++---- api-reference/queries/get-configs.mdx | 2 +- api-reference/queries/list-activities.mdx | 8 ++++---- public_api.swagger.json | 3 ++- scripts/openapi-gen/openapi.json | 3 ++- 7 files changed, 19 insertions(+), 17 deletions(-) diff --git a/api-reference/activities/remove-organization-feature.mdx b/api-reference/activities/remove-organization-feature.mdx index 4a7a000d..0590b2bf 100644 --- a/api-reference/activities/remove-organization-feature.mdx +++ b/api-reference/activities/remove-organization-feature.mdx @@ -33,7 +33,7 @@ Unique identifier for a given Organization.

The parameters object containing the specific intent data for this activity.

- Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED` + Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_EARN_CONFIG` @@ -70,7 +70,7 @@ The activity type name field -Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED` +Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_EARN_CONFIG` @@ -91,7 +91,7 @@ Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_OR name field -Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED` +Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_EARN_CONFIG` diff --git a/api-reference/activities/set-organization-feature.mdx b/api-reference/activities/set-organization-feature.mdx index dd880f54..c7687c53 100644 --- a/api-reference/activities/set-organization-feature.mdx +++ b/api-reference/activities/set-organization-feature.mdx @@ -33,7 +33,7 @@ Unique identifier for a given Organization.

The parameters object containing the specific intent data for this activity.

- Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED` + Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_EARN_CONFIG` @@ -74,7 +74,7 @@ The activity type name field -Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED` +Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_EARN_CONFIG` @@ -98,7 +98,7 @@ Optional value for the feature. Will override existing values if feature is alre name field -Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED` +Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_EARN_CONFIG` diff --git a/api-reference/queries/get-activity.mdx b/api-reference/queries/get-activity.mdx index bce81abe..57c6540b 100644 --- a/api-reference/queries/get-activity.mdx +++ b/api-reference/queries/get-activity.mdx @@ -1861,7 +1861,7 @@ Unique identifier for the user performing recovery. name field -Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED` +Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_EARN_CONFIG` @@ -1876,7 +1876,7 @@ Optional value for the feature. Will override existing values if feature is alre name field -Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED` +Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_EARN_CONFIG` @@ -6046,7 +6046,7 @@ item field name field -Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED` +Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_EARN_CONFIG` @@ -6067,7 +6067,7 @@ value field name field -Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED` +Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_EARN_CONFIG` diff --git a/api-reference/queries/get-configs.mdx b/api-reference/queries/get-configs.mdx index e85998a0..93ad1088 100644 --- a/api-reference/queries/get-configs.mdx +++ b/api-reference/queries/get-configs.mdx @@ -32,7 +32,7 @@ A successful response returns the following fields: name field -Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED` +Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_EARN_CONFIG` diff --git a/api-reference/queries/list-activities.mdx b/api-reference/queries/list-activities.mdx index 6b242298..ed69c6ec 100644 --- a/api-reference/queries/list-activities.mdx +++ b/api-reference/queries/list-activities.mdx @@ -1882,7 +1882,7 @@ Unique identifier for the user performing recovery. name field -Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED` +Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_EARN_CONFIG` @@ -1897,7 +1897,7 @@ Optional value for the feature. Will override existing values if feature is alre name field -Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED` +Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_EARN_CONFIG` @@ -6067,7 +6067,7 @@ item field name field -Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED` +Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_EARN_CONFIG` @@ -6088,7 +6088,7 @@ value field name field -Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED` +Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_EARN_CONFIG` diff --git a/public_api.swagger.json b/public_api.swagger.json index ce025345..3724acc4 100644 --- a/public_api.swagger.json +++ b/public_api.swagger.json @@ -9308,7 +9308,8 @@ "FEATURE_NAME_SMS_AUTH", "FEATURE_NAME_OTP_EMAIL_AUTH", "FEATURE_NAME_AUTH_PROXY", - "FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED" + "FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED", + "FEATURE_NAME_EARN_CONFIG" ] }, "FiatOnRampBlockchainNetwork": { diff --git a/scripts/openapi-gen/openapi.json b/scripts/openapi-gen/openapi.json index fccdc013..a2923e2b 100644 --- a/scripts/openapi-gen/openapi.json +++ b/scripts/openapi-gen/openapi.json @@ -9874,7 +9874,8 @@ "FEATURE_NAME_SMS_AUTH", "FEATURE_NAME_OTP_EMAIL_AUTH", "FEATURE_NAME_AUTH_PROXY", - "FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED" + "FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED", + "FEATURE_NAME_EARN_CONFIG" ] }, "FiatOnRampBlockchainNetwork": { From f89e4d0bf8e996df6247a757a31586d412f515da Mon Sep 17 00:00:00 2001 From: "mintlify[bot]" <109931778+mintlify[bot]@users.noreply.github.com> Date: Thu, 6 Aug 2026 12:38:10 +0000 Subject: [PATCH 09/15] Updated mintlify pages - Updated snippets/shared/earn-beta-note.mdx - Updated features/transaction-management/earn.mdx - Updated features/transaction-management/earn/vault-catalog.mdx - Updated features/transaction-management/earn/deploy-wrapper.mdx - Updated features/transaction-management/earn/deposit.mdx - Updated features/transaction-management/earn/positions.mdx - Updated features/transaction-management/earn/end-to-end-example.mdx - Created features/transaction-management/earn/deploy-wrapper-2.mdx - Deleted features/transaction-management/earn/withdraw.mdx - Updated docs.json Mintlify-Source: dashboard-editor --- docs.json | 2 +- features/transaction-management/earn.mdx | 90 ++++++++++-------- .../earn/deploy-wrapper-2.mdx | 58 ++++++++++++ .../earn/deploy-wrapper.mdx | 37 +++----- .../transaction-management/earn/deposit.mdx | 29 +++--- .../earn/end-to-end-example.mdx | 70 +++++++------- .../transaction-management/earn/positions.mdx | 28 +++--- .../earn/vault-catalog.mdx | 32 ++++--- .../transaction-management/earn/withdraw.mdx | 92 ------------------- snippets/shared/earn-beta-note.mdx | 2 +- 10 files changed, 200 insertions(+), 240 deletions(-) create mode 100644 features/transaction-management/earn/deploy-wrapper-2.mdx delete mode 100644 features/transaction-management/earn/withdraw.mdx diff --git a/docs.json b/docs.json index 2856511f..71c06e37 100644 --- a/docs.json +++ b/docs.json @@ -450,8 +450,8 @@ "features/transaction-management/earn", "features/transaction-management/earn/vault-catalog", "features/transaction-management/earn/deploy-wrapper", + "features/transaction-management/earn/deploy-wrapper-2", "features/transaction-management/earn/deposit", - "features/transaction-management/earn/withdraw", "features/transaction-management/earn/positions", "features/transaction-management/earn/end-to-end-example" ], diff --git a/features/transaction-management/earn.mdx b/features/transaction-management/earn.mdx index 9fa9c1e0..7185d1ad 100644 --- a/features/transaction-management/earn.mdx +++ b/features/transaction-management/earn.mdx @@ -1,109 +1,123 @@ --- -title: "Earn" -description: "Deposit into DeFi yield vaults from Turnkey wallets, with on-chain fee collection for your organization." +title: "Earn (overview)" +description: "Deposit into DeFi yield vaults from Turnkey wallets, with onchain fee collection for your organization." --- -import EarnBetaNote from "/snippets/shared/earn-beta-note.mdx"; - -Earn lets wallets in your organization deposit into DeFi yield vaults, track their positions, and withdraw, all through Turnkey activities with the usual audit trail and policy controls. You can take your own performance fee on the yield your users earn, paid on-chain to a wallet you control. + + Earn is currently an Early Access Product. [Contact us](https://www.turnkey.com/contact-us) to enable it for your organization. + - +Earn lets wallets in your organization deposit into DeFi yield vaults, query position data to track their positions, and withdraw, all through Turnkey activities with the corresponding audit trail and policy controls. You can take your own fee on the yield your users earn, paid onchain to a wallet you control. ## What is Earn -Earn connects Turnkey wallets to [ERC-4626](https://eips.ethereum.org/EIPS/eip-4626) yield vaults. Morpho vaults are supported today; Aave is coming. Users don't deposit into the raw vault directly. Instead, they deposit into a **fee wrapper**: a vault contract we deploy once per vault for your organization. The wrapper forwards deposits to the underlying vault and takes the performance fees out of its share price, so users never submit separate fee transactions. +Earn connects Turnkey wallets to ERC-4626 yield vaults. The vaults are deployed and operated by independent third-party protocols; Turnkey provides the API infrastructure to interact with them but does not operate, manage, or guarantee them. Morpho vaults are supported today and Aave support is coming soon. + +Users don't deposit into vaults directly. They deposit into a fee wrapper, a smart contract that holds the position in the underlying vault. A vault may be enabled via either the dashboard or the API. Once you enable a vault, a wrapper is automatically deployed with your fee parameters. The wrapper collects fees as yield accrues. Fees come out of yield only, never principal, and users never sign a separate fee transaction. + +A wrapper is deployed once per vault and fee configuration. After that, deposits, withdrawals, and position queries are each a single API call. -Deploying a wrapper is a one-time setup step per vault. After that, deposits, withdrawals, and position queries are each a single API call. + + If your application presents Earn functionality to end users, you should clearly disclose that: (1) yield is generated by independent third-party DeFi protocols and do not claim or imply that yield is generated by your application or by Turnkey; (2) deposited assets are subject to risks including smart-contract risk, liquidity risk, and potential loss of principal; (3) yield is variable and not guaranteed; and (4) the user is directing the deposit action and retaining control of their assets. Depending on your jurisdiction and the nature of the assets involved, additional regulatory disclosures may apply. + + + + Vault deposits interact with smart contracts deployed on public blockchains. Deposited assets are subject to smart-contract risk, including the possibility of bugs, exploits, or protocol governance changes that could result in partial or total loss of deposited funds. Turnkey does not audit or guarantee the security of any third-party vault contract. + ## How it works 1. Query [`list_earn_vaults`](/features/transaction-management/earn/vault-catalog) for the vaults available for an asset, with live TVL and APY. 2. Run [`earn_deploy_wrapper`](/features/transaction-management/earn/deploy-wrapper) once per vault to enable it for your organization and set your fee. Turnkey pays the deployment gas. -3. Call [`earn_deposit`](/features/transaction-management/earn/deposit) to move assets from a user's wallet into the vault. +3. Call [`earn_deposit`](/features/transaction-management/earn/deposit) to initiate a transfer of assets from a wallet into the vault. 4. Poll the matching status endpoint until the transaction confirms. Deposits, withdrawals, and deployments all confirm asynchronously. -5. Query [`list_earn_positions`](/features/transaction-management/earn/positions) for a wallet's current value and lifetime totals. +5. Query [`list_earn_positions`](/features/transaction-management/earn/positions) for a wallet’s current value and lifetime totals. 6. Call [`earn_withdraw`](/features/transaction-management/earn/withdraw) for a partial amount, the yield only, or the full position. ## Supported protocols and chains | Chain | CAIP-2 | Providers | -| :--- | :--- | :--- | +| :-- | :-- | :-- | | Ethereum | `eip155:1` | Morpho (Aave upcoming) | | Base | `eip155:8453` | Morpho (Aave upcoming) | | Arbitrum | `eip155:42161` | Morpho (Aave upcoming) | | Polygon | `eip155:137` | Morpho (Aave upcoming) | -| BNB Chain | `eip155:56` | Aave (upcoming) | -Earn is EVM-only in V1. The vault catalog only includes vaults with at least $100k TVL. +Earn is EVM-only in V1. The vault catalog only includes vaults with at least \$100k TVL. ## Fees -Earn fees are performance fees: a percentage of the yield a position earns. Principal is never charged. Two fees apply, both in basis points of gross yield: +Earn fees are charged only on yield: a percentage of the yield a position earns. Principal is never charged. Two fees apply, both in basis points of gross yield: -- **Your fee**: you set it per wrapper at deploy time (`clientFeeBps`), along with the payout wallet (`clientFeeWallet`, a wallet account owned by your organization). Fees accrue on-chain and are released to that wallet when you claim them. -- **Turnkey's fee**: resolved automatically when you deploy. The default is 10% of yield (1,000 bps); enterprise customers can have custom rates. +- **Your fee (the "Client Fee")**: you set it per wrapper at deploy time (`clientFeeBps`), along with the payout wallet (`clientFeeWallet`, a wallet account owned by your organization). Fees accrue onchain and are released to that wallet when you claim them. +- **Turnkey's fee (The "Turnkey fee")**: resolved automatically when you deploy. The Turnkey Fee is up to 10% of yield (1,000 bps). -The combined fee is capped at 50% of yield (5,000 bps), and deployments above the cap are rejected. Both fees come out of the wrapper's share price and are split on-chain by a payment splitter contract deployed alongside the wrapper. +Client fees are capped at 4,000 bps (40% of yield). Deployments above this cap are rejected. Both Client fees and Turnkey’s fee are taken from yield as wrapper shares minted to a payment splitter contract deployed alongside the wrapper, which splits them onchain between you and Turnkey. -The net APY your users earn is `grossApy × (1 - totalFeeBps / 10000)`. The [`list_earn_enabled_vaults`](/features/transaction-management/earn/vault-catalog#list-your-enabled-vaults) endpoint returns gross APY, net APY, and your fee rate for every wrapper you've deployed, along with `claimableClientFee`: the fee amount accrued to your organization that is releasable right now. Claim it on-chain with the [`claim_earn_fees`](/api-reference/activities/claim-earn-fees) activity; the claimed amount is paid out to your fee wallet. +The net yield your users earn is `grossApy × (1 - totalFeeBps / 10000)`. The [`list_earn_enabled_vaults`](/features/transaction-management/earn/vault-catalog#list-your-enabled-vaults) endpoint returns gross APY, net APY, and your fee rate for every wrapper you've deployed, along with `claimableClientFee`: the fee amount accrued to your organization that is actively claimable. Claim it onchain with the [`claim_earn_fees`](/api-reference/activities/claim-earn-fees) activity; the claimed amount is paid out to your fee wallet. The fee configuration is fixed per wrapper. To change your fee, deploy a new wrapper for the same vault. Existing positions in the old wrapper remain fully withdrawable, and new deposits go to the new wrapper. See [Deploy a vault wrapper](/features/transaction-management/earn/deploy-wrapper#choose-your-fee-configuration). +**Important:** The Client Fee and the Turnkey Fee are infrastructure fees charged on yield generated by third-party vault protocols. Neither fee constitutes a fee for investment advice, asset management, or discretionary portfolio allocation. Turnkey does not exercise discretion over how vault assets are deployed, allocated, or managed. All allocation decisions are made by the vault's curator or governing protocol. + ## API surface Earn adds five activities: | Activity | Endpoint | Purpose | -| :--- | :--- | :--- | +| :-- | :-- | :-- | | [`ACTIVITY_TYPE_EARN_DEPLOY_WRAPPER`](/api-reference/activities/deploy-earn-wrapper) | `POST /public/v1/submit/earn_deploy_wrapper` | Enable a vault for your org by deploying its fee wrapper | | [`ACTIVITY_TYPE_EARN_DEPOSIT`](/api-reference/activities/deposit-into-earn-vault) | `POST /public/v1/submit/earn_deposit` | Deposit assets from a wallet into an enabled vault | | [`ACTIVITY_TYPE_EARN_WITHDRAW`](/api-reference/activities/withdraw-from-earn-vault) | `POST /public/v1/submit/earn_withdraw` | Withdraw assets or exit a position | | [`ACTIVITY_TYPE_EARN_SET_WRAPPER_STATE`](/api-reference/activities/set-earn-wrapper-state) | `POST /public/v1/submit/earn_set_wrapper_state` | Pause or resume deposits to a wrapper (withdrawals are never blocked) | -| [`ACTIVITY_TYPE_CLAIM_EARN_FEES`](/api-reference/activities/claim-earn-fees) | `POST /public/v1/submit/claim_earn_fees` | Claim your accrued performance fees for a wrapper | +| [`ACTIVITY_TYPE_CLAIM_EARN_FEES`](/api-reference/activities/claim-earn-fees) | `POST /public/v1/submit/claim_earn_fees` | Claim your accrued fees for a wrapper | -and six queries: +and seven queries: | Query | Endpoint | Purpose | -| :--- | :--- | :--- | +| :-- | :-- | :-- | | [Vault catalog](/api-reference/queries/get-earn-vault-catalog) | `POST /public/v1/query/list_earn_vaults` | All wrappable vaults for an asset, with live TVL/APY | | [Enabled vaults](/api-reference/queries/get-earn-enabled-vaults) | `POST /public/v1/query/list_earn_enabled_vaults` | Your org's deployed wrappers (management view) | | [Positions](/api-reference/queries/get-earn-positions) | `POST /public/v1/query/list_earn_positions` | A wallet's active positions | | [Deploy status](/api-reference/queries/get-earn-deploy-status) | `POST /public/v1/query/get_earn_deploy_status` | Poll a wrapper deployment | -| [Deposit status](/api-reference/queries/get-earn-deposit-status) | `POST /public/v1/query/get_earn_deposit_status` | Poll a deposit until it lands on-chain | -| [Withdraw status](/api-reference/queries/get-earn-withdraw-status) | `POST /public/v1/query/get_earn_withdraw_status` | Poll a withdrawal until it lands on-chain | +| [Deposit status](/api-reference/queries/get-earn-deposit-status) | `POST /public/v1/query/get_earn_deposit_status` | Poll a deposit until it lands onchain | +| [Withdraw status](/api-reference/queries/get-earn-withdraw-status) | `POST /public/v1/query/get_earn_withdraw_status` | Poll a withdrawal until it lands onchain | +| [Claim fees status](/api-reference/queries/get-claim-earn-fees-status) | `POST /public/v1/query/get_claim_earn_fees_status` | Poll a claim fee until it lands onchain | - Earn requests are stamped and submitted like any other Turnkey request. See - [Stamps](/api-reference/overview/stamps) and - [Submissions](/api-reference/activities/overview). Full request/response - schemas and cURL examples live in the API reference pages linked above. - There are no Earn-specific SDK methods during the beta; use cURL or the - generic `request` method of - [`@turnkey/http`](https://www.npmjs.com/package/@turnkey/http)'s - `TurnkeyClient`. + Earn requests are stamped and submitted like any other Turnkey request. See [Stamps](/api-reference/overview/stamps) and [Submissions](/api-reference/activities/overview). Full request/response schemas and cURL examples live in the API reference pages linked above. ## Explore - Discover vaults and check your enabled wrappers. + — Discover vaults and check your enabled wrappers. + - Enable a vault and set your fee. + — Enable a vault and set your fee. + - One transaction, optionally gas-sponsored. + — One transaction, optionally gas-sponsored. + - Partial, yield-only, or full exit. + — Partial, yield-only, or full exit. + - Current value, lifetime totals, and yield. + — Current value, lifetime totals, and yield. + - Deploy, deposit, and withdraw USDC on Base. + — Deploy, deposit, and withdraw USDC on Base. + +**Important:** Turnkey does not operate, control, or audit the DeFi vaults or underlying protocols accessible through the Earn feature. Vault data, including APY and TVL figures, is sourced from third-party providers and may be inaccurate, delayed, or subject to change without notice. Yield is generated by independent third-party protocols, not by Turnkey. Yield is variable, not guaranteed, and past rates are not indicative of future performance. + +Depositing into DeFi vaults involves risk, including the potential loss of deposited assets due to smart-contract vulnerabilities, market conditions, liquidity constraints, or protocol failures. These materials are provided for informational and technical integration purposes only. Nothing in this documentation constitutes investment, financial, legal, or tax advice, or a recommendation or solicitation to engage in any particular transaction. You and your end users are solely responsible for evaluating the suitability and risks of any vault. \ No newline at end of file diff --git a/features/transaction-management/earn/deploy-wrapper-2.mdx b/features/transaction-management/earn/deploy-wrapper-2.mdx new file mode 100644 index 00000000..aa6e8649 --- /dev/null +++ b/features/transaction-management/earn/deploy-wrapper-2.mdx @@ -0,0 +1,58 @@ +--- +title: "Manage wrappers" +description: "Pause deposits, claim your accrued fees, and change or tier your fee by deploying additional wrappers." +sidebarTitle: "Deploy wrapper" +mode: "wide" +--- + + + Earn is currently an Early Access Product. [Contact us](https://www.turnkey.com/contact-us) to enable it for your organization. + + +A deployed wrapper is immutable. It points at the same underlying vault, its fee configuration cannot change, and the deploy abdicates the contract's deposit, withdrawal, and transfer gates, so no one, including Turnkey, can ever restrict user access to funds. + +What you control after deployment: + +- whether new deposits are accepted +- when you claim accrued fees +- which wrapper each user deposits into. + +Management operations are parent-organization only; sub-organization wallets can deposit and withdraw but cannot manage wrappers. + +## Pause or resume deposits + +[`earn_set_wrapper_state`](/api-reference/activities/set-earn-wrapper-state) sets `depositsDisabled` on a wrapper. While true, earn\_deposit against that wrapper is rejected. Withdrawals, position queries, and fee claims are unaffected, so a paused wrapper can never trap funds. Set it back to false to resume deposits. + +Pausing gates deposits submitted through the Turnkey API; it is not an onchain lock. The wrapper remains a permissionless ERC-4626 contract that anyone can interact with directly onchain. + +Read the current state from `depositsDisabled` on [`list_earn_enabled_vaults`](/api-reference/queries/get-earn-enabled-vaults), or on each row of [`list_earn_enabled_vaults`](/api-reference/queries/get-earn-enabled-vaults) so your UI can hide the deposit button for paused wrappers. + +Common uses: stopping new deposits into a vault that looks compromised while users exit at their own pace, and winding down a wrapper after replacing it with a new fee configuration. + +## Claim your fees + +Fees accrue onchain as wrapper shares held by the wrapper's payment splitter. They accumulate without any action from you and never expire. Claiming converts them into the underlying asset. + +1. Check the claimable amount. `claimableClientFee` on [`list_earn_enabled_vaults`](/api-reference/queries/get-earn-enabled-vaults) is the releasable fee for that wrapper, denominated in the underlying asset with USD and asset display values. This field and `clientFeeWallet` are only returned to parent-organization callers. +2. Submit [`claim_earn_fees`](/api-reference/activities/claim-earn-fees) with the `wrapperAddress`. One transaction releases your fee shares from the splitter to your `clientFeeWallet` and redeems them into the underlying asset, so the payout arrives as the asset (for example USDC), not as vault shares. +3. Poll [`get_claim_earn_fees_status`](/api-reference/queries/get-claim-earn-fees-status) with the returned `claimRequestId`. As with every Earn transaction, `COMPLETED` on the activity means submitted, not confirmed onchain. + +## Change or tier your fee + +A wrapper is unique to its vault and fee configuration (`clientFeeBps` and `clientFeeWallet`). To change your fee or payout wallet, or tier fees for the same underlying vault, deploy a new wrapper for the same vault. The two wrappers coexist permanently: neither invalidates the other, each has its own configuration and claimable balance, and each is an independent depositor in the underlying vault. This one mechanic covers both replacing your fee and offering different rates to different audiences. + +To replace your fee: + +1. Deploy the new wrapper with the new `clientFeeBps` and/or `clientFeeWallet`. You get a new `wrapperAddress` and `splitterAddress`, and Turnkey pays the gas as with the first deployment. +2. Point new deposits at the new `wrapperAddress`. Deposits are addressed by wrapper, not by vault. +3. Pause the old wrapper so nothing else lands in it. Withdrawals stay open. +4. Optionally migrate existing positions. There is no in-place migration: [`earn_withdraw`](/features/transaction-management/earn/withdraw) the full position (`MAX`) from the old wrapper, then [`earn_deposit`](/features/transaction-management/earn/deposit) the proceeds into the new one, per wallet. Both legs can be gas-sponsored. +5. Keep claiming from the old wrapper. Balances left behind keep accruing fees at the old rate to the old `clientFeeWallet`. + +Things to keep in mind: + +- Fee changes are forward-only. Yield already accrued settles at the old rate, and a position keeps paying its wrapper's rate until it is migrated. +- Position history is per wrapper. [`list_earn_positions`](/features/transaction-management/earn/positions) returns one row per wrapper, so a wallet with balances in two wrappers for the same vault shows two rows; aggregate by `vaultAddress` if your UI shows a single balance. A `MAX` exit zeroes a row's totals, and the row disappears once the share balance is zero. +- The catalog's `enabled` flag is per vault, not per wrapper. It is true once any wrapper exists and won't tell you which is current. Use `wrapperAddress` from [`list_earn_enabled_vaults`](/api-reference/queries/get-earn-enabled-vaults) or your own stored mapping as the source of truth. +- The fee caps apply to every deployment. +- Redeploying with identical parameters is idempotent: it re-derives the same addresses and skips the broadcast, so retries never create duplicates. \ No newline at end of file diff --git a/features/transaction-management/earn/deploy-wrapper.mdx b/features/transaction-management/earn/deploy-wrapper.mdx index 76ed6bd3..8dee21e6 100644 --- a/features/transaction-management/earn/deploy-wrapper.mdx +++ b/features/transaction-management/earn/deploy-wrapper.mdx @@ -1,15 +1,15 @@ --- title: "Deploy a vault wrapper" description: "Enable a yield vault for your organization by deploying its fee wrapper, a one-time setup step that also sets your fee." -sidebarTitle: "Deploy wrapper" -mode: wide +sidebarTitle: "Deploy a vault wrapper" +mode: "wide" --- -import EarnBetaNote from "/snippets/shared/earn-beta-note.mdx"; - -Before your users can deposit into a vault, your organization must deploy a **fee wrapper** for it. The wrapper is the contract users actually deposit into. It routes funds to the underlying vault and takes the performance fees out of its share price. Deploying it is a one-time activity per vault, and Turnkey pays the gas. + + Earn is currently an Early Access Product. [Contact us](https://www.turnkey.com/contact-us) to enable it for your organization. + - +Before your users can deposit into a vault, your organization must deploy a **fee wrapper** for it. The wrapper is the contract users actually deposit into. It routes funds to the underlying vault and collects the applicable fees out of the yield, by minting fee shares to a payment splitter as interest accrues.. Deploying it is a one-time activity per vault, with gas sponsored by Turnkey. ## When to deploy @@ -19,15 +19,11 @@ Deploy once per vault you want to offer, per fee configuration. Deposits into a The deploy intent carries your fee: -- `clientFeeBps`: your performance fee on gross yield, in basis points (`"2000"` = 20%). Combined with Turnkey's fee (10% of yield by default), the total cannot exceed 5,000 bps (50% of yield); deployments above the cap are rejected. -- `clientFeeWallet`: the address that receives your fee payouts on-chain. It must be a wallet account owned by your organization; addresses outside your org are rejected. +- `clientFeeBps`: your fee on gross yield, in basis points (`"2000"` = 20%). Combined with Turnkey's fee (10% of yield by default), the total cannot exceed 5,000 bps (50% of yield); deployments above the cap are rejected. +- `clientFeeWallet`: the address that receives your fee payouts onchain. It must be a wallet account owned by your organization; addresses outside your org are rejected. - The fee configuration is bound into the wrapper's deterministic (CREATE2) - address. Deploying the same vault with a different `clientFeeBps` or - `clientFeeWallet` produces a new wrapper at a new address. Positions in the - old wrapper remain fully withdrawable; new deposits should target the new - wrapper. To change your fee, redeploy and point deposits at the new address. + The fee configuration is bound into the wrapper's deterministic (CREATE2) address. Deploying the same vault with a different `clientFeeBps` or `clientFeeWallet` produces a new wrapper at a new address. Positions in the old wrapper remain fully withdrawable; new deposits should target the new wrapper. To change your fee, redeploy and point deposits at the new address. ## Submit the activity @@ -47,22 +43,11 @@ The activity completes when the deployment transaction is broadcast, not when it ## Gas and idempotency - Turnkey pays the wrapper deployment gas (roughly 7.1M gas per deployment), - not you or your users. Deployments are also idempotent: resubmitting the - activity with identical parameters re-derives the same wrapper and splitter - addresses and skips the broadcast if the contracts already exist, so - retries are safe. + Wrapper deployment gas costs (roughly 7.1M gas per deployment) are currently covered by Turnkey’s infrastructure and are not charged to you or your users. Deployments are also idempotent: resubmitting the activity with identical parameters re-derives the same wrapper and splitter addresses and skips the broadcast if the contracts already exist, so retries are safe. -## Manage a deployed wrapper - -Two more activities cover the wrapper's lifecycle after deployment: - -- **Pause deposits**: [`earn_set_wrapper_state`](/api-reference/activities/set-earn-wrapper-state) toggles `depositsDisabled` on a wrapper. While disabled, new deposits are rejected but withdrawals always remain available, so you can wind a wrapper down (for example, after replacing it with a new fee configuration) without trapping funds. The current state is returned by [`list_earn_enabled_vaults`](/api-reference/queries/get-earn-enabled-vaults). -- **Claim your fees**: [`claim_earn_fees`](/api-reference/activities/claim-earn-fees) releases your accrued performance fees for a wrapper to your `clientFeeWallet`. Check the claimable amount in `claimableClientFee` on [`list_earn_enabled_vaults`](/api-reference/queries/get-earn-enabled-vaults); both are only available to the parent organization. - ## Next steps - [Browse the vault catalog](/features/transaction-management/earn/vault-catalog) to pick vaults to enable - [Deposit into a vault](/features/transaction-management/earn/deposit) once the deployment is `COMPLETED` -- Review the [fee model](/features/transaction-management/earn#fees) +- Review the [fee model](/features/transaction-management/earn#fees) \ No newline at end of file diff --git a/features/transaction-management/earn/deposit.mdx b/features/transaction-management/earn/deposit.mdx index 21b4e2f7..9a70820d 100644 --- a/features/transaction-management/earn/deposit.mdx +++ b/features/transaction-management/earn/deposit.mdx @@ -1,14 +1,14 @@ --- title: "Deposit into a vault" description: "Move assets from a Turnkey wallet into an enabled yield vault in one atomic transaction, optionally gas-sponsored." -mode: wide +mode: "wide" --- -import EarnBetaNote from "/snippets/shared/earn-beta-note.mdx"; - -A deposit moves assets from a user's wallet into your organization's fee wrapper for a vault. The token approval and the vault deposit execute as a single atomic batch transaction, so there is no separate approval step to manage. + + Earn is currently an Early Access Product. [Contact us](https://www.turnkey.com/contact-us) to enable it for your organization. + - +When a user initiates a deposit into a vault, you pass through their intents via our API where we then form and broadcast the transaction to deposit those assets into your organization's fee wrapper for a given vault. The token approval and the vault deposit execute as a single atomic batch transaction, so there is no separate approval step to manage. ## Prerequisites @@ -17,10 +17,7 @@ A deposit moves assets from a user's wallet into your organization's fee wrapper - The `signWith` wallet holds enough of the vault's underlying asset. For non-sponsored deposits it also needs the chain's native token for gas. - Sub-organization wallets can deposit into (and withdraw from) wrappers - deployed by their parent organization. The wrapper configuration lives on - the parent, the sub-org wallet signs, and no per-sub-org deployment is - needed. + Sub-organization wallets can deposit into (and withdraw from) wrappers deployed by their parent organization. The wrapper configuration lives on the parent, the sub-org wallet signs, and no per-sub-org deployment is needed. ## Submit the deposit @@ -29,25 +26,21 @@ Submit an [`ACTIVITY_TYPE_EARN_DEPOSIT`](/api-reference/activities/deposit-into- - the `wrapperAddress` to deposit into, from [`list_earn_enabled_vaults`](/api-reference/queries/get-earn-enabled-vaults) - the `signWith` wallet account to deposit from and sign with -- the amount in `assets`, in raw on-chain units of the underlying asset (e.g. `"1000000"` for 1 USDC at 6 decimals) +- the amount in `assets`, in raw onchain units of the underlying asset (e.g. `"1000000"` for 1 USDC at 6 decimals) - the CAIP-2 chain in `chainCaip2`, and optionally `sponsor` for gas sponsorship See [Deposit into Earn vault](/api-reference/activities/deposit-into-earn-vault) in the API reference for the full request/response schema and cURL example. The activity result contains only a poll handle, `depositRequestId`. ## Gas: sponsored vs self-funded -With `sponsor: true`, Gas Station pays the gas and the batch executes as an EIP-7702 sponsored transaction. The `signWith` wallet needs no native token at all. This requires a Pro plan or higher. +With `sponsor: true`, network fees are covered through Turnkey’s Gas Station and the batch executes as an EIP-7702 sponsored transaction. The `signWith` wallet does not need a gas token. -With `sponsor: false`, the `signWith` wallet pays gas itself, so fund it with the chain's native token before depositing. +With `sponsor: false`, the `signWith` wallet pays gas itself, and the user initiating the deposit will need the relevant chain’s gas token. ## Poll deposit status (required) - A `COMPLETED` activity means the transaction was enqueued for broadcast, - not that it landed on-chain. A transaction that later fails (for example, - from an insufficient token balance) is invisible in the activity result. - Poll [`get_earn_deposit_status`](/api-reference/queries/get-earn-deposit-status) - until it reports `COMPLETED` (included on-chain) or `FAILED`. + A `COMPLETED` activity means the transaction was enqueued for broadcast, not that it landed onchain. A transaction that later fails (for example, from an insufficient token balance) is invisible in the activity result. Poll [`get_earn_deposit_status`](/api-reference/queries/get-earn-deposit-status) until it reports `COMPLETED` (included onchain) or `FAILED`. Poll with the `depositRequestId` from the activity result. `status` is `PENDING`, `COMPLETED`, or `FAILED`; on `COMPLETED` the response carries the `depositTxHash`, and on `FAILED` it includes an `error` field with the reason. See [Submissions](/api-reference/activities/overview) for general activity semantics. @@ -55,4 +48,4 @@ Poll with the `depositRequestId` from the activity result. `status` is `PENDING` ## Next steps - [Track positions](/features/transaction-management/earn/positions) once the deposit is `COMPLETED` -- [Withdraw from a vault](/features/transaction-management/earn/withdraw) +- [Withdraw from a vault](/features/transaction-management/earn/withdraw) \ No newline at end of file diff --git a/features/transaction-management/earn/end-to-end-example.mdx b/features/transaction-management/earn/end-to-end-example.mdx index b07d071b..4f91ef19 100644 --- a/features/transaction-management/earn/end-to-end-example.mdx +++ b/features/transaction-management/earn/end-to-end-example.mdx @@ -1,21 +1,21 @@ --- title: "End-to-end example: earn on Base" description: "Deploy a wrapper for a Morpho USDC vault on Base, deposit, track the position, and withdraw: the full Earn lifecycle." -sidebarTitle: "End-to-end example" -mode: wide +sidebarTitle: "End-to-end example: earn on Base" +mode: "wide" --- -import EarnBetaNote from "/snippets/shared/earn-beta-note.mdx"; + + Earn is currently an Early Access Product. [Contact us](https://www.turnkey.com/contact-us) to enable it for your organization. + -This walkthrough runs the complete Earn lifecycle against Base mainnet: find a Morpho USDC vault (we'll use Steakhouse USDC), enable it, deposit 100 USDC from a Turnkey wallet, check the position, and withdraw everything. - - +This walkthrough runs the complete Earn lifecycle against Base mainnet: find a Morpho USDC vault (we’ll use Steakhouse USDC), enable it, deposit 100 USDC from a Turnkey wallet, check the position, and withdraw everything. **Prerequisites** -- Earn beta access enabled for your organization (and a Pro plan or higher if you want gas sponsorship) +- Earn Early access enabled for your organization (and a Pro plan or higher if you want gas sponsorship) - A Turnkey API key pair -- A wallet account holding USDC on Base, plus ETH on Base for gas if you don't sponsor +- A wallet account holding USDC on Base, plus ETH on Base for gas if you don’t sponsor - An org-owned wallet address to receive your fee payouts @@ -25,9 +25,9 @@ This walkthrough runs the complete Earn lifecycle against Base mainnet: find a M ```javascript import { TurnkeyClient } from "@turnkey/http"; import { ApiKeyStamper } from "@turnkey/api-key-stamper"; - + const organizationId = ""; - + const client = new TurnkeyClient( { baseUrl: "https://api.turnkey.com" }, new ApiKeyStamper({ @@ -35,8 +35,8 @@ This walkthrough runs the complete Earn lifecycle against Base mainnet: find a M apiPrivateKey: process.env.TURNKEY_API_PRIVATE_KEY, }), ); - - // Poll an earn status endpoint until the transaction lands on-chain. + + // Poll an earn status endpoint until the transaction lands onchain. async function pollEarnStatus(path, idField, id) { for (;;) { const res = await client.request(path, { @@ -52,7 +52,6 @@ This walkthrough runs the complete Earn lifecycle against Base mainnet: find a M } ``` - Query the catalog for USDC vaults on Base. The chain comes from the CAIP-19 asset identifier; results are sorted by TVL. @@ -64,7 +63,7 @@ This walkthrough runs the complete Earn lifecycle against Base mainnet: find a M caip19: "eip155:8453/erc20:0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", provider: "EARN_PROVIDER_MORPHO", }); - + // Pick the vault you want to offer. Here we use Steakhouse USDC. const vault = vaults[0]; console.log(vault.vaultAddress, vault.apyPct, vault.display.usd); @@ -85,7 +84,6 @@ This walkthrough runs the complete Earn lifecycle against Base mainnet: find a M - Enable the vault for your organization with a 1% performance fee (`"100"` bps) paid to your fee wallet. Turnkey pays the deployment gas. This step is safe to re-run: identical parameters return the same addresses without redeploying. @@ -106,7 +104,7 @@ This walkthrough runs the complete Earn lifecycle against Base mainnet: find a M }, }, ); - + const { deployRequestId, wrapperAddress } = deploy.result.earnDeployWrapperResult; ``` @@ -132,9 +130,8 @@ This walkthrough runs the complete Earn lifecycle against Base mainnet: find a M - - Poll until the wrapper is live on-chain. + Poll until the wrapper is live onchain. ```javascript await pollEarnStatus( @@ -144,7 +141,6 @@ This walkthrough runs the complete Earn lifecycle against Base mainnet: find a M ); ``` - USDC has 6 decimals, so 100 USDC is `"100000000"` raw units. The approval and deposit run as one atomic transaction. With `sponsor: true`, Gas Station pays the gas (Pro plan or higher); set it to `false` to have the wallet pay with its own ETH. @@ -166,7 +162,7 @@ This walkthrough runs the complete Earn lifecycle against Base mainnet: find a M }, }, ); - + const { depositRequestId } = deposit.result.earnDepositResult; ``` @@ -192,9 +188,8 @@ This walkthrough runs the complete Earn lifecycle against Base mainnet: find a M - - The activity completing only means the transaction was enqueued. Poll until it's included on-chain. + The activity completing only means the transaction was enqueued. Poll until it's included onchain. ```javascript const { depositTxHash } = await pollEarnStatus( @@ -205,7 +200,6 @@ This walkthrough runs the complete Earn lifecycle against Base mainnet: find a M console.log("deposited:", depositTxHash); ``` - Query the wallet's positions and compute the yield earned so far from the raw fields, using `BigInt` rather than floats or the `display` values. @@ -217,19 +211,18 @@ This walkthrough runs the complete Earn lifecycle against Base mainnet: find a M walletAddress: "", }, ); - + const p = positions.find((p) => p.wrapperAddress === wrapperAddress); - + const yieldEarned = BigInt(p.currentValue) - BigInt(p.totalDeposited) + BigInt(p.totalWithdrawn); - + console.log(`current value: ${p.display.currentValueUsd} USD`); console.log(`yield earned: ${yieldEarned} raw units`); ``` - Exit the full position with `"MAX"`, which redeems the exact live share balance, then poll the withdrawal to confirmation. @@ -249,9 +242,9 @@ This walkthrough runs the complete Earn lifecycle against Base mainnet: find a M }, }, ); - + const { withdrawRequestId } = withdraw.result.earnWithdrawResult; - + const { withdrawTxHash } = await pollEarnStatus( "/public/v1/query/get_earn_withdraw_status", "withdrawRequestId", @@ -266,21 +259,26 @@ This walkthrough runs the complete Earn lifecycle against Base mainnet: find a M - Fee model, chains, and the full API surface. + — Fee model, chains, and the full API surface. + - Catalog and enabled-vault queries in detail. + — Catalog and enabled-vault queries in detail. + - Fee configuration, idempotency, and status polling. + — Fee configuration, idempotency, and status polling. + - Gas options and deposit semantics. + — Gas options and deposit semantics. + - Partial and yield-only withdrawals. + — Partial and yield-only withdrawals. + - Position fields, units, and precision. + — Position fields, units, and precision. - + \ No newline at end of file diff --git a/features/transaction-management/earn/positions.mdx b/features/transaction-management/earn/positions.mdx index aa144b13..61c9d85d 100644 --- a/features/transaction-management/earn/positions.mdx +++ b/features/transaction-management/earn/positions.mdx @@ -1,38 +1,36 @@ --- title: "Track positions" -description: "Query a wallet's active Earn positions: current value, lifetime deposits and withdrawals, and the yield earned." -mode: wide +description: "Query a wallet’s active Earn positions: current value, lifetime deposits and withdrawals, and the yield earned." +mode: "wide" --- -import EarnBetaNote from "/snippets/shared/earn-beta-note.mdx"; + + Earn is currently an Early Access Product. [Contact us](https://www.turnkey.com/contact-us) to enable it for your organization. + -[`list_earn_positions`](/api-reference/queries/get-earn-positions) returns the active positions for a single wallet address, one entry per wrapper the wallet holds shares in, with live on-chain values. It takes your `organizationId` (or the sub-organization that owns the wallet) and the `walletAddress` to return positions for; positions are scoped per wallet, not org-wide. See [Get Earn positions](/api-reference/queries/get-earn-positions) in the API reference for the full request/response schema and cURL example. - - +[`list_earn_positions`](/api-reference/queries/get-earn-positions) returns the active positions for a single wallet address, one entry per wrapper the wallet holds shares in, with live onchain values. It takes your `organizationId` (or the sub-organization that owns the wallet) and the `walletAddress` to return positions for; positions are scoped per wallet, not org-wide. See [Get Earn positions](/api-reference/queries/get-earn-positions) in the API reference for the full request/response schema and cURL example. ## Understanding the fields | Field | Units | Meaning | -| :--- | :--- | :--- | -| `currentValue` | raw on-chain units of the underlying asset | Live value of the position, already net of the wrapper's performance fees. This is what a full withdrawal would return right now | -| `totalDeposited` | raw on-chain units | Lifetime amount deposited into this position since it was opened (or since the last full `MAX` exit) | -| `totalWithdrawn` | raw on-chain units | Lifetime amount withdrawn over the same window | +| :-- | :-- | :-- | +| `currentValue` | raw onchain units of the underlying asset | Live value of the position, already net of the wrapper's fees. This is what a full withdrawal would return right now | +| `totalDeposited` | raw onchain units | Lifetime amount deposited into this position since it was opened (or since the last full `MAX` exit) | +| `totalWithdrawn` | raw onchain units | Lifetime amount withdrawn over the same window | | `display.*` | formatted strings | USD and asset-denominated renderings for UI display only | | `depositsDisabled` | boolean | When `true`, new deposits to this wrapper are currently [paused](/features/transaction-management/earn/deploy-wrapper#manage-a-deployed-wrapper); withdrawals are unaffected | Raw fields are exact base-10 integers in the asset's smallest unit (e.g. `"100512340"` = 100.51234 USDC at 6 decimals). The totals accumulate from your deposit and withdrawal amounts; a [`MAX` withdrawal](/features/transaction-management/earn/withdraw#full-exit-with-max) closes the position and resets both totals to zero. - Don't do arithmetic with `display` values; they are formatted, rounded - strings for presentation. Compute with the raw fields using `BigInt` (or - your language's arbitrary-precision integers) rather than floats. + Don't do arithmetic with `display` values; they are formatted, rounded strings for presentation. Compute with the raw fields using `BigInt` (or your language's arbitrary-precision integers) rather than floats. ## Computing yield Yield earned to date is: -``` +```text yield = currentValue - totalDeposited + totalWithdrawn ``` @@ -46,4 +44,4 @@ For example, a position with `totalDeposited = "100000000"` (100 USDC), `totalWi ## Next steps - [Withdraw from a vault](/features/transaction-management/earn/withdraw) for a partial, yield-only, or `MAX` exit -- [Deposit into a vault](/features/transaction-management/earn/deposit) to grow a position +- [Deposit into a vault](/features/transaction-management/earn/deposit) to grow a position \ No newline at end of file diff --git a/features/transaction-management/earn/vault-catalog.mdx b/features/transaction-management/earn/vault-catalog.mdx index 9ec659d7..0d3bf80a 100644 --- a/features/transaction-management/earn/vault-catalog.mdx +++ b/features/transaction-management/earn/vault-catalog.mdx @@ -1,28 +1,32 @@ --- title: "Browse the vault catalog" description: "Discover the yield vaults available for an asset with live TVL and APY, and list the vaults your organization has enabled." -sidebarTitle: "Vault catalog" -mode: wide +sidebarTitle: "Browse the vault catalog" +mode: "wide" --- -import EarnBetaNote from "/snippets/shared/earn-beta-note.mdx"; + + Earn is currently an Early Access Product. [Contact us](https://www.turnkey.com/contact-us) to enable it for your organization. + Two queries cover vault discovery: [`list_earn_vaults`](/api-reference/queries/get-earn-vault-catalog) returns the market of wrappable vaults for an asset, and [`list_earn_enabled_vaults`](/api-reference/queries/get-earn-enabled-vaults) returns the wrappers your organization has already deployed. Full request/response schemas and cURL examples are in the API reference. - - -## Discover vaults with list_earn_vaults +## Discover vaults with list\_earn\_vaults [`list_earn_vaults`](/api-reference/queries/get-earn-vault-catalog) takes a required CAIP-19 asset identifier (e.g. `eip155:8453/erc20:0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913` for USDC on Base) and returns every wrappable vault for that asset. The chain is derived from the identifier, and you can optionally filter by provider. Reading the results: -- The catalog is sorted by TVL in USD, descending, and only includes vaults with at least **$100k TVL**. -- `tvl` is in raw on-chain units of the underlying asset; `apyPct` is a decimal fraction (`"0.0812"` = 8.12% gross APY, before fees). +- The catalog is sorted by TVL in USD, descending, and only includes vaults with at least **\$100k TVL**. Sort order does not reflect a recommendation, ranking, or endorsement of any vault. +- `tvl` is in raw onchain units of the underlying asset; `apyPct` is a decimal fraction (`"0.0812"` = 8.12% gross APY, before fees). - `display` values are formatted strings for presentation only. Don't do arithmetic with them. - `enabled: true` means your organization already has a wrapper deployed for the vault. - `name` and `curator` carry the provider's human-readable vault name and curator(s), for building vault pickers. + + `apyPct` reflects the vault's gross annual percentage yield at the time of query. Yield is variable, driven by borrower demand, market utilization, and the vault curator's allocation strategy, and may change significantly between the time of query and the time of deposit or withdrawal. Do not present APY or yield figures to end users as fixed or guaranteed rates. + + ### Paging through the catalog Results are cursor-paginated via `paginationOptions` (`limit` defaults to 10, max 100). Each response includes a `pageInfo` block: @@ -33,21 +37,23 @@ Results are cursor-paginated via `paginationOptions` (`limit` defaults to 10, ma ## List your enabled vaults -[`list_earn_enabled_vaults`](/api-reference/queries/get-earn-enabled-vaults) is the management view of every wrapper your organization has deployed, with on-chain totals and the fee breakdown. Optional filters narrow by provider or CAIP-19 asset. +[`list_earn_enabled_vaults`](/api-reference/queries/get-earn-enabled-vaults) is the management view of every wrapper your organization has deployed, with onchain totals and the fee breakdown. Optional filters narrow by provider or CAIP-19 asset. Key fields: - `wrapperAddress` is the deposit target to pass to [`earn_deposit`](/features/transaction-management/earn/deposit); `vaultAddress` is the underlying vault it wraps. -- `apyPct` is the gross APY; `netApyPct` is what depositors earn after both performance fees: `netApy = grossApy × (1 - totalFeeBps / 10000)`. -- `clientFeeBps` is your performance fee for the wrapper, and `totalDeposited` is the wrapper's TVL in raw units of the underlying asset. +- `apyPct` is the gross APY; `netApyPct` is what depositors earn after both fees: `netApy = grossApy × (1 - totalFeeBps / 10000)`. +- `clientFeeBps` is your fee for the wrapper, and `totalDeposited` is the wrapper's TVL in raw units of the underlying asset. - `depositsDisabled: true` means deposits to the wrapper are currently paused via [`earn_set_wrapper_state`](/api-reference/activities/set-earn-wrapper-state); withdrawals are unaffected. -- `claimableClientFee` is your accrued performance fee that is releasable right now, claimable with [`claim_earn_fees`](/api-reference/activities/claim-earn-fees). It is only returned when the parent organization queries; sub-organizations don't see it. +- `claimableClientFee` is your accrued fee that is releasable right now, claimable with [`claim_earn_fees`](/api-reference/activities/claim-earn-fees). It is only returned when the parent organization queries; sub-organizations don't see it. ## Providers Morpho vaults are available today. Aave support is upcoming; the API shape is identical, so no integration changes will be needed. See the [chain support table](/features/transaction-management/earn#supported-protocols-and-chains). +**Important:** The vaults accessible through Earn are operated by independent third-party protocols. These providers are not subcontractors, agents, or affiliates of Turnkey. Turnkey does not manage, audit, or guarantee any vault, its strategy, its curator, or its returns. Turnkey's role is limited to providing the API infrastructure that enables wallet-level interaction with these protocols. + ## Next steps - [Deploy a vault wrapper](/features/transaction-management/earn/deploy-wrapper) for a vault from the catalog -- [Get Earn vault catalog](/api-reference/queries/get-earn-vault-catalog) and [Get Earn enabled vaults](/api-reference/queries/get-earn-enabled-vaults) in the API reference +- [Get Earn vault catalog](/api-reference/queries/get-earn-vault-catalog) and [Get Earn enabled vaults](/api-reference/queries/get-earn-enabled-vaults) in the API reference \ No newline at end of file diff --git a/features/transaction-management/earn/withdraw.mdx b/features/transaction-management/earn/withdraw.mdx deleted file mode 100644 index 2d768a97..00000000 --- a/features/transaction-management/earn/withdraw.mdx +++ /dev/null @@ -1,92 +0,0 @@ ---- -title: "Withdraw from a vault" -description: "Withdraw any amount, just the yield, or the entire position from an enabled yield vault." -mode: wide ---- - -import EarnBetaNote from "/snippets/shared/earn-beta-note.mdx"; - -A withdrawal moves assets from your organization's fee wrapper back to the user's wallet. Amounts are specified in the underlying asset (vault shares are not exposed in the API), or pass `"MAX"` to exit the position entirely. - - - -## Submit the withdrawal - -Submit an [`ACTIVITY_TYPE_EARN_WITHDRAW`](/api-reference/activities/withdraw-from-earn-vault) activity with: - -- the `wrapperAddress` holding the position, from [`list_earn_positions`](/api-reference/queries/get-earn-positions) -- the `signWith` wallet account to withdraw to and sign with -- the `amountValue` in raw on-chain units of the underlying asset (e.g. `"500000"` for 0.50 USDC), or the literal `"MAX"` to withdraw the entire position -- the CAIP-2 chain in `chainCaip2`, and optionally `sponsor` for gas sponsorship - -See [Withdraw from Earn vault](/api-reference/activities/withdraw-from-earn-vault) in the API reference for the full request/response schema and cURL example. The activity result contains only a poll handle, `withdrawRequestId`. - -Withdrawals always work, even when deposits to the wrapper are [paused](/features/transaction-management/earn/deploy-wrapper#manage-a-deployed-wrapper). - -## Full exit with MAX - -`"amountValue": "MAX"` redeems the wallet's exact live share balance in the wrapper, so the position closes completely without leaving dust. - - - A `MAX` withdrawal resets the position's lifetime accounting: after it - confirms, `totalDeposited` and `totalWithdrawn` in - [`list_earn_positions`](/features/transaction-management/earn/positions) start again from zero - for that wrapper. - - -Positions in wrappers you have since replaced (after a [fee change](/features/transaction-management/earn/deploy-wrapper#choose-your-fee-configuration)) remain withdrawable. Target the old wrapper's address. - -## Claiming yield only - -To pay out yield without touching principal, withdraw exactly the yield amount. Compute it from the position's raw fields: - -```javascript title="JavaScript" -const { positions } = await client.request( - "/public/v1/query/list_earn_positions", - { - organizationId: "", - walletAddress: "", - }, -); - -const p = positions.find( - (p) => p.wrapperAddress === "", -); - -// These are raw on-chain unit strings, so use BigInt rather than floats. -const yieldEarned = - BigInt(p.currentValue) - BigInt(p.totalDeposited) + BigInt(p.totalWithdrawn); - -// Withdraw the yield, leave the principal earning. -await client.request("/public/v1/submit/earn_withdraw", { - type: "ACTIVITY_TYPE_EARN_WITHDRAW", - timestampMs: String(Date.now()), - organizationId: "", - parameters: { - wrapperAddress: "", - signWith: "", - amountValue: yieldEarned.toString(), - chainCaip2: "eip155:8453", - sponsor: false, - }, -}); -``` - -## Poll withdrawal status (required) - - - As with deposits, a `COMPLETED` activity means the transaction was enqueued - for broadcast, not that it confirmed. Poll - [`get_earn_withdraw_status`](/api-reference/queries/get-earn-withdraw-status) - until it reports `COMPLETED` (included on-chain) or `FAILED`. - - -Poll with the `withdrawRequestId` from the activity result. `status` is `PENDING`, `COMPLETED`, or `FAILED`; on `COMPLETED` the response carries the `withdrawTxHash`, and on `FAILED` it includes an `error` field with the reason. - -## Gas - -Identical to deposits: `sponsor: true` uses Gas Station (Pro plan or higher); otherwise the `signWith` wallet pays gas natively. See [Gas: sponsored vs self-funded](/features/transaction-management/earn/deposit#gas-sponsored-vs-self-funded). - -## Next steps - -- [Track positions](/features/transaction-management/earn/positions) to verify the position after withdrawing diff --git a/snippets/shared/earn-beta-note.mdx b/snippets/shared/earn-beta-note.mdx index 588cb1af..5e1f1e72 100644 --- a/snippets/shared/earn-beta-note.mdx +++ b/snippets/shared/earn-beta-note.mdx @@ -1,3 +1,3 @@ - Earn is in early access. [Contact us](https://www.turnkey.com/contact-us) to enable it for your organization. + Earn is currently an Early Access Product. [Contact us](https://www.turnkey.com/contact-us) to enable it for your organization. \ No newline at end of file From 70f0f63957c641614c6a0f3ef805db1e2d4fb9a6 Mon Sep 17 00:00:00 2001 From: "mintlify[bot]" <109931778+mintlify[bot]@users.noreply.github.com> Date: Thu, 6 Aug 2026 16:34:16 +0000 Subject: [PATCH 10/15] Updated mintlify pages - Updated features/transaction-management/earn/deploy-wrapper-2.mdx - Updated features/transaction-management/earn.mdx Mintlify-Source: dashboard-editor --- features/transaction-management/earn.mdx | 2 +- features/transaction-management/earn/deploy-wrapper-2.mdx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/features/transaction-management/earn.mdx b/features/transaction-management/earn.mdx index 7185d1ad..8f6fe686 100644 --- a/features/transaction-management/earn.mdx +++ b/features/transaction-management/earn.mdx @@ -1,5 +1,5 @@ --- -title: "Earn (overview)" +title: "Overview" description: "Deposit into DeFi yield vaults from Turnkey wallets, with onchain fee collection for your organization." --- diff --git a/features/transaction-management/earn/deploy-wrapper-2.mdx b/features/transaction-management/earn/deploy-wrapper-2.mdx index aa6e8649..146b5cbb 100644 --- a/features/transaction-management/earn/deploy-wrapper-2.mdx +++ b/features/transaction-management/earn/deploy-wrapper-2.mdx @@ -1,7 +1,7 @@ --- title: "Manage wrappers" description: "Pause deposits, claim your accrued fees, and change or tier your fee by deploying additional wrappers." -sidebarTitle: "Deploy wrapper" +sidebarTitle: "Manage wrappers" mode: "wide" --- From ea41066d45ab3e3d6aca4321370ceedfa195f648 Mon Sep 17 00:00:00 2001 From: "mintlify[bot]" <109931778+mintlify[bot]@users.noreply.github.com> Date: Thu, 6 Aug 2026 16:51:02 +0000 Subject: [PATCH 11/15] Updated mintlify pages - Updated features/transaction-management/earn/end-to-end-example.mdx Mintlify-Source: dashboard-editor --- features/transaction-management/earn/end-to-end-example.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/features/transaction-management/earn/end-to-end-example.mdx b/features/transaction-management/earn/end-to-end-example.mdx index 4f91ef19..53c432b7 100644 --- a/features/transaction-management/earn/end-to-end-example.mdx +++ b/features/transaction-management/earn/end-to-end-example.mdx @@ -85,7 +85,7 @@ This walkthrough runs the complete Earn lifecycle against Base mainnet: find a M - Enable the vault for your organization with a 1% performance fee (`"100"` bps) paid to your fee wallet. Turnkey pays the deployment gas. This step is safe to re-run: identical parameters return the same addresses without redeploying. + Enable the vault for your organization with a 1% fee on yield (`"100"` bps) paid to your fee wallet. Turnkey pays the deployment gas. This step is safe to re-run: identical parameters return the same addresses without redeploying. From 9088ed5c56e2d134cc9870ad5c71b9c782969413 Mon Sep 17 00:00:00 2001 From: "mintlify[bot]" <109931778+mintlify[bot]@users.noreply.github.com> Date: Thu, 6 Aug 2026 16:58:08 +0000 Subject: [PATCH 12/15] Updated mintlify pages - Updated features/transaction-management/earn.mdx - Updated features/transaction-management/earn/vault-catalog.mdx - Updated features/transaction-management/earn/deploy-wrapper.mdx - Updated features/transaction-management/earn/deploy-wrapper-2.mdx - Updated features/transaction-management/earn/deposit.mdx - Updated features/transaction-management/earn/positions.mdx - Updated features/transaction-management/earn/end-to-end-example.mdx Mintlify-Source: dashboard-editor --- features/transaction-management/earn.mdx | 4 ++-- features/transaction-management/earn/deploy-wrapper-2.mdx | 8 ++++---- features/transaction-management/earn/deploy-wrapper.mdx | 4 ++-- features/transaction-management/earn/deposit.mdx | 4 ++-- .../transaction-management/earn/end-to-end-example.mdx | 4 ++-- features/transaction-management/earn/positions.mdx | 4 ++-- features/transaction-management/earn/vault-catalog.mdx | 4 ++-- 7 files changed, 16 insertions(+), 16 deletions(-) diff --git a/features/transaction-management/earn.mdx b/features/transaction-management/earn.mdx index 8f6fe686..e1d99cf5 100644 --- a/features/transaction-management/earn.mdx +++ b/features/transaction-management/earn.mdx @@ -3,12 +3,12 @@ title: "Overview" description: "Deposit into DeFi yield vaults from Turnkey wallets, with onchain fee collection for your organization." --- +Earn lets wallets in your organization deposit into DeFi yield vaults, query position data to track their positions, and withdraw, all through Turnkey activities with the corresponding audit trail and policy controls. You can take your own fee on the yield your users earn, paid onchain to a wallet you control. + Earn is currently an Early Access Product. [Contact us](https://www.turnkey.com/contact-us) to enable it for your organization. -Earn lets wallets in your organization deposit into DeFi yield vaults, query position data to track their positions, and withdraw, all through Turnkey activities with the corresponding audit trail and policy controls. You can take your own fee on the yield your users earn, paid onchain to a wallet you control. - ## What is Earn Earn connects Turnkey wallets to ERC-4626 yield vaults. The vaults are deployed and operated by independent third-party protocols; Turnkey provides the API infrastructure to interact with them but does not operate, manage, or guarantee them. Morpho vaults are supported today and Aave support is coming soon. diff --git a/features/transaction-management/earn/deploy-wrapper-2.mdx b/features/transaction-management/earn/deploy-wrapper-2.mdx index 146b5cbb..76f9c347 100644 --- a/features/transaction-management/earn/deploy-wrapper-2.mdx +++ b/features/transaction-management/earn/deploy-wrapper-2.mdx @@ -5,10 +5,6 @@ sidebarTitle: "Manage wrappers" mode: "wide" --- - - Earn is currently an Early Access Product. [Contact us](https://www.turnkey.com/contact-us) to enable it for your organization. - - A deployed wrapper is immutable. It points at the same underlying vault, its fee configuration cannot change, and the deploy abdicates the contract's deposit, withdrawal, and transfer gates, so no one, including Turnkey, can ever restrict user access to funds. What you control after deployment: @@ -19,6 +15,10 @@ What you control after deployment: Management operations are parent-organization only; sub-organization wallets can deposit and withdraw but cannot manage wrappers. + + Earn is currently an Early Access Product. [Contact us](https://www.turnkey.com/contact-us) to enable it for your organization. + + ## Pause or resume deposits [`earn_set_wrapper_state`](/api-reference/activities/set-earn-wrapper-state) sets `depositsDisabled` on a wrapper. While true, earn\_deposit against that wrapper is rejected. Withdrawals, position queries, and fee claims are unaffected, so a paused wrapper can never trap funds. Set it back to false to resume deposits. diff --git a/features/transaction-management/earn/deploy-wrapper.mdx b/features/transaction-management/earn/deploy-wrapper.mdx index 8dee21e6..b70c1b0f 100644 --- a/features/transaction-management/earn/deploy-wrapper.mdx +++ b/features/transaction-management/earn/deploy-wrapper.mdx @@ -5,12 +5,12 @@ sidebarTitle: "Deploy a vault wrapper" mode: "wide" --- +Before your users can deposit into a vault, your organization must deploy a **fee wrapper** for it. The wrapper is the contract users actually deposit into. It routes funds to the underlying vault and collects the applicable fees out of the yield, by minting fee shares to a payment splitter as interest accrues.. Deploying it is a one-time activity per vault, with gas sponsored by Turnkey. + Earn is currently an Early Access Product. [Contact us](https://www.turnkey.com/contact-us) to enable it for your organization. -Before your users can deposit into a vault, your organization must deploy a **fee wrapper** for it. The wrapper is the contract users actually deposit into. It routes funds to the underlying vault and collects the applicable fees out of the yield, by minting fee shares to a payment splitter as interest accrues.. Deploying it is a one-time activity per vault, with gas sponsored by Turnkey. - ## When to deploy Deploy once per vault you want to offer, per fee configuration. Deposits into a vault with no deployed wrapper fail with `EARN_SETUP_REQUIRED` (see [Deposit into a vault](/features/transaction-management/earn/deposit#prerequisites)). Pick vaults from the [vault catalog](/features/transaction-management/earn/vault-catalog); the catalog's `enabled` flag tells you which vaults your organization has already enabled. diff --git a/features/transaction-management/earn/deposit.mdx b/features/transaction-management/earn/deposit.mdx index 9a70820d..040bb53d 100644 --- a/features/transaction-management/earn/deposit.mdx +++ b/features/transaction-management/earn/deposit.mdx @@ -4,12 +4,12 @@ description: "Move assets from a Turnkey wallet into an enabled yield vault in o mode: "wide" --- +When a user initiates a deposit into a vault, you pass through their intents via our API where we then form and broadcast the transaction to deposit those assets into your organization's fee wrapper for a given vault. The token approval and the vault deposit execute as a single atomic batch transaction, so there is no separate approval step to manage. + Earn is currently an Early Access Product. [Contact us](https://www.turnkey.com/contact-us) to enable it for your organization. -When a user initiates a deposit into a vault, you pass through their intents via our API where we then form and broadcast the transaction to deposit those assets into your organization's fee wrapper for a given vault. The token approval and the vault deposit execute as a single atomic batch transaction, so there is no separate approval step to manage. - ## Prerequisites - Your organization has [deployed a wrapper](/features/transaction-management/earn/deploy-wrapper) for the vault, and its deployment status is `COMPLETED`. Deposits targeting an address with no deployed wrapper fail with `EARN_SETUP_REQUIRED`. diff --git a/features/transaction-management/earn/end-to-end-example.mdx b/features/transaction-management/earn/end-to-end-example.mdx index 53c432b7..0ef1ca79 100644 --- a/features/transaction-management/earn/end-to-end-example.mdx +++ b/features/transaction-management/earn/end-to-end-example.mdx @@ -5,12 +5,12 @@ sidebarTitle: "End-to-end example: earn on Base" mode: "wide" --- +This walkthrough runs the complete Earn lifecycle against Base mainnet: find a Morpho USDC vault (we’ll use Steakhouse USDC), enable it, deposit 100 USDC from a Turnkey wallet, check the position, and withdraw everything. + Earn is currently an Early Access Product. [Contact us](https://www.turnkey.com/contact-us) to enable it for your organization. -This walkthrough runs the complete Earn lifecycle against Base mainnet: find a Morpho USDC vault (we’ll use Steakhouse USDC), enable it, deposit 100 USDC from a Turnkey wallet, check the position, and withdraw everything. - **Prerequisites** - Earn Early access enabled for your organization (and a Pro plan or higher if you want gas sponsorship) diff --git a/features/transaction-management/earn/positions.mdx b/features/transaction-management/earn/positions.mdx index 61c9d85d..27266513 100644 --- a/features/transaction-management/earn/positions.mdx +++ b/features/transaction-management/earn/positions.mdx @@ -4,12 +4,12 @@ description: "Query a wallet’s active Earn positions: current value, lifetime mode: "wide" --- +[`list_earn_positions`](/api-reference/queries/get-earn-positions) returns the active positions for a single wallet address, one entry per wrapper the wallet holds shares in, with live onchain values. It takes your `organizationId` (or the sub-organization that owns the wallet) and the `walletAddress` to return positions for; positions are scoped per wallet, not org-wide. See [Get Earn positions](/api-reference/queries/get-earn-positions) in the API reference for the full request/response schema and cURL example. + Earn is currently an Early Access Product. [Contact us](https://www.turnkey.com/contact-us) to enable it for your organization. -[`list_earn_positions`](/api-reference/queries/get-earn-positions) returns the active positions for a single wallet address, one entry per wrapper the wallet holds shares in, with live onchain values. It takes your `organizationId` (or the sub-organization that owns the wallet) and the `walletAddress` to return positions for; positions are scoped per wallet, not org-wide. See [Get Earn positions](/api-reference/queries/get-earn-positions) in the API reference for the full request/response schema and cURL example. - ## Understanding the fields | Field | Units | Meaning | diff --git a/features/transaction-management/earn/vault-catalog.mdx b/features/transaction-management/earn/vault-catalog.mdx index 0d3bf80a..49f184a6 100644 --- a/features/transaction-management/earn/vault-catalog.mdx +++ b/features/transaction-management/earn/vault-catalog.mdx @@ -5,12 +5,12 @@ sidebarTitle: "Browse the vault catalog" mode: "wide" --- +Two queries cover vault discovery: [`list_earn_vaults`](/api-reference/queries/get-earn-vault-catalog) returns the market of wrappable vaults for an asset, and [`list_earn_enabled_vaults`](/api-reference/queries/get-earn-enabled-vaults) returns the wrappers your organization has already deployed. Full request/response schemas and cURL examples are in the API reference. + Earn is currently an Early Access Product. [Contact us](https://www.turnkey.com/contact-us) to enable it for your organization. -Two queries cover vault discovery: [`list_earn_vaults`](/api-reference/queries/get-earn-vault-catalog) returns the market of wrappable vaults for an asset, and [`list_earn_enabled_vaults`](/api-reference/queries/get-earn-enabled-vaults) returns the wrappers your organization has already deployed. Full request/response schemas and cURL examples are in the API reference. - ## Discover vaults with list\_earn\_vaults [`list_earn_vaults`](/api-reference/queries/get-earn-vault-catalog) takes a required CAIP-19 asset identifier (e.g. `eip155:8453/erc20:0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913` for USDC on Base) and returns every wrappable vault for that asset. The chain is derived from the identifier, and you can optionally filter by provider. From 443a7f54878cfc250c4ffb320278effb7f94dd8a Mon Sep 17 00:00:00 2001 From: "mintlify[bot]" <109931778+mintlify[bot]@users.noreply.github.com> Date: Thu, 6 Aug 2026 17:29:40 +0000 Subject: [PATCH 13/15] Updated mintlify pages - Updated features/transaction-management/earn.mdx - Updated features/transaction-management/earn/vault-catalog.mdx - Updated features/transaction-management/earn/deploy-wrapper.mdx - Updated features/transaction-management/earn/deposit.mdx - Updated features/transaction-management/earn/positions.mdx - Updated features/transaction-management/earn/end-to-end-example.mdx - Updated features/transaction-management/earn/deploy-wrapper-2.mdx Mintlify-Source: dashboard-editor --- .../transaction-management/earn/deploy-wrapper-2.mdx | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/features/transaction-management/earn/deploy-wrapper-2.mdx b/features/transaction-management/earn/deploy-wrapper-2.mdx index 76f9c347..252bcbbc 100644 --- a/features/transaction-management/earn/deploy-wrapper-2.mdx +++ b/features/transaction-management/earn/deploy-wrapper-2.mdx @@ -25,7 +25,7 @@ Management operations are parent-organization only; sub-organization wallets can Pausing gates deposits submitted through the Turnkey API; it is not an onchain lock. The wrapper remains a permissionless ERC-4626 contract that anyone can interact with directly onchain. -Read the current state from `depositsDisabled` on [`list_earn_enabled_vaults`](/api-reference/queries/get-earn-enabled-vaults), or on each row of [`list_earn_enabled_vaults`](/api-reference/queries/get-earn-enabled-vaults) so your UI can hide the deposit button for paused wrappers. +Read the current state from `depositsDisabled` on [`list_earn_enabled_vaults`](/api-reference/queries/get-earn-enabled-vaults), or on each row of [`list_earn_positions`](/api-reference/queries/get-earn-positions) so your UI can hide the deposit button for paused wrappers. Common uses: stopping new deposits into a vault that looks compromised while users exit at their own pace, and winding down a wrapper after replacing it with a new fee configuration. @@ -37,6 +37,14 @@ Fees accrue onchain as wrapper shares held by the wrapper's payment splitter. Th 2. Submit [`claim_earn_fees`](/api-reference/activities/claim-earn-fees) with the `wrapperAddress`. One transaction releases your fee shares from the splitter to your `clientFeeWallet` and redeems them into the underlying asset, so the payout arrives as the asset (for example USDC), not as vault shares. 3. Poll [`get_claim_earn_fees_status`](/api-reference/queries/get-claim-earn-fees-status) with the returned `claimRequestId`. As with every Earn transaction, `COMPLETED` on the activity means submitted, not confirmed onchain. +Details: + +- The claim releases exactly what is claimable. If your fee wallet also holds a deposit position in the same wrapper, the claim never touches that principal. +- The claim signs from your `clientFeeWallet`, so your organization's policies apply to it. +- Claim transactions require gas sponsorship. Gas is covered at transaction time and billed on your next invoice. +- Claiming with nothing accrued fails with an explicit error. +- Fees are per wrapper. If you run more than one wrapper for a vault, each has its own splitter and claimable balance; iterate over every wrapper in [`list_earn_enabled_vaults`](/api-reference/queries/get-earn-enabled-vaults). + ## Change or tier your fee A wrapper is unique to its vault and fee configuration (`clientFeeBps` and `clientFeeWallet`). To change your fee or payout wallet, or tier fees for the same underlying vault, deploy a new wrapper for the same vault. The two wrappers coexist permanently: neither invalidates the other, each has its own configuration and claimable balance, and each is an independent depositor in the underlying vault. This one mechanic covers both replacing your fee and offering different rates to different audiences. From 5cbfb02dc8ba95927387dff4ea324eb71fa70948 Mon Sep 17 00:00:00 2001 From: DeRauk Gibble Date: Thu, 6 Aug 2026 14:13:11 -0400 Subject: [PATCH 14/15] Resetting some things to main --- .../activities/deploy-earn-wrapper.mdx | 230 + .../remove-organization-feature.mdx | 209 + .../activities/set-organization-feature.mdx | 219 + api-reference/queries/get-activity.mdx | 9152 ++++++ api-reference/queries/get-configs.mdx | 117 + .../queries/get-earn-deploy-status.mdx | 80 + .../queries/get-earn-deposit-status.mdx | 80 + .../queries/get-earn-enabled-vaults.mdx | 175 + .../queries/get-earn-withdraw-status.mdx | 80 + api-reference/queries/list-activities.mdx | 11121 ++++++++ public_api.swagger.json | 20543 ++++++++++++++ scripts/openapi-gen/openapi.json | 23211 ++++++++++++++++ .../utils/mdx-generator/generator.ts | 14 +- snippets/data/endpoint-tags.mdx | 243 - 14 files changed, 65223 insertions(+), 251 deletions(-) diff --git a/api-reference/activities/deploy-earn-wrapper.mdx b/api-reference/activities/deploy-earn-wrapper.mdx index e69de29b..204ff4b4 100644 --- a/api-reference/activities/deploy-earn-wrapper.mdx +++ b/api-reference/activities/deploy-earn-wrapper.mdx @@ -0,0 +1,230 @@ +--- +title: "Deploy Earn wrapper" +description: "Enable a yield vault for an organization by deploying its fee wrapper. Must be called before any deposits into the vault." +--- + +import { Authorizations } from "/snippets/api/authorizations.mdx"; +import { H3Bordered } from "/snippets/h3-bordered.mdx"; +import { NestedParam } from "/snippets/nested-param.mdx"; +import { EndpointPath } from "/snippets/api/endpoint.mdx"; + + + + + + + + + +Enum options: `ACTIVITY_TYPE_EARN_DEPLOY_WRAPPER` + + + + +Timestamp (in milliseconds) of the request, used to verify liveness of user requests. + + + + +Unique identifier for a given Organization. + + + +

The parameters object containing the specific intent data for this activity.

+ + + Address of the underlying yield vault to wrap (from the ListEarnVaults catalog). + + + + Enum options: `eip155:1`, `eip155:8453`, `eip155:42161`, `eip155:137`, `eip155:56`, `eip155:4217` + + + + Your fee on gross yield, in basis points (e.g., '2000' for 20%). Maximum is 4000 (40%). + + + + The wallet address that receives the client's fee payouts on-chain. Must be a Turnkey-managed wallet address. + + +
+ + +Enable to have your activity generate and return App Proofs, enabling verifiability. + + + + +A successful response returns the following fields: + + + The activity object containing type, intent, and result + + +Unique identifier for a given Activity object. + + +Unique identifier for a given Organization. + + +The activity status + + +The activity type + + + The intent of the activity + + + The earnDeployWrapperIntent object + + +Address of the underlying yield vault to wrap (from the ListEarnVaults catalog). + + +CAIP-2 chain ID the vault lives on (e.g., 'eip155:8453' for Base). + +Enum options: `eip155:1`, `eip155:8453`, `eip155:42161`, `eip155:137`, `eip155:56`, `eip155:4217` + + + +Your fee on gross yield, in basis points (e.g., '2000' for 20%). Maximum is 4000 (40%). + + +The wallet address that receives the client's fee payouts on-chain. Must be a Turnkey-managed wallet address. + + + + + + + + + The result of the activity + + + The earnDeployWrapperResult object + + +Address of the deployed fee wrapper (the deposit target). + + +Address of the deployed fee splitter (PaymentSplitter for Morpho, RevenueSplitterOwner for Aave). + + +Identifier to poll deploy status. + + + + + + + + +A list of objects representing a particular User's approval or rejection of a Consensus request, including all relevant metadata. + + +An artifact verifying a User's action. + + +Whether the activity can be approved. + + +Whether the activity can be rejected. + + +The creation timestamp. + + +The last update timestamp. + + + + + + + +```bash title="cURL" +curl --request POST \ + --url https://api.turnkey.com/public/v1/submit/earn_deploy_wrapper \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header "X-Stamp: (see Authorizations)" \ + --data '{ + "type": "ACTIVITY_TYPE_EARN_DEPLOY_WRAPPER", + "timestampMs": " (e.g. 1746736509954)", + "organizationId": " (Your Organization ID)", + "parameters": { + "vaultAddress": "", + "chainCaip2": "", + "clientFeeBps": "", + "clientFeeWallet": "" + } +}' +``` + +```javascript title="JavaScript" +import { Turnkey } from "@turnkey/sdk-server"; + +const turnkeyClient = new Turnkey({ + apiBaseUrl: "https://api.turnkey.com", + apiPublicKey: process.env.API_PUBLIC_KEY!, + apiPrivateKey: process.env.API_PRIVATE_KEY!, + defaultOrganizationId: process.env.ORGANIZATION_ID!, +}); + +const response = await turnkeyClient.apiClient().earnDeployWrapper({ + vaultAddress: " (Address of the underlying yield vault to wrap (from the ListEarnVaults catalog).)", + chainCaip2: "" // CAIP-2 chain ID the vault lives on (e.g., 'eip155:8453' for Base)., + clientFeeBps: " (Your fee on gross yield, in basis points (e.g., '2000' for 20%). Maximum is 4000 (40%).)", + clientFeeWallet: " (The wallet address that receives the client's fee payouts on-chain. Must be a Turnkey-managed wallet address.)" +}); +``` + + + + + +```json 200 +{ + "activity": { + "id": "", + "status": "ACTIVITY_STATUS_COMPLETED", + "type": "ACTIVITY_TYPE_EARN_DEPLOY_WRAPPER", + "organizationId": "", + "timestampMs": " (e.g. 1746736509954)", + "result": { + "activity": { + "id": "", + "organizationId": "", + "status": "", + "type": "", + "intent": { + "earnDeployWrapperIntent": { + "vaultAddress": "", + "chainCaip2": "", + "clientFeeBps": "", + "clientFeeWallet": "" + } + }, + "result": { + "earnDeployWrapperResult": { + "wrapperAddress": "", + "splitterAddress": "", + "deployRequestId": "" + } + }, + "votes": "", + "fingerprint": "", + "canApprove": "", + "canReject": "", + "createdAt": "", + "updatedAt": "" + } + } + } +} +``` + + diff --git a/api-reference/activities/remove-organization-feature.mdx b/api-reference/activities/remove-organization-feature.mdx index e69de29b..b9977ac3 100644 --- a/api-reference/activities/remove-organization-feature.mdx +++ b/api-reference/activities/remove-organization-feature.mdx @@ -0,0 +1,209 @@ +--- +title: "Remove organization feature" +description: "Remove an organization feature. This activity must be approved by the current root quorum." +--- + +import { Authorizations } from "/snippets/api/authorizations.mdx"; +import { H3Bordered } from "/snippets/h3-bordered.mdx"; +import { NestedParam } from "/snippets/nested-param.mdx"; +import { EndpointPath } from "/snippets/api/endpoint.mdx"; + + + + + + + + + +Enum options: `ACTIVITY_TYPE_REMOVE_ORGANIZATION_FEATURE` + + + + +Timestamp (in milliseconds) of the request, used to verify liveness of user requests. + + + + +Unique identifier for a given Organization. + + + +

The parameters object containing the specific intent data for this activity.

+ + + Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_SWAP_CONFIG`, `FEATURE_NAME_EARN_CONFIG` + + +
+ + +Enable to have your activity generate and return App Proofs, enabling verifiability. + + + + +A successful response returns the following fields: + + + The activity object containing type, intent, and result + + +Unique identifier for a given Activity object. + + +Unique identifier for a given Organization. + + +The activity status + + +The activity type + + + The intent of the activity + + + The removeOrganizationFeatureIntent object + + +name field + +Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_SWAP_CONFIG`, `FEATURE_NAME_EARN_CONFIG` + + + + + + + + + + The result of the activity + + + The removeOrganizationFeatureResult object + + + Resulting list of organization features. + + +name field + +Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_SWAP_CONFIG`, `FEATURE_NAME_EARN_CONFIG` + + + +value field + + + + + + + + + + + +A list of objects representing a particular User's approval or rejection of a Consensus request, including all relevant metadata. + + +An artifact verifying a User's action. + + +Whether the activity can be approved. + + +Whether the activity can be rejected. + + +The creation timestamp. + + +The last update timestamp. + + + + + + + +```bash title="cURL" +curl --request POST \ + --url https://api.turnkey.com/public/v1/submit/remove_organization_feature \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header "X-Stamp: (see Authorizations)" \ + --data '{ + "type": "ACTIVITY_TYPE_REMOVE_ORGANIZATION_FEATURE", + "timestampMs": " (e.g. 1746736509954)", + "organizationId": " (Your Organization ID)", + "parameters": { + "name": "" + } +}' +``` + +```javascript title="JavaScript" +import { Turnkey } from "@turnkey/sdk-server"; + +const turnkeyClient = new Turnkey({ + apiBaseUrl: "https://api.turnkey.com", + apiPublicKey: process.env.API_PUBLIC_KEY!, + apiPrivateKey: process.env.API_PRIVATE_KEY!, + defaultOrganizationId: process.env.ORGANIZATION_ID!, +}); + +const response = await turnkeyClient.apiClient().removeOrganizationFeature({ + name: "" // name field +}); +``` + + + + + +```json 200 +{ + "activity": { + "id": "", + "status": "ACTIVITY_STATUS_COMPLETED", + "type": "ACTIVITY_TYPE_REMOVE_ORGANIZATION_FEATURE", + "organizationId": "", + "timestampMs": " (e.g. 1746736509954)", + "result": { + "activity": { + "id": "", + "organizationId": "", + "status": "", + "type": "", + "intent": { + "removeOrganizationFeatureIntent": { + "name": "" + } + }, + "result": { + "removeOrganizationFeatureResult": { + "features": [ + { + "name": "", + "value": "" + } + ] + } + }, + "votes": "", + "fingerprint": "", + "canApprove": "", + "canReject": "", + "createdAt": "", + "updatedAt": "" + } + } + } +} +``` + + diff --git a/api-reference/activities/set-organization-feature.mdx b/api-reference/activities/set-organization-feature.mdx index e69de29b..59caeb75 100644 --- a/api-reference/activities/set-organization-feature.mdx +++ b/api-reference/activities/set-organization-feature.mdx @@ -0,0 +1,219 @@ +--- +title: "Set organization feature" +description: "Set an organization feature. This activity must be approved by the current root quorum." +--- + +import { Authorizations } from "/snippets/api/authorizations.mdx"; +import { H3Bordered } from "/snippets/h3-bordered.mdx"; +import { NestedParam } from "/snippets/nested-param.mdx"; +import { EndpointPath } from "/snippets/api/endpoint.mdx"; + + + + + + + + + +Enum options: `ACTIVITY_TYPE_SET_ORGANIZATION_FEATURE` + + + + +Timestamp (in milliseconds) of the request, used to verify liveness of user requests. + + + + +Unique identifier for a given Organization. + + + +

The parameters object containing the specific intent data for this activity.

+ + + Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_SWAP_CONFIG`, `FEATURE_NAME_EARN_CONFIG` + + + + Optional value for the feature. Will override existing values if feature is already set. + + +
+ + +Enable to have your activity generate and return App Proofs, enabling verifiability. + + + + +A successful response returns the following fields: + + + The activity object containing type, intent, and result + + +Unique identifier for a given Activity object. + + +Unique identifier for a given Organization. + + +The activity status + + +The activity type + + + The intent of the activity + + + The setOrganizationFeatureIntent object + + +name field + +Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_SWAP_CONFIG`, `FEATURE_NAME_EARN_CONFIG` + + + +Optional value for the feature. Will override existing values if feature is already set. + + + + + + + + + The result of the activity + + + The setOrganizationFeatureResult object + + + Resulting list of organization features. + + +name field + +Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_SWAP_CONFIG`, `FEATURE_NAME_EARN_CONFIG` + + + +value field + + + + + + + + + + + +A list of objects representing a particular User's approval or rejection of a Consensus request, including all relevant metadata. + + +An artifact verifying a User's action. + + +Whether the activity can be approved. + + +Whether the activity can be rejected. + + +The creation timestamp. + + +The last update timestamp. + + + + + + + +```bash title="cURL" +curl --request POST \ + --url https://api.turnkey.com/public/v1/submit/set_organization_feature \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header "X-Stamp: (see Authorizations)" \ + --data '{ + "type": "ACTIVITY_TYPE_SET_ORGANIZATION_FEATURE", + "timestampMs": " (e.g. 1746736509954)", + "organizationId": " (Your Organization ID)", + "parameters": { + "name": "", + "value": "" + } +}' +``` + +```javascript title="JavaScript" +import { Turnkey } from "@turnkey/sdk-server"; + +const turnkeyClient = new Turnkey({ + apiBaseUrl: "https://api.turnkey.com", + apiPublicKey: process.env.API_PUBLIC_KEY!, + apiPrivateKey: process.env.API_PRIVATE_KEY!, + defaultOrganizationId: process.env.ORGANIZATION_ID!, +}); + +const response = await turnkeyClient.apiClient().setOrganizationFeature({ + name: "" // name field, + value: " (Optional value for the feature. Will override existing values if feature is already set.)" +}); +``` + + + + + +```json 200 +{ + "activity": { + "id": "", + "status": "ACTIVITY_STATUS_COMPLETED", + "type": "ACTIVITY_TYPE_SET_ORGANIZATION_FEATURE", + "organizationId": "", + "timestampMs": " (e.g. 1746736509954)", + "result": { + "activity": { + "id": "", + "organizationId": "", + "status": "", + "type": "", + "intent": { + "setOrganizationFeatureIntent": { + "name": "", + "value": "" + } + }, + "result": { + "setOrganizationFeatureResult": { + "features": [ + { + "name": "", + "value": "" + } + ] + } + }, + "votes": "", + "fingerprint": "", + "canApprove": "", + "canReject": "", + "createdAt": "", + "updatedAt": "" + } + } + } +} +``` + + diff --git a/api-reference/queries/get-activity.mdx b/api-reference/queries/get-activity.mdx index e69de29b..0c3d152c 100644 --- a/api-reference/queries/get-activity.mdx +++ b/api-reference/queries/get-activity.mdx @@ -0,0 +1,9152 @@ +--- +title: "Get activity" +description: "Get details about an activity." +--- + +import { Authorizations } from "/snippets/api/authorizations.mdx"; +import { H3Bordered } from "/snippets/h3-bordered.mdx"; +import { NestedParam } from "/snippets/nested-param.mdx"; +import { EndpointPath } from "/snippets/api/endpoint.mdx"; + + + + + + + + + +Unique identifier for a given organization. + + + + +Unique identifier for a given activity object. + + + + +A successful response returns the following fields: + + + activity field + + +Unique identifier for a given Activity object. + + +Unique identifier for a given Organization. + + +status field + +Enum options: `ACTIVITY_STATUS_CREATED`, `ACTIVITY_STATUS_PENDING`, `ACTIVITY_STATUS_COMPLETED`, `ACTIVITY_STATUS_FAILED`, `ACTIVITY_STATUS_CONSENSUS_NEEDED`, `ACTIVITY_STATUS_REJECTED`, `ACTIVITY_STATUS_AUTHENTICATORS_NEEDED` + + + +type field + +Enum options: `ACTIVITY_TYPE_CREATE_API_KEYS`, `ACTIVITY_TYPE_CREATE_USERS`, `ACTIVITY_TYPE_CREATE_PRIVATE_KEYS`, `ACTIVITY_TYPE_SIGN_RAW_PAYLOAD`, `ACTIVITY_TYPE_CREATE_INVITATIONS`, `ACTIVITY_TYPE_ACCEPT_INVITATION`, `ACTIVITY_TYPE_CREATE_POLICY`, `ACTIVITY_TYPE_DISABLE_PRIVATE_KEY`, `ACTIVITY_TYPE_DELETE_USERS`, `ACTIVITY_TYPE_DELETE_API_KEYS`, `ACTIVITY_TYPE_DELETE_INVITATION`, `ACTIVITY_TYPE_DELETE_ORGANIZATION`, `ACTIVITY_TYPE_DELETE_POLICY`, `ACTIVITY_TYPE_CREATE_USER_TAG`, `ACTIVITY_TYPE_DELETE_USER_TAGS`, `ACTIVITY_TYPE_CREATE_ORGANIZATION`, `ACTIVITY_TYPE_SIGN_TRANSACTION`, `ACTIVITY_TYPE_APPROVE_ACTIVITY`, `ACTIVITY_TYPE_REJECT_ACTIVITY`, `ACTIVITY_TYPE_DELETE_AUTHENTICATORS`, `ACTIVITY_TYPE_CREATE_AUTHENTICATORS`, `ACTIVITY_TYPE_CREATE_PRIVATE_KEY_TAG`, `ACTIVITY_TYPE_DELETE_PRIVATE_KEY_TAGS`, `ACTIVITY_TYPE_SET_PAYMENT_METHOD`, `ACTIVITY_TYPE_ACTIVATE_BILLING_TIER`, `ACTIVITY_TYPE_DELETE_PAYMENT_METHOD`, `ACTIVITY_TYPE_CREATE_POLICY_V2`, `ACTIVITY_TYPE_CREATE_POLICY_V3`, `ACTIVITY_TYPE_CREATE_API_ONLY_USERS`, `ACTIVITY_TYPE_UPDATE_ROOT_QUORUM`, `ACTIVITY_TYPE_UPDATE_USER_TAG`, `ACTIVITY_TYPE_UPDATE_PRIVATE_KEY_TAG`, `ACTIVITY_TYPE_CREATE_AUTHENTICATORS_V2`, `ACTIVITY_TYPE_CREATE_ORGANIZATION_V2`, `ACTIVITY_TYPE_CREATE_USERS_V2`, `ACTIVITY_TYPE_ACCEPT_INVITATION_V2`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V2`, `ACTIVITY_TYPE_UPDATE_ALLOWED_ORIGINS`, `ACTIVITY_TYPE_CREATE_PRIVATE_KEYS_V2`, `ACTIVITY_TYPE_UPDATE_USER`, `ACTIVITY_TYPE_UPDATE_POLICY`, `ACTIVITY_TYPE_SET_PAYMENT_METHOD_V2`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V3`, `ACTIVITY_TYPE_CREATE_WALLET`, `ACTIVITY_TYPE_CREATE_WALLET_ACCOUNTS`, `ACTIVITY_TYPE_INIT_USER_EMAIL_RECOVERY`, `ACTIVITY_TYPE_RECOVER_USER`, `ACTIVITY_TYPE_SET_ORGANIZATION_FEATURE`, `ACTIVITY_TYPE_REMOVE_ORGANIZATION_FEATURE`, `ACTIVITY_TYPE_SIGN_RAW_PAYLOAD_V2`, `ACTIVITY_TYPE_SIGN_TRANSACTION_V2`, `ACTIVITY_TYPE_EXPORT_PRIVATE_KEY`, `ACTIVITY_TYPE_EXPORT_WALLET`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V4`, `ACTIVITY_TYPE_EMAIL_AUTH`, `ACTIVITY_TYPE_EXPORT_WALLET_ACCOUNT`, `ACTIVITY_TYPE_INIT_IMPORT_WALLET`, `ACTIVITY_TYPE_IMPORT_WALLET`, `ACTIVITY_TYPE_INIT_IMPORT_PRIVATE_KEY`, `ACTIVITY_TYPE_IMPORT_PRIVATE_KEY`, `ACTIVITY_TYPE_CREATE_POLICIES`, `ACTIVITY_TYPE_SIGN_RAW_PAYLOADS`, `ACTIVITY_TYPE_CREATE_READ_ONLY_SESSION`, `ACTIVITY_TYPE_CREATE_OAUTH_PROVIDERS`, `ACTIVITY_TYPE_DELETE_OAUTH_PROVIDERS`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V5`, `ACTIVITY_TYPE_OAUTH`, `ACTIVITY_TYPE_CREATE_API_KEYS_V2`, `ACTIVITY_TYPE_CREATE_READ_WRITE_SESSION`, `ACTIVITY_TYPE_EMAIL_AUTH_V2`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V6`, `ACTIVITY_TYPE_DELETE_PRIVATE_KEYS`, `ACTIVITY_TYPE_DELETE_WALLETS`, `ACTIVITY_TYPE_CREATE_READ_WRITE_SESSION_V2`, `ACTIVITY_TYPE_DELETE_SUB_ORGANIZATION`, `ACTIVITY_TYPE_INIT_OTP_AUTH`, `ACTIVITY_TYPE_OTP_AUTH`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V7`, `ACTIVITY_TYPE_UPDATE_WALLET`, `ACTIVITY_TYPE_UPDATE_POLICY_V2`, `ACTIVITY_TYPE_CREATE_USERS_V3`, `ACTIVITY_TYPE_INIT_OTP_AUTH_V2`, `ACTIVITY_TYPE_INIT_OTP`, `ACTIVITY_TYPE_VERIFY_OTP`, `ACTIVITY_TYPE_OTP_LOGIN`, `ACTIVITY_TYPE_STAMP_LOGIN`, `ACTIVITY_TYPE_OAUTH_LOGIN`, `ACTIVITY_TYPE_UPDATE_USER_NAME`, `ACTIVITY_TYPE_UPDATE_USER_EMAIL`, `ACTIVITY_TYPE_UPDATE_USER_PHONE_NUMBER`, `ACTIVITY_TYPE_INIT_FIAT_ON_RAMP`, `ACTIVITY_TYPE_CREATE_SMART_CONTRACT_INTERFACE`, `ACTIVITY_TYPE_DELETE_SMART_CONTRACT_INTERFACE`, `ACTIVITY_TYPE_ENABLE_AUTH_PROXY`, `ACTIVITY_TYPE_DISABLE_AUTH_PROXY`, `ACTIVITY_TYPE_UPDATE_AUTH_PROXY_CONFIG`, `ACTIVITY_TYPE_CREATE_OAUTH2_CREDENTIAL`, `ACTIVITY_TYPE_UPDATE_OAUTH2_CREDENTIAL`, `ACTIVITY_TYPE_DELETE_OAUTH2_CREDENTIAL`, `ACTIVITY_TYPE_OAUTH2_AUTHENTICATE`, `ACTIVITY_TYPE_DELETE_WALLET_ACCOUNTS`, `ACTIVITY_TYPE_DELETE_POLICIES`, `ACTIVITY_TYPE_ETH_SEND_RAW_TRANSACTION`, `ACTIVITY_TYPE_ETH_SEND_TRANSACTION`, `ACTIVITY_TYPE_CREATE_FIAT_ON_RAMP_CREDENTIAL`, `ACTIVITY_TYPE_UPDATE_FIAT_ON_RAMP_CREDENTIAL`, `ACTIVITY_TYPE_DELETE_FIAT_ON_RAMP_CREDENTIAL`, `ACTIVITY_TYPE_EMAIL_AUTH_V3`, `ACTIVITY_TYPE_INIT_USER_EMAIL_RECOVERY_V2`, `ACTIVITY_TYPE_INIT_OTP_AUTH_V3`, `ACTIVITY_TYPE_INIT_OTP_V2`, `ACTIVITY_TYPE_UPSERT_GAS_USAGE_CONFIG`, `ACTIVITY_TYPE_CREATE_TVC_APP`, `ACTIVITY_TYPE_CREATE_TVC_DEPLOYMENT`, `ACTIVITY_TYPE_CREATE_TVC_MANIFEST_APPROVALS`, `ACTIVITY_TYPE_SOL_SEND_TRANSACTION`, `ACTIVITY_TYPE_INIT_OTP_V3`, `ACTIVITY_TYPE_VERIFY_OTP_V2`, `ACTIVITY_TYPE_OTP_LOGIN_V2`, `ACTIVITY_TYPE_UPDATE_ORGANIZATION_NAME`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V8`, `ACTIVITY_TYPE_CREATE_OAUTH_PROVIDERS_V2`, `ACTIVITY_TYPE_CREATE_USERS_V4`, `ACTIVITY_TYPE_CREATE_WEBHOOK_ENDPOINT`, `ACTIVITY_TYPE_UPDATE_WEBHOOK_ENDPOINT`, `ACTIVITY_TYPE_DELETE_WEBHOOK_ENDPOINT`, `ACTIVITY_TYPE_SET_IP_ALLOWLIST`, `ACTIVITY_TYPE_REMOVE_IP_ALLOWLIST`, `ACTIVITY_TYPE_UPDATE_TVC_APP_LIVE_DEPLOYMENT`, `ACTIVITY_TYPE_DELETE_TVC_DEPLOYMENT`, `ACTIVITY_TYPE_DELETE_TVC_APP_AND_DEPLOYMENTS`, `ACTIVITY_TYPE_RESTORE_TVC_DEPLOYMENT`, `ACTIVITY_TYPE_SPARK_SIGN_FROST`, `ACTIVITY_TYPE_SPARK_PREPARE_TRANSFER`, `ACTIVITY_TYPE_SPARK_CLAIM_TRANSFER`, `ACTIVITY_TYPE_SPARK_PREPARE_LIGHTNING_RECEIVE`, `ACTIVITY_TYPE_POST_TVC_QUORUM_KEY_SHARE`, `ACTIVITY_TYPE_ETH_SEND_TRANSACTION_V2`, `ACTIVITY_TYPE_CREATE_MFA_POLICY`, `ACTIVITY_TYPE_UPDATE_MFA_POLICY`, `ACTIVITY_TYPE_DELETE_MFA_POLICY`, `ACTIVITY_TYPE_CREATE_SESSION_PROFILE`, `ACTIVITY_TYPE_EARN_DEPLOY_WRAPPER`, `ACTIVITY_TYPE_EARN_DEPOSIT`, `ACTIVITY_TYPE_EARN_WITHDRAW`, `ACTIVITY_TYPE_EXECUTE_SWAP`, `ACTIVITY_TYPE_UPSERT_SWAP_CONFIG`, `ACTIVITY_TYPE_CREATE_TVC_OPERATOR`, `ACTIVITY_TYPE_CREATE_TVC_QUORUM_KEY`, `ACTIVITY_TYPE_RE_ENCRYPT_TVC_QUORUM_KEY_SHARE`, `ACTIVITY_TYPE_INIT_IMPORT_SECRETS`, `ACTIVITY_TYPE_SOL_SEND_TRANSACTION_V2`, `ACTIVITY_TYPE_CLAIM_SWAP_FEES`, `ACTIVITY_TYPE_EARN_SET_WRAPPER_STATE`, `ACTIVITY_TYPE_CLAIM_EARN_FEES`, `ACTIVITY_TYPE_UPDATE_WALLET_ACCOUNT_NAME`, `ACTIVITY_TYPE_ETH_UNDELEGATE_7702`, `ACTIVITY_TYPE_EXECUTE_SWAP_V2`, `ACTIVITY_TYPE_CREATE_SWAP_QUOTE`, `ACTIVITY_TYPE_IMPORT_SECRETS` + + + + intent field + + + createOrganizationIntent field + + +Human-readable name for an Organization. + + +The root user's email address. + + + rootAuthenticator field + + +Human-readable name for an Authenticator. + + +Unique identifier for a given User. + + + attestation field + + +id field + + +type field + +Enum options: `public-key` + + + +rawId field + + +authenticatorAttachment field + +Enum options: `cross-platform`, `platform` + + + + response field + + +clientDataJson field + + +attestationObject field + + + transports field + + +item field + +Enum options: `AUTHENTICATOR_TRANSPORT_BLE`, `AUTHENTICATOR_TRANSPORT_INTERNAL`, `AUTHENTICATOR_TRANSPORT_NFC`, `AUTHENTICATOR_TRANSPORT_USB`, `AUTHENTICATOR_TRANSPORT_HYBRID` + + + + + + +authenticatorAttachment field + +Enum options: `cross-platform`, `platform` + + + + + + + clientExtensionResults field + + +appid field + + +appidExclude field + + + credProps field + + +rk field + + + + + + + + + + + +Challenge presented for authentication purposes. + + + + + +Unique identifier for the root user object. + + + + + + createAuthenticatorsIntent field + + + A list of Authenticators. + + +Human-readable name for an Authenticator. + + +Unique identifier for a given User. + + + attestation field + + +id field + + +type field + +Enum options: `public-key` + + + +rawId field + + +authenticatorAttachment field + +Enum options: `cross-platform`, `platform` + + + + response field + + +clientDataJson field + + +attestationObject field + + + transports field + + +item field + +Enum options: `AUTHENTICATOR_TRANSPORT_BLE`, `AUTHENTICATOR_TRANSPORT_INTERNAL`, `AUTHENTICATOR_TRANSPORT_NFC`, `AUTHENTICATOR_TRANSPORT_USB`, `AUTHENTICATOR_TRANSPORT_HYBRID` + + + + + + +authenticatorAttachment field + +Enum options: `cross-platform`, `platform` + + + + + + + clientExtensionResults field + + +appid field + + +appidExclude field + + + credProps field + + +rk field + + + + + + + + + + + +Challenge presented for authentication purposes. + + + + + +Unique identifier for a given User. + + + + + + createUsersIntent field + + + A list of Users. + + +Human-readable name for a User. + + +The user's email address. + + +accessType field + +Enum options: `ACCESS_TYPE_WEB`, `ACCESS_TYPE_API`, `ACCESS_TYPE_ALL` + + + + A list of API Key parameters. This field, if not needed, should be an empty array in your request body. + + +Human-readable name for an API Key. + + +The public component of a cryptographic key pair used to sign messages and transactions. + + +Optional window (in seconds) indicating how long the API Key should last. + + + + + + A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body. + + +Human-readable name for an Authenticator. + + +Unique identifier for a given User. + + + attestation field + + +id field + + +type field + +Enum options: `public-key` + + + +rawId field + + +authenticatorAttachment field + +Enum options: `cross-platform`, `platform` + + + + response field + + +clientDataJson field + + +attestationObject field + + + transports field + + +item field + +Enum options: `AUTHENTICATOR_TRANSPORT_BLE`, `AUTHENTICATOR_TRANSPORT_INTERNAL`, `AUTHENTICATOR_TRANSPORT_NFC`, `AUTHENTICATOR_TRANSPORT_USB`, `AUTHENTICATOR_TRANSPORT_HYBRID` + + + + + + +authenticatorAttachment field + +Enum options: `cross-platform`, `platform` + + + + + + + clientExtensionResults field + + +appid field + + +appidExclude field + + + credProps field + + +rk field + + + + + + + + + + + +Challenge presented for authentication purposes. + + + + + + A list of User Tag IDs. This field, if not needed, should be an empty array in your request body. + + +item field + + + + + + + + + + + + createPrivateKeysIntent field + + + A list of Private Keys. + + +Human-readable name for a Private Key. + + +curve field + +Enum options: `CURVE_SECP256K1`, `CURVE_ED25519`, `CURVE_P256` + + + + A list of Private Key Tag IDs. This field, if not needed, should be an empty array in your request body. + + +item field + + + + + + Cryptocurrency-specific formats for a derived address (e.g., Ethereum). + + +item field + +Enum options: `ADDRESS_FORMAT_UNCOMPRESSED`, `ADDRESS_FORMAT_COMPRESSED`, `ADDRESS_FORMAT_ETHEREUM`, `ADDRESS_FORMAT_SOLANA`, `ADDRESS_FORMAT_COSMOS`, `ADDRESS_FORMAT_TRON`, `ADDRESS_FORMAT_SUI`, `ADDRESS_FORMAT_APTOS`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2PKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2SH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WSH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2TR`, `ADDRESS_FORMAT_SEI`, `ADDRESS_FORMAT_XLM`, `ADDRESS_FORMAT_DOGE_MAINNET`, `ADDRESS_FORMAT_DOGE_TESTNET`, `ADDRESS_FORMAT_TON_V3R2`, `ADDRESS_FORMAT_TON_V4R2`, `ADDRESS_FORMAT_TON_V5R1`, `ADDRESS_FORMAT_XRP`, `ADDRESS_FORMAT_SPARK_MAINNET`, `ADDRESS_FORMAT_SPARK_REGTEST` + + + + + + + + + + + + + signRawPayloadIntent field + + +Unique identifier for a given Private Key. + + +Raw unsigned payload to be signed. + + +encoding field + +Enum options: `PAYLOAD_ENCODING_HEXADECIMAL`, `PAYLOAD_ENCODING_TEXT_UTF8`, `PAYLOAD_ENCODING_EIP712`, `PAYLOAD_ENCODING_EIP7702_AUTHORIZATION` + + + +hashFunction field + +Enum options: `HASH_FUNCTION_NO_OP`, `HASH_FUNCTION_SHA256`, `HASH_FUNCTION_KECCAK256`, `HASH_FUNCTION_NOT_APPLICABLE` + + + + + + + createInvitationsIntent field + + + A list of Invitations. + + +The name of the intended Invitation recipient. + + +The email address of the intended Invitation recipient. + + + A list of tags assigned to the Invitation recipient. This field, if not needed, should be an empty array in your request body. + + +item field + + + + + +accessType field + +Enum options: `ACCESS_TYPE_WEB`, `ACCESS_TYPE_API`, `ACCESS_TYPE_ALL` + + + +Unique identifier for the Sender of an Invitation. + + + + + + + + + acceptInvitationIntent field + + +Unique identifier for a given Invitation object. + + +Unique identifier for a given User. + + + authenticator field + + +Human-readable name for an Authenticator. + + +Unique identifier for a given User. + + + attestation field + + +id field + + +type field + +Enum options: `public-key` + + + +rawId field + + +authenticatorAttachment field + +Enum options: `cross-platform`, `platform` + + + + response field + + +clientDataJson field + + +attestationObject field + + + transports field + + +item field + +Enum options: `AUTHENTICATOR_TRANSPORT_BLE`, `AUTHENTICATOR_TRANSPORT_INTERNAL`, `AUTHENTICATOR_TRANSPORT_NFC`, `AUTHENTICATOR_TRANSPORT_USB`, `AUTHENTICATOR_TRANSPORT_HYBRID` + + + + + + +authenticatorAttachment field + +Enum options: `cross-platform`, `platform` + + + + + + + clientExtensionResults field + + +appid field + + +appidExclude field + + + credProps field + + +rk field + + + + + + + + + + + +Challenge presented for authentication purposes. + + + + + + + + + createPolicyIntent field + + +Human-readable name for a Policy. + + + A list of simple functions each including a subject, target and boolean. See Policy Engine Language section for additional details. + + +subject field + + +operator field + +Enum options: `OPERATOR_EQUAL`, `OPERATOR_MORE_THAN`, `OPERATOR_MORE_THAN_OR_EQUAL`, `OPERATOR_LESS_THAN`, `OPERATOR_LESS_THAN_OR_EQUAL`, `OPERATOR_CONTAINS`, `OPERATOR_NOT_EQUAL`, `OPERATOR_IN`, `OPERATOR_NOT_IN`, `OPERATOR_CONTAINS_ONE`, `OPERATOR_CONTAINS_ALL` + + + +target field + + + + + +effect field + +Enum options: `EFFECT_ALLOW`, `EFFECT_DENY` + + + +notes field + + + + + + disablePrivateKeyIntent field + + +Unique identifier for a given Private Key. + + + + + + deleteUsersIntent field + + + A list of User IDs. + + +item field + + + + + + + + + deleteAuthenticatorsIntent field + + +Unique identifier for a given User. + + + A list of Authenticator IDs. + + +item field + + + + + + + + + deleteInvitationIntent field + + +Unique identifier for a given Invitation object. + + + + + + deleteOrganizationIntent field + + +Unique identifier for a given Organization. + + + + + + deletePolicyIntent field + + +Unique identifier for a given Policy. + + + + + + createUserTagIntent field + + +Human-readable name for a User Tag. + + + A list of User IDs. + + +item field + + + + + + + + + deleteUserTagsIntent field + + + A list of User Tag IDs. + + +item field + + + + + + + + + signTransactionIntent field + + +Unique identifier for a given Private Key. + + +Raw unsigned transaction to be signed by a particular Private Key. + + +type field + +Enum options: `TRANSACTION_TYPE_ETHEREUM`, `TRANSACTION_TYPE_SOLANA`, `TRANSACTION_TYPE_TRON`, `TRANSACTION_TYPE_BITCOIN`, `TRANSACTION_TYPE_TEMPO` + + + + + + + createApiKeysIntent field + + + A list of API Keys. + + +Human-readable name for an API Key. + + +The public component of a cryptographic key pair used to sign messages and transactions. + + +Optional window (in seconds) indicating how long the API Key should last. + + + + + +Unique identifier for a given User. + + + + + + deleteApiKeysIntent field + + +Unique identifier for a given User. + + + A list of API Key IDs. + + +item field + + + + + + + + + approveActivityIntent field + + +An artifact verifying a User's action. + + + + + + rejectActivityIntent field + + +An artifact verifying a User's action. + + + + + + createPrivateKeyTagIntent field + + +Human-readable name for a Private Key Tag. + + + A list of Private Key IDs. + + +item field + + + + + + + + + deletePrivateKeyTagsIntent field + + + A list of Private Key Tag IDs. + + +item field + + + + + + + + + createPolicyIntentV2 field + + +Human-readable name for a Policy. + + + A list of simple functions each including a subject, target and boolean. See Policy Engine Language section for additional details. + + +subject field + + +operator field + +Enum options: `OPERATOR_EQUAL`, `OPERATOR_MORE_THAN`, `OPERATOR_MORE_THAN_OR_EQUAL`, `OPERATOR_LESS_THAN`, `OPERATOR_LESS_THAN_OR_EQUAL`, `OPERATOR_CONTAINS`, `OPERATOR_NOT_EQUAL`, `OPERATOR_IN`, `OPERATOR_NOT_IN`, `OPERATOR_CONTAINS_ONE`, `OPERATOR_CONTAINS_ALL` + + + + targets field + + +item field + + + + + + + + +effect field + +Enum options: `EFFECT_ALLOW`, `EFFECT_DENY` + + + +notes field + + + + + + setPaymentMethodIntent field + + +The account number of the customer's credit card. + + +The verification digits of the customer's credit card. + + +The month that the credit card expires. + + +The year that the credit card expires. + + +The email that will receive invoices for the credit card. + + +The name associated with the credit card. + + + + + + activateBillingTierIntent field + + +The product that the customer wants to subscribe to. + + +orbPlanId field + + + + + + deletePaymentMethodIntent field + + +The payment method that the customer wants to remove. + + + + + + createPolicyIntentV3 field + + +Human-readable name for a Policy. + + +effect field + +Enum options: `EFFECT_ALLOW`, `EFFECT_DENY` + + + +The condition expression that triggers the Effect + + +The consensus expression that triggers the Effect + + +Notes for a Policy. + + +The time expression that triggers the Effect + + + + + + createApiOnlyUsersIntent field + + + A list of API-only Users to create. + + +The name of the new API-only User. + + +The email address for this API-only User (optional). + + + A list of tags assigned to the new API-only User. This field, if not needed, should be an empty array in your request body. + + +item field + + + + + + A list of API Key parameters. This field, if not needed, should be an empty array in your request body. + + +Human-readable name for an API Key. + + +The public component of a cryptographic key pair used to sign messages and transactions. + + +Optional window (in seconds) indicating how long the API Key should last. + + + + + + + + + + + + updateRootQuorumIntent field + + +The threshold of unique approvals to reach quorum. + + + The unique identifiers of users who comprise the quorum set. + + +item field + + + + + + + + + updateUserTagIntent field + + +Unique identifier for a given User Tag. + + +The new, human-readable name for the tag with the given ID. + + + A list of User IDs to add this tag to. + + +item field + + + + + + A list of User IDs to remove this tag from. + + +item field + + + + + + + + + updatePrivateKeyTagIntent field + + +Unique identifier for a given Private Key Tag. + + +The new, human-readable name for the tag with the given ID. + + + A list of Private Keys IDs to add this tag to. + + +item field + + + + + + A list of Private Key IDs to remove this tag from. + + +item field + + + + + + + + + createAuthenticatorsIntentV2 field + + + A list of Authenticators. + + +Human-readable name for an Authenticator. + + +Challenge presented for authentication purposes. + + + attestation field + + +The cbor encoded then base64 url encoded id of the credential. + + +A base64 url encoded payload containing metadata about the signing context and the challenge. + + +A base64 url encoded payload containing authenticator data and any attestation the webauthn provider chooses. + + + The type of authenticator transports. + + +item field + +Enum options: `AUTHENTICATOR_TRANSPORT_BLE`, `AUTHENTICATOR_TRANSPORT_INTERNAL`, `AUTHENTICATOR_TRANSPORT_NFC`, `AUTHENTICATOR_TRANSPORT_USB`, `AUTHENTICATOR_TRANSPORT_HYBRID` + + + + + + + + + + + + +Unique identifier for a given User. + + + + + + acceptInvitationIntentV2 field + + +Unique identifier for a given Invitation object. + + +Unique identifier for a given User. + + + authenticator field + + +Human-readable name for an Authenticator. + + +Challenge presented for authentication purposes. + + + attestation field + + +The cbor encoded then base64 url encoded id of the credential. + + +A base64 url encoded payload containing metadata about the signing context and the challenge. + + +A base64 url encoded payload containing authenticator data and any attestation the webauthn provider chooses. + + + The type of authenticator transports. + + +item field + +Enum options: `AUTHENTICATOR_TRANSPORT_BLE`, `AUTHENTICATOR_TRANSPORT_INTERNAL`, `AUTHENTICATOR_TRANSPORT_NFC`, `AUTHENTICATOR_TRANSPORT_USB`, `AUTHENTICATOR_TRANSPORT_HYBRID` + + + + + + + + + + + + + + + + createOrganizationIntentV2 field + + +Human-readable name for an Organization. + + +The root user's email address. + + + rootAuthenticator field + + +Human-readable name for an Authenticator. + + +Challenge presented for authentication purposes. + + + attestation field + + +The cbor encoded then base64 url encoded id of the credential. + + +A base64 url encoded payload containing metadata about the signing context and the challenge. + + +A base64 url encoded payload containing authenticator data and any attestation the webauthn provider chooses. + + + The type of authenticator transports. + + +item field + +Enum options: `AUTHENTICATOR_TRANSPORT_BLE`, `AUTHENTICATOR_TRANSPORT_INTERNAL`, `AUTHENTICATOR_TRANSPORT_NFC`, `AUTHENTICATOR_TRANSPORT_USB`, `AUTHENTICATOR_TRANSPORT_HYBRID` + + + + + + + + + + + + +Unique identifier for the root user object. + + + + + + createUsersIntentV2 field + + + A list of Users. + + +Human-readable name for a User. + + +The user's email address. + + + A list of API Key parameters. This field, if not needed, should be an empty array in your request body. + + +Human-readable name for an API Key. + + +The public component of a cryptographic key pair used to sign messages and transactions. + + +Optional window (in seconds) indicating how long the API Key should last. + + + + + + A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body. + + +Human-readable name for an Authenticator. + + +Challenge presented for authentication purposes. + + + attestation field + + +The cbor encoded then base64 url encoded id of the credential. + + +A base64 url encoded payload containing metadata about the signing context and the challenge. + + +A base64 url encoded payload containing authenticator data and any attestation the webauthn provider chooses. + + + The type of authenticator transports. + + +item field + +Enum options: `AUTHENTICATOR_TRANSPORT_BLE`, `AUTHENTICATOR_TRANSPORT_INTERNAL`, `AUTHENTICATOR_TRANSPORT_NFC`, `AUTHENTICATOR_TRANSPORT_USB`, `AUTHENTICATOR_TRANSPORT_HYBRID` + + + + + + + + + + + + + A list of User Tag IDs. This field, if not needed, should be an empty array in your request body. + + +item field + + + + + + + + + + + + createSubOrganizationIntent field + + +Name for this sub-organization + + + rootAuthenticator field + + +Human-readable name for an Authenticator. + + +Challenge presented for authentication purposes. + + + attestation field + + +The cbor encoded then base64 url encoded id of the credential. + + +A base64 url encoded payload containing metadata about the signing context and the challenge. + + +A base64 url encoded payload containing authenticator data and any attestation the webauthn provider chooses. + + + The type of authenticator transports. + + +item field + +Enum options: `AUTHENTICATOR_TRANSPORT_BLE`, `AUTHENTICATOR_TRANSPORT_INTERNAL`, `AUTHENTICATOR_TRANSPORT_NFC`, `AUTHENTICATOR_TRANSPORT_USB`, `AUTHENTICATOR_TRANSPORT_HYBRID` + + + + + + + + + + + + + + + + createSubOrganizationIntentV2 field + + +Name for this sub-organization + + + Root users to create within this sub-organization + + +Human-readable name for a User. + + +The user's email address. + + + A list of API Key parameters. This field, if not needed, should be an empty array in your request body. + + +Human-readable name for an API Key. + + +The public component of a cryptographic key pair used to sign messages and transactions. + + +Optional window (in seconds) indicating how long the API Key should last. + + + + + + A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body. + + +Human-readable name for an Authenticator. + + +Challenge presented for authentication purposes. + + + attestation field + + +The cbor encoded then base64 url encoded id of the credential. + + +A base64 url encoded payload containing metadata about the signing context and the challenge. + + +A base64 url encoded payload containing authenticator data and any attestation the webauthn provider chooses. + + + The type of authenticator transports. + + +item field + +Enum options: `AUTHENTICATOR_TRANSPORT_BLE`, `AUTHENTICATOR_TRANSPORT_INTERNAL`, `AUTHENTICATOR_TRANSPORT_NFC`, `AUTHENTICATOR_TRANSPORT_USB`, `AUTHENTICATOR_TRANSPORT_HYBRID` + + + + + + + + + + + + + + + +The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users + + + + + + updateAllowedOriginsIntent field + + + Additional origins requests are allowed from besides Turnkey origins + + +item field + + + + + + + + + createPrivateKeysIntentV2 field + + + A list of Private Keys. + + +Human-readable name for a Private Key. + + +curve field + +Enum options: `CURVE_SECP256K1`, `CURVE_ED25519`, `CURVE_P256` + + + + A list of Private Key Tag IDs. This field, if not needed, should be an empty array in your request body. + + +item field + + + + + + Cryptocurrency-specific formats for a derived address (e.g., Ethereum). + + +item field + +Enum options: `ADDRESS_FORMAT_UNCOMPRESSED`, `ADDRESS_FORMAT_COMPRESSED`, `ADDRESS_FORMAT_ETHEREUM`, `ADDRESS_FORMAT_SOLANA`, `ADDRESS_FORMAT_COSMOS`, `ADDRESS_FORMAT_TRON`, `ADDRESS_FORMAT_SUI`, `ADDRESS_FORMAT_APTOS`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2PKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2SH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WSH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2TR`, `ADDRESS_FORMAT_SEI`, `ADDRESS_FORMAT_XLM`, `ADDRESS_FORMAT_DOGE_MAINNET`, `ADDRESS_FORMAT_DOGE_TESTNET`, `ADDRESS_FORMAT_TON_V3R2`, `ADDRESS_FORMAT_TON_V4R2`, `ADDRESS_FORMAT_TON_V5R1`, `ADDRESS_FORMAT_XRP`, `ADDRESS_FORMAT_SPARK_MAINNET`, `ADDRESS_FORMAT_SPARK_REGTEST` + + + + + + + + + + + + + updateUserIntent field + + +Unique identifier for a given User. + + +Human-readable name for a User. + + +The user's email address. + + + An updated list of User Tags to apply to this User. This field, if not needed, should be an empty array in your request body. + + +item field + + + + + +The user's phone number in E.164 format e.g. +13214567890 + + + + + + updatePolicyIntent field + + +Unique identifier for a given Policy. + + +Human-readable name for a Policy. + + +policyEffect field + +Enum options: `EFFECT_ALLOW`, `EFFECT_DENY` + + + +The condition expression that triggers the Effect (optional). + + +The consensus expression that triggers the Effect (optional). + + +Accompanying notes for a Policy (optional). + + + + + + setPaymentMethodIntentV2 field + + +The id of the payment method that was created clientside. + + +The email that will receive invoices for the credit card. + + +The name associated with the credit card. + + + + + + createSubOrganizationIntentV3 field + + +Name for this sub-organization + + + Root users to create within this sub-organization + + +Human-readable name for a User. + + +The user's email address. + + + A list of API Key parameters. This field, if not needed, should be an empty array in your request body. + + +Human-readable name for an API Key. + + +The public component of a cryptographic key pair used to sign messages and transactions. + + +Optional window (in seconds) indicating how long the API Key should last. + + + + + + A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body. + + +Human-readable name for an Authenticator. + + +Challenge presented for authentication purposes. + + + attestation field + + +The cbor encoded then base64 url encoded id of the credential. + + +A base64 url encoded payload containing metadata about the signing context and the challenge. + + +A base64 url encoded payload containing authenticator data and any attestation the webauthn provider chooses. + + + The type of authenticator transports. + + +item field + +Enum options: `AUTHENTICATOR_TRANSPORT_BLE`, `AUTHENTICATOR_TRANSPORT_INTERNAL`, `AUTHENTICATOR_TRANSPORT_NFC`, `AUTHENTICATOR_TRANSPORT_USB`, `AUTHENTICATOR_TRANSPORT_HYBRID` + + + + + + + + + + + + + + + +The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users + + + A list of Private Keys. + + +Human-readable name for a Private Key. + + +curve field + +Enum options: `CURVE_SECP256K1`, `CURVE_ED25519`, `CURVE_P256` + + + + A list of Private Key Tag IDs. This field, if not needed, should be an empty array in your request body. + + +item field + + + + + + Cryptocurrency-specific formats for a derived address (e.g., Ethereum). + + +item field + +Enum options: `ADDRESS_FORMAT_UNCOMPRESSED`, `ADDRESS_FORMAT_COMPRESSED`, `ADDRESS_FORMAT_ETHEREUM`, `ADDRESS_FORMAT_SOLANA`, `ADDRESS_FORMAT_COSMOS`, `ADDRESS_FORMAT_TRON`, `ADDRESS_FORMAT_SUI`, `ADDRESS_FORMAT_APTOS`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2PKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2SH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WSH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2TR`, `ADDRESS_FORMAT_SEI`, `ADDRESS_FORMAT_XLM`, `ADDRESS_FORMAT_DOGE_MAINNET`, `ADDRESS_FORMAT_DOGE_TESTNET`, `ADDRESS_FORMAT_TON_V3R2`, `ADDRESS_FORMAT_TON_V4R2`, `ADDRESS_FORMAT_TON_V5R1`, `ADDRESS_FORMAT_XRP`, `ADDRESS_FORMAT_SPARK_MAINNET`, `ADDRESS_FORMAT_SPARK_REGTEST` + + + + + + + + + + + + + createWalletIntent field + + +Human-readable name for a Wallet. + + + A list of wallet Accounts. This field, if not needed, should be an empty array in your request body. + + +curve field + +Enum options: `CURVE_SECP256K1`, `CURVE_ED25519`, `CURVE_P256` + + + +pathFormat field + +Enum options: `PATH_FORMAT_BIP32` + + + +Path used to generate a wallet Account. + + +addressFormat field + +Enum options: `ADDRESS_FORMAT_UNCOMPRESSED`, `ADDRESS_FORMAT_COMPRESSED`, `ADDRESS_FORMAT_ETHEREUM`, `ADDRESS_FORMAT_SOLANA`, `ADDRESS_FORMAT_COSMOS`, `ADDRESS_FORMAT_TRON`, `ADDRESS_FORMAT_SUI`, `ADDRESS_FORMAT_APTOS`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2PKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2SH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WSH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2TR`, `ADDRESS_FORMAT_SEI`, `ADDRESS_FORMAT_XLM`, `ADDRESS_FORMAT_DOGE_MAINNET`, `ADDRESS_FORMAT_DOGE_TESTNET`, `ADDRESS_FORMAT_TON_V3R2`, `ADDRESS_FORMAT_TON_V4R2`, `ADDRESS_FORMAT_TON_V5R1`, `ADDRESS_FORMAT_XRP`, `ADDRESS_FORMAT_SPARK_MAINNET`, `ADDRESS_FORMAT_SPARK_REGTEST` + + + +Optional human-readable name for the account. + + + + + +Length of mnemonic to generate the Wallet seed. Defaults to 12. Accepted values: 12, 15, 18, 21, 24. + + + + + + createWalletAccountsIntent field + + +Unique identifier for a given Wallet. + + + A list of wallet Accounts. + + +curve field + +Enum options: `CURVE_SECP256K1`, `CURVE_ED25519`, `CURVE_P256` + + + +pathFormat field + +Enum options: `PATH_FORMAT_BIP32` + + + +Path used to generate a wallet Account. + + +addressFormat field + +Enum options: `ADDRESS_FORMAT_UNCOMPRESSED`, `ADDRESS_FORMAT_COMPRESSED`, `ADDRESS_FORMAT_ETHEREUM`, `ADDRESS_FORMAT_SOLANA`, `ADDRESS_FORMAT_COSMOS`, `ADDRESS_FORMAT_TRON`, `ADDRESS_FORMAT_SUI`, `ADDRESS_FORMAT_APTOS`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2PKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2SH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WSH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2TR`, `ADDRESS_FORMAT_SEI`, `ADDRESS_FORMAT_XLM`, `ADDRESS_FORMAT_DOGE_MAINNET`, `ADDRESS_FORMAT_DOGE_TESTNET`, `ADDRESS_FORMAT_TON_V3R2`, `ADDRESS_FORMAT_TON_V4R2`, `ADDRESS_FORMAT_TON_V5R1`, `ADDRESS_FORMAT_XRP`, `ADDRESS_FORMAT_SPARK_MAINNET`, `ADDRESS_FORMAT_SPARK_REGTEST` + + + +Optional human-readable name for the account. + + + + + +Indicates if the wallet accounts should be persisted. This is helpful if you'd like to see the addresses of different derivation paths without actually creating the accounts. Defaults to true. + + + + + + initUserEmailRecoveryIntent field + + +Email of the user starting recovery + + +Client-side public key generated by the user, to which the recovery bundle will be encrypted. + + +Expiration window (in seconds) indicating how long the recovery credential is valid for. If not provided, a default of 15 minutes will be used. + + + emailCustomization field + + +The name of the application. + + +A URL pointing to a logo in PNG format. Note this logo will be resized to fit into 340px x 124px. + + +A template for the URL to be used in a magic link button, e.g. `https://dapp.xyz/%s`. The auth bundle will be interpolated into the `%s`. + + +JSON object containing key/value pairs to be used with custom templates. + + +Unique identifier for a given Email Template. If not specified, the default is the most recent Email Template. + + + + + +Optional custom email address from which to send the OTP email + + +Optional custom sender name for use with sendFromEmailAddress; if left empty, will default to 'Notifications' + + +Optional custom email address to use as reply-to + + + + + + recoverUserIntent field + + + authenticator field + + +Human-readable name for an Authenticator. + + +Challenge presented for authentication purposes. + + + attestation field + + +The cbor encoded then base64 url encoded id of the credential. + + +A base64 url encoded payload containing metadata about the signing context and the challenge. + + +A base64 url encoded payload containing authenticator data and any attestation the webauthn provider chooses. + + + The type of authenticator transports. + + +item field + +Enum options: `AUTHENTICATOR_TRANSPORT_BLE`, `AUTHENTICATOR_TRANSPORT_INTERNAL`, `AUTHENTICATOR_TRANSPORT_NFC`, `AUTHENTICATOR_TRANSPORT_USB`, `AUTHENTICATOR_TRANSPORT_HYBRID` + + + + + + + + + + + + +Unique identifier for the user performing recovery. + + + + + + setOrganizationFeatureIntent field + + +name field + +Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_SWAP_CONFIG`, `FEATURE_NAME_EARN_CONFIG` + + + +Optional value for the feature. Will override existing values if feature is already set. + + + + + + removeOrganizationFeatureIntent field + + +name field + +Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_SWAP_CONFIG`, `FEATURE_NAME_EARN_CONFIG` + + + + + + + signRawPayloadIntentV2 field + + +A Wallet account address, Private Key address, or Private Key identifier. + + +Raw unsigned payload to be signed. + + +encoding field + +Enum options: `PAYLOAD_ENCODING_HEXADECIMAL`, `PAYLOAD_ENCODING_TEXT_UTF8`, `PAYLOAD_ENCODING_EIP712`, `PAYLOAD_ENCODING_EIP7702_AUTHORIZATION` + + + +hashFunction field + +Enum options: `HASH_FUNCTION_NO_OP`, `HASH_FUNCTION_SHA256`, `HASH_FUNCTION_KECCAK256`, `HASH_FUNCTION_NOT_APPLICABLE` + + + + + + + signTransactionIntentV2 field + + +A Wallet account address, Private Key address, or Private Key identifier. + + +Raw unsigned transaction to be signed + + +type field + +Enum options: `TRANSACTION_TYPE_ETHEREUM`, `TRANSACTION_TYPE_SOLANA`, `TRANSACTION_TYPE_TRON`, `TRANSACTION_TYPE_BITCOIN`, `TRANSACTION_TYPE_TEMPO` + + + + + + + exportPrivateKeyIntent field + + +Unique identifier for a given Private Key. + + +Client-side public key generated by the user, to which the export bundle will be encrypted. + + + + + + exportWalletIntent field + + +Unique identifier for a given Wallet. + + +Client-side public key generated by the user, to which the export bundle will be encrypted. + + +language field + +Enum options: `MNEMONIC_LANGUAGE_ENGLISH`, `MNEMONIC_LANGUAGE_SIMPLIFIED_CHINESE`, `MNEMONIC_LANGUAGE_TRADITIONAL_CHINESE`, `MNEMONIC_LANGUAGE_CZECH`, `MNEMONIC_LANGUAGE_FRENCH`, `MNEMONIC_LANGUAGE_ITALIAN`, `MNEMONIC_LANGUAGE_JAPANESE`, `MNEMONIC_LANGUAGE_KOREAN`, `MNEMONIC_LANGUAGE_SPANISH` + + + + + + + createSubOrganizationIntentV4 field + + +Name for this sub-organization + + + Root users to create within this sub-organization + + +Human-readable name for a User. + + +The user's email address. + + + A list of API Key parameters. This field, if not needed, should be an empty array in your request body. + + +Human-readable name for an API Key. + + +The public component of a cryptographic key pair used to sign messages and transactions. + + +Optional window (in seconds) indicating how long the API Key should last. + + + + + + A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body. + + +Human-readable name for an Authenticator. + + +Challenge presented for authentication purposes. + + + attestation field + + +The cbor encoded then base64 url encoded id of the credential. + + +A base64 url encoded payload containing metadata about the signing context and the challenge. + + +A base64 url encoded payload containing authenticator data and any attestation the webauthn provider chooses. + + + The type of authenticator transports. + + +item field + +Enum options: `AUTHENTICATOR_TRANSPORT_BLE`, `AUTHENTICATOR_TRANSPORT_INTERNAL`, `AUTHENTICATOR_TRANSPORT_NFC`, `AUTHENTICATOR_TRANSPORT_USB`, `AUTHENTICATOR_TRANSPORT_HYBRID` + + + + + + + + + + + + + + + +The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users + + + wallet field + + +Human-readable name for a Wallet. + + + A list of wallet Accounts. This field, if not needed, should be an empty array in your request body. + + +curve field + +Enum options: `CURVE_SECP256K1`, `CURVE_ED25519`, `CURVE_P256` + + + +pathFormat field + +Enum options: `PATH_FORMAT_BIP32` + + + +Path used to generate a wallet Account. + + +addressFormat field + +Enum options: `ADDRESS_FORMAT_UNCOMPRESSED`, `ADDRESS_FORMAT_COMPRESSED`, `ADDRESS_FORMAT_ETHEREUM`, `ADDRESS_FORMAT_SOLANA`, `ADDRESS_FORMAT_COSMOS`, `ADDRESS_FORMAT_TRON`, `ADDRESS_FORMAT_SUI`, `ADDRESS_FORMAT_APTOS`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2PKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2SH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WSH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2TR`, `ADDRESS_FORMAT_SEI`, `ADDRESS_FORMAT_XLM`, `ADDRESS_FORMAT_DOGE_MAINNET`, `ADDRESS_FORMAT_DOGE_TESTNET`, `ADDRESS_FORMAT_TON_V3R2`, `ADDRESS_FORMAT_TON_V4R2`, `ADDRESS_FORMAT_TON_V5R1`, `ADDRESS_FORMAT_XRP`, `ADDRESS_FORMAT_SPARK_MAINNET`, `ADDRESS_FORMAT_SPARK_REGTEST` + + + +Optional human-readable name for the account. + + + + + +Length of mnemonic to generate the Wallet seed. Defaults to 12. Accepted values: 12, 15, 18, 21, 24. + + + + + +Disable email recovery for the sub-organization + + +Disable email auth for the sub-organization + + + + + + emailAuthIntent field + + +Email of the authenticating user. + + +Client-side public key generated by the user, to which the email auth bundle (credentials) will be encrypted. + + +Optional human-readable name for an API Key. If none provided, default to Email Auth - <Timestamp> + + +Expiration window (in seconds) indicating how long the API key is valid for. If not provided, a default of 15 minutes will be used. + + + emailCustomization field + + +The name of the application. + + +A URL pointing to a logo in PNG format. Note this logo will be resized to fit into 340px x 124px. + + +A template for the URL to be used in a magic link button, e.g. `https://dapp.xyz/%s`. The auth bundle will be interpolated into the `%s`. + + +JSON object containing key/value pairs to be used with custom templates. + + +Unique identifier for a given Email Template. If not specified, the default is the most recent Email Template. + + + + + +Invalidate all other previously generated Email Auth API keys + + +Optional custom email address from which to send the email + + +Optional custom sender name for use with sendFromEmailAddress; if left empty, will default to 'Notifications' + + +Optional custom email address to use as reply-to + + + + + + exportWalletAccountIntent field + + +Address to identify Wallet Account. + + +Client-side public key generated by the user, to which the export bundle will be encrypted. + + + + + + initImportWalletIntent field + + +The ID of the User importing a Wallet. + + + + + + importWalletIntent field + + +The ID of the User importing a Wallet. + + +Human-readable name for a Wallet. + + +Bundle containing a wallet mnemonic encrypted to the enclave's target public key. + + + A list of wallet Accounts. + + +curve field + +Enum options: `CURVE_SECP256K1`, `CURVE_ED25519`, `CURVE_P256` + + + +pathFormat field + +Enum options: `PATH_FORMAT_BIP32` + + + +Path used to generate a wallet Account. + + +addressFormat field + +Enum options: `ADDRESS_FORMAT_UNCOMPRESSED`, `ADDRESS_FORMAT_COMPRESSED`, `ADDRESS_FORMAT_ETHEREUM`, `ADDRESS_FORMAT_SOLANA`, `ADDRESS_FORMAT_COSMOS`, `ADDRESS_FORMAT_TRON`, `ADDRESS_FORMAT_SUI`, `ADDRESS_FORMAT_APTOS`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2PKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2SH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WSH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2TR`, `ADDRESS_FORMAT_SEI`, `ADDRESS_FORMAT_XLM`, `ADDRESS_FORMAT_DOGE_MAINNET`, `ADDRESS_FORMAT_DOGE_TESTNET`, `ADDRESS_FORMAT_TON_V3R2`, `ADDRESS_FORMAT_TON_V4R2`, `ADDRESS_FORMAT_TON_V5R1`, `ADDRESS_FORMAT_XRP`, `ADDRESS_FORMAT_SPARK_MAINNET`, `ADDRESS_FORMAT_SPARK_REGTEST` + + + +Optional human-readable name for the account. + + + + + + + + + initImportPrivateKeyIntent field + + +The ID of the User importing a Private Key. + + + + + + importPrivateKeyIntent field + + +The ID of the User importing a Private Key. + + +Human-readable name for a Private Key. + + +Bundle containing a raw private key encrypted to the enclave's target public key. + + +curve field + +Enum options: `CURVE_SECP256K1`, `CURVE_ED25519`, `CURVE_P256` + + + + Cryptocurrency-specific formats for a derived address (e.g., Ethereum). + + +item field + +Enum options: `ADDRESS_FORMAT_UNCOMPRESSED`, `ADDRESS_FORMAT_COMPRESSED`, `ADDRESS_FORMAT_ETHEREUM`, `ADDRESS_FORMAT_SOLANA`, `ADDRESS_FORMAT_COSMOS`, `ADDRESS_FORMAT_TRON`, `ADDRESS_FORMAT_SUI`, `ADDRESS_FORMAT_APTOS`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2PKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2SH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WSH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2TR`, `ADDRESS_FORMAT_SEI`, `ADDRESS_FORMAT_XLM`, `ADDRESS_FORMAT_DOGE_MAINNET`, `ADDRESS_FORMAT_DOGE_TESTNET`, `ADDRESS_FORMAT_TON_V3R2`, `ADDRESS_FORMAT_TON_V4R2`, `ADDRESS_FORMAT_TON_V5R1`, `ADDRESS_FORMAT_XRP`, `ADDRESS_FORMAT_SPARK_MAINNET`, `ADDRESS_FORMAT_SPARK_REGTEST` + + + + + + + + + + createPoliciesIntent field + + + An array of policy intents to be created. + + +Human-readable name for a Policy. + + +effect field + +Enum options: `EFFECT_ALLOW`, `EFFECT_DENY` + + + +The condition expression that triggers the Effect + + +The consensus expression that triggers the Effect + + +Notes for a Policy. + + +The time expression that triggers the Effect + + + + + + + + + signRawPayloadsIntent field + + +A Wallet account address, Private Key address, or Private Key identifier. + + + An array of raw unsigned payloads to be signed. + + +item field + + + + + +encoding field + +Enum options: `PAYLOAD_ENCODING_HEXADECIMAL`, `PAYLOAD_ENCODING_TEXT_UTF8`, `PAYLOAD_ENCODING_EIP712`, `PAYLOAD_ENCODING_EIP7702_AUTHORIZATION` + + + +hashFunction field + +Enum options: `HASH_FUNCTION_NO_OP`, `HASH_FUNCTION_SHA256`, `HASH_FUNCTION_KECCAK256`, `HASH_FUNCTION_NOT_APPLICABLE` + + + + + + +createReadOnlySessionIntent field + + + createOauthProvidersIntent field + + +The ID of the User to add an Oauth provider to + + + A list of Oauth providers. + + +Human-readable name to identify a Provider. + + +Base64 encoded OIDC token + + + + + + + + + deleteOauthProvidersIntent field + + +The ID of the User to remove an Oauth provider from + + + Unique identifier for a given Provider. + + +item field + + + + + + + + + createSubOrganizationIntentV5 field + + +Name for this sub-organization + + + Root users to create within this sub-organization + + +Human-readable name for a User. + + +The user's email address. + + + A list of API Key parameters. This field, if not needed, should be an empty array in your request body. + + +Human-readable name for an API Key. + + +The public component of a cryptographic key pair used to sign messages and transactions. + + +Optional window (in seconds) indicating how long the API Key should last. + + + + + + A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body. + + +Human-readable name for an Authenticator. + + +Challenge presented for authentication purposes. + + + attestation field + + +The cbor encoded then base64 url encoded id of the credential. + + +A base64 url encoded payload containing metadata about the signing context and the challenge. + + +A base64 url encoded payload containing authenticator data and any attestation the webauthn provider chooses. + + + The type of authenticator transports. + + +item field + +Enum options: `AUTHENTICATOR_TRANSPORT_BLE`, `AUTHENTICATOR_TRANSPORT_INTERNAL`, `AUTHENTICATOR_TRANSPORT_NFC`, `AUTHENTICATOR_TRANSPORT_USB`, `AUTHENTICATOR_TRANSPORT_HYBRID` + + + + + + + + + + + + + A list of Oauth providers. This field, if not needed, should be an empty array in your request body. + + +Human-readable name to identify a Provider. + + +Base64 encoded OIDC token + + + + + + + + +The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users + + + wallet field + + +Human-readable name for a Wallet. + + + A list of wallet Accounts. This field, if not needed, should be an empty array in your request body. + + +curve field + +Enum options: `CURVE_SECP256K1`, `CURVE_ED25519`, `CURVE_P256` + + + +pathFormat field + +Enum options: `PATH_FORMAT_BIP32` + + + +Path used to generate a wallet Account. + + +addressFormat field + +Enum options: `ADDRESS_FORMAT_UNCOMPRESSED`, `ADDRESS_FORMAT_COMPRESSED`, `ADDRESS_FORMAT_ETHEREUM`, `ADDRESS_FORMAT_SOLANA`, `ADDRESS_FORMAT_COSMOS`, `ADDRESS_FORMAT_TRON`, `ADDRESS_FORMAT_SUI`, `ADDRESS_FORMAT_APTOS`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2PKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2SH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WSH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2TR`, `ADDRESS_FORMAT_SEI`, `ADDRESS_FORMAT_XLM`, `ADDRESS_FORMAT_DOGE_MAINNET`, `ADDRESS_FORMAT_DOGE_TESTNET`, `ADDRESS_FORMAT_TON_V3R2`, `ADDRESS_FORMAT_TON_V4R2`, `ADDRESS_FORMAT_TON_V5R1`, `ADDRESS_FORMAT_XRP`, `ADDRESS_FORMAT_SPARK_MAINNET`, `ADDRESS_FORMAT_SPARK_REGTEST` + + + +Optional human-readable name for the account. + + + + + +Length of mnemonic to generate the Wallet seed. Defaults to 12. Accepted values: 12, 15, 18, 21, 24. + + + + + +Disable email recovery for the sub-organization + + +Disable email auth for the sub-organization + + + + + + oauthIntent field + + +Base64 encoded OIDC token + + +Client-side public key generated by the user, to which the oauth bundle (credentials) will be encrypted. + + +Optional human-readable name for an API Key. If none provided, default to Oauth - <Timestamp> + + +Expiration window (in seconds) indicating how long the API key is valid for. If not provided, a default of 15 minutes will be used. + + +Invalidate all other previously generated Oauth API keys + + + + + + createApiKeysIntentV2 field + + + A list of API Keys. + + +Human-readable name for an API Key. + + +The public component of a cryptographic key pair used to sign messages and transactions. + + +curveType field + +Enum options: `API_KEY_CURVE_P256`, `API_KEY_CURVE_SECP256K1`, `API_KEY_CURVE_ED25519` + + + +Optional window (in seconds) indicating how long the API Key should last. + + + + + +Unique identifier for a given User. + + + + + + createReadWriteSessionIntent field + + +Client-side public key generated by the user, to which the read write session bundle (credentials) will be encrypted. + + +Email of the user to create a read write session for + + +Optional human-readable name for an API Key. If none provided, default to Read Write Session - <Timestamp> + + +Expiration window (in seconds) indicating how long the API key is valid for. If not provided, a default of 15 minutes will be used. + + + + + + emailAuthIntentV2 field + + +Email of the authenticating user. + + +Client-side public key generated by the user, to which the email auth bundle (credentials) will be encrypted. + + +Optional human-readable name for an API Key. If none provided, default to Email Auth - <Timestamp> + + +Expiration window (in seconds) indicating how long the API key is valid for. If not provided, a default of 15 minutes will be used. + + + emailCustomization field + + +The name of the application. + + +A URL pointing to a logo in PNG format. Note this logo will be resized to fit into 340px x 124px. + + +A template for the URL to be used in a magic link button, e.g. `https://dapp.xyz/%s`. The auth bundle will be interpolated into the `%s`. + + +JSON object containing key/value pairs to be used with custom templates. + + +Unique identifier for a given Email Template. If not specified, the default is the most recent Email Template. + + + + + +Invalidate all other previously generated Email Auth API keys + + +Optional custom email address from which to send the email + + +Optional custom sender name for use with sendFromEmailAddress; if left empty, will default to 'Notifications' + + +Optional custom email address to use as reply-to + + + + + + createSubOrganizationIntentV6 field + + +Name for this sub-organization + + + Root users to create within this sub-organization + + +Human-readable name for a User. + + +The user's email address. + + + A list of API Key parameters. This field, if not needed, should be an empty array in your request body. + + +Human-readable name for an API Key. + + +The public component of a cryptographic key pair used to sign messages and transactions. + + +curveType field + +Enum options: `API_KEY_CURVE_P256`, `API_KEY_CURVE_SECP256K1`, `API_KEY_CURVE_ED25519` + + + +Optional window (in seconds) indicating how long the API Key should last. + + + + + + A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body. + + +Human-readable name for an Authenticator. + + +Challenge presented for authentication purposes. + + + attestation field + + +The cbor encoded then base64 url encoded id of the credential. + + +A base64 url encoded payload containing metadata about the signing context and the challenge. + + +A base64 url encoded payload containing authenticator data and any attestation the webauthn provider chooses. + + + The type of authenticator transports. + + +item field + +Enum options: `AUTHENTICATOR_TRANSPORT_BLE`, `AUTHENTICATOR_TRANSPORT_INTERNAL`, `AUTHENTICATOR_TRANSPORT_NFC`, `AUTHENTICATOR_TRANSPORT_USB`, `AUTHENTICATOR_TRANSPORT_HYBRID` + + + + + + + + + + + + + A list of Oauth providers. This field, if not needed, should be an empty array in your request body. + + +Human-readable name to identify a Provider. + + +Base64 encoded OIDC token + + + + + + + + +The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users + + + wallet field + + +Human-readable name for a Wallet. + + + A list of wallet Accounts. This field, if not needed, should be an empty array in your request body. + + +curve field + +Enum options: `CURVE_SECP256K1`, `CURVE_ED25519`, `CURVE_P256` + + + +pathFormat field + +Enum options: `PATH_FORMAT_BIP32` + + + +Path used to generate a wallet Account. + + +addressFormat field + +Enum options: `ADDRESS_FORMAT_UNCOMPRESSED`, `ADDRESS_FORMAT_COMPRESSED`, `ADDRESS_FORMAT_ETHEREUM`, `ADDRESS_FORMAT_SOLANA`, `ADDRESS_FORMAT_COSMOS`, `ADDRESS_FORMAT_TRON`, `ADDRESS_FORMAT_SUI`, `ADDRESS_FORMAT_APTOS`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2PKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2SH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WSH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2TR`, `ADDRESS_FORMAT_SEI`, `ADDRESS_FORMAT_XLM`, `ADDRESS_FORMAT_DOGE_MAINNET`, `ADDRESS_FORMAT_DOGE_TESTNET`, `ADDRESS_FORMAT_TON_V3R2`, `ADDRESS_FORMAT_TON_V4R2`, `ADDRESS_FORMAT_TON_V5R1`, `ADDRESS_FORMAT_XRP`, `ADDRESS_FORMAT_SPARK_MAINNET`, `ADDRESS_FORMAT_SPARK_REGTEST` + + + +Optional human-readable name for the account. + + + + + +Length of mnemonic to generate the Wallet seed. Defaults to 12. Accepted values: 12, 15, 18, 21, 24. + + + + + +Disable email recovery for the sub-organization + + +Disable email auth for the sub-organization + + + + + + deletePrivateKeysIntent field + + + List of unique identifiers for private keys within an organization + + +item field + + + + + +Optional parameter for deleting the private keys, even if any have not been previously exported. If they have been exported, this field is ignored. + + + + + + deleteWalletsIntent field + + + List of unique identifiers for wallets within an organization + + +item field + + + + + +Optional parameter for deleting the wallets, even if any have not been previously exported. If they have been exported, this field is ignored. + + + + + + createReadWriteSessionIntentV2 field + + +Client-side public key generated by the user, to which the read write session bundle (credentials) will be encrypted. + + +Optional unique identifier for a given User. If none provided, the read write session will be created for the user who is making the request. + + +Optional human-readable name for an API Key. If none provided, default to Read Write Session - <Timestamp> + + +Expiration window (in seconds) indicating how long the API key is valid for. If not provided, a default of 15 minutes will be used. + + +Invalidate all other previously generated ReadWriteSession API keys + + + + + + deleteSubOrganizationIntent field + + +Sub-organization deletion, by default, requires associated wallets and private keys to be exported for security reasons. Set this boolean to true to force sub-organization deletion even if some wallets or private keys within it have not been exported yet. Default: false. + + + + + + initOtpAuthIntent field + + +Enum to specify whether to send OTP via SMS or email + + +Email or phone number to send the OTP code to + + + emailCustomization field + + +The name of the application. + + +A URL pointing to a logo in PNG format. Note this logo will be resized to fit into 340px x 124px. + + +A template for the URL to be used in a magic link button, e.g. `https://dapp.xyz/%s`. The auth bundle will be interpolated into the `%s`. + + +JSON object containing key/value pairs to be used with custom templates. + + +Unique identifier for a given Email Template. If not specified, the default is the most recent Email Template. + + + + + + smsCustomization field + + +Template containing references to .OtpCode i.e Your OTP is \{\{.OtpCode\}\} + + + + + +Optional client-generated user identifier to enable per-user rate limiting for SMS auth. We recommend using a hash of the client-side IP address. + + +Optional custom email address from which to send the OTP email + + +Optional custom sender name for use with sendFromEmailAddress; if left empty, will default to 'Notifications' + + +Optional custom email address to use as reply-to + + + + + + otpAuthIntent field + + +ID representing the result of an init OTP activity. + + +OTP sent out to a user's contact (email or SMS) + + +Client-side public key generated by the user, to which the OTP bundle (credentials) will be encrypted. + + +Optional human-readable name for an API Key. If none provided, default to OTP Auth - <Timestamp> + + +Expiration window (in seconds) indicating how long the API key is valid for. If not provided, a default of 15 minutes will be used. + + +Invalidate all other previously generated OTP Auth API keys + + + + + + createSubOrganizationIntentV7 field + + +Name for this sub-organization + + + Root users to create within this sub-organization + + +Human-readable name for a User. + + +The user's email address. + + +The user's phone number in E.164 format e.g. +13214567890 + + + A list of API Key parameters. This field, if not needed, should be an empty array in your request body. + + +Human-readable name for an API Key. + + +The public component of a cryptographic key pair used to sign messages and transactions. + + +curveType field + +Enum options: `API_KEY_CURVE_P256`, `API_KEY_CURVE_SECP256K1`, `API_KEY_CURVE_ED25519` + + + +Optional window (in seconds) indicating how long the API Key should last. + + + + + + A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body. + + +Human-readable name for an Authenticator. + + +Challenge presented for authentication purposes. + + + attestation field + + +The cbor encoded then base64 url encoded id of the credential. + + +A base64 url encoded payload containing metadata about the signing context and the challenge. + + +A base64 url encoded payload containing authenticator data and any attestation the webauthn provider chooses. + + + The type of authenticator transports. + + +item field + +Enum options: `AUTHENTICATOR_TRANSPORT_BLE`, `AUTHENTICATOR_TRANSPORT_INTERNAL`, `AUTHENTICATOR_TRANSPORT_NFC`, `AUTHENTICATOR_TRANSPORT_USB`, `AUTHENTICATOR_TRANSPORT_HYBRID` + + + + + + + + + + + + + A list of Oauth providers. This field, if not needed, should be an empty array in your request body. + + +Human-readable name to identify a Provider. + + +Base64 encoded OIDC token + + + + + + + + +The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users + + + wallet field + + +Human-readable name for a Wallet. + + + A list of wallet Accounts. This field, if not needed, should be an empty array in your request body. + + +curve field + +Enum options: `CURVE_SECP256K1`, `CURVE_ED25519`, `CURVE_P256` + + + +pathFormat field + +Enum options: `PATH_FORMAT_BIP32` + + + +Path used to generate a wallet Account. + + +addressFormat field + +Enum options: `ADDRESS_FORMAT_UNCOMPRESSED`, `ADDRESS_FORMAT_COMPRESSED`, `ADDRESS_FORMAT_ETHEREUM`, `ADDRESS_FORMAT_SOLANA`, `ADDRESS_FORMAT_COSMOS`, `ADDRESS_FORMAT_TRON`, `ADDRESS_FORMAT_SUI`, `ADDRESS_FORMAT_APTOS`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2PKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2SH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WSH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2TR`, `ADDRESS_FORMAT_SEI`, `ADDRESS_FORMAT_XLM`, `ADDRESS_FORMAT_DOGE_MAINNET`, `ADDRESS_FORMAT_DOGE_TESTNET`, `ADDRESS_FORMAT_TON_V3R2`, `ADDRESS_FORMAT_TON_V4R2`, `ADDRESS_FORMAT_TON_V5R1`, `ADDRESS_FORMAT_XRP`, `ADDRESS_FORMAT_SPARK_MAINNET`, `ADDRESS_FORMAT_SPARK_REGTEST` + + + +Optional human-readable name for the account. + + + + + +Length of mnemonic to generate the Wallet seed. Defaults to 12. Accepted values: 12, 15, 18, 21, 24. + + + + + +Disable email recovery for the sub-organization + + +Disable email auth for the sub-organization + + +Disable OTP SMS auth for the sub-organization + + +Disable OTP email auth for the sub-organization + + +Signed JWT containing a unique id, expiry, verification type, contact + + + clientSignature field + + +The public component of a cryptographic key pair used to create the signature. + + +scheme field + +Enum options: `CLIENT_SIGNATURE_SCHEME_API_P256` + + + +The message that was signed. + + +The cryptographic signature over the message. + + + + + + + + + updateWalletIntent field + + +Unique identifier for a given Wallet. + + +Human-readable name for a Wallet. + + + + + + updatePolicyIntentV2 field + + +Unique identifier for a given Policy. + + +Human-readable name for a Policy. + + +policyEffect field + +Enum options: `EFFECT_ALLOW`, `EFFECT_DENY` + + + +The condition expression that triggers the Effect (optional). + + +The consensus expression that triggers the Effect (optional). + + +Accompanying notes for a Policy (optional). + + +The time expression that triggers the Effect (optional). + + + + + + createUsersIntentV3 field + + + A list of Users. + + +Human-readable name for a User. + + +The user's email address. + + +The user's phone number in E.164 format e.g. +13214567890 + + + A list of API Key parameters. This field, if not needed, should be an empty array in your request body. + + +Human-readable name for an API Key. + + +The public component of a cryptographic key pair used to sign messages and transactions. + + +curveType field + +Enum options: `API_KEY_CURVE_P256`, `API_KEY_CURVE_SECP256K1`, `API_KEY_CURVE_ED25519` + + + +Optional window (in seconds) indicating how long the API Key should last. + + + + + + A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body. + + +Human-readable name for an Authenticator. + + +Challenge presented for authentication purposes. + + + attestation field + + +The cbor encoded then base64 url encoded id of the credential. + + +A base64 url encoded payload containing metadata about the signing context and the challenge. + + +A base64 url encoded payload containing authenticator data and any attestation the webauthn provider chooses. + + + The type of authenticator transports. + + +item field + +Enum options: `AUTHENTICATOR_TRANSPORT_BLE`, `AUTHENTICATOR_TRANSPORT_INTERNAL`, `AUTHENTICATOR_TRANSPORT_NFC`, `AUTHENTICATOR_TRANSPORT_USB`, `AUTHENTICATOR_TRANSPORT_HYBRID` + + + + + + + + + + + + + A list of Oauth providers. This field, if not needed, should be an empty array in your request body. + + +Human-readable name to identify a Provider. + + +Base64 encoded OIDC token + + + + + + A list of User Tag IDs. This field, if not needed, should be an empty array in your request body. + + +item field + + + + + + + + + + + + initOtpAuthIntentV2 field + + +Enum to specify whether to send OTP via SMS or email + + +Email or phone number to send the OTP code to + + +Optional length of the OTP code. Default = 9 + + + emailCustomization field + + +The name of the application. + + +A URL pointing to a logo in PNG format. Note this logo will be resized to fit into 340px x 124px. + + +A template for the URL to be used in a magic link button, e.g. `https://dapp.xyz/%s`. The auth bundle will be interpolated into the `%s`. + + +JSON object containing key/value pairs to be used with custom templates. + + +Unique identifier for a given Email Template. If not specified, the default is the most recent Email Template. + + + + + + smsCustomization field + + +Template containing references to .OtpCode i.e Your OTP is \{\{.OtpCode\}\} + + + + + +Optional client-generated user identifier to enable per-user rate limiting for SMS auth. We recommend using a hash of the client-side IP address. + + +Optional custom email address from which to send the OTP email + + +Optional flag to specify if the OTP code should be alphanumeric (Crockford’s Base32). Default = true + + +Optional custom sender name for use with sendFromEmailAddress; if left empty, will default to 'Notifications' + + +Optional custom email address to use as reply-to + + + + + + initOtpIntent field + + +Whether to send OTP via SMS or email. Possible values: OTP_TYPE_SMS, OTP_TYPE_EMAIL + + +Email or phone number to send the OTP code to + + +Optional length of the OTP code. Default = 9 + + + emailCustomization field + + +The name of the application. + + +A URL pointing to a logo in PNG format. Note this logo will be resized to fit into 340px x 124px. + + +A template for the URL to be used in a magic link button, e.g. `https://dapp.xyz/%s`. The auth bundle will be interpolated into the `%s`. + + +JSON object containing key/value pairs to be used with custom templates. + + +Unique identifier for a given Email Template. If not specified, the default is the most recent Email Template. + + + + + + smsCustomization field + + +Template containing references to .OtpCode i.e Your OTP is \{\{.OtpCode\}\} + + + + + +Optional client-generated user identifier to enable per-user rate limiting for SMS auth. We recommend using a hash of the client-side IP address. + + +Optional custom email address from which to send the OTP email + + +Optional flag to specify if the OTP code should be alphanumeric (Crockford’s Base32). Default = true + + +Optional custom sender name for use with sendFromEmailAddress; if left empty, will default to 'Notifications' + + +Expiration window (in seconds) indicating how long the OTP is valid for. If not provided, a default of 5 minutes will be used. Maximum value is 600 seconds (10 minutes) + + +Optional custom email address to use as reply-to + + + + + + verifyOtpIntent field + + +ID representing the result of an init OTP activity. + + +OTP sent out to a user's contact (email or SMS) + + +Expiration window (in seconds) indicating how long the verification token is valid for. If not provided, a default of 1 hour will be used. Maximum value is 86400 seconds (24 hours) + + +Client-side public key generated by the user, which will be added to the JWT response and verified in subsequent requests via a client proof signature + + + + + + otpLoginIntent field + + +Signed JWT containing a unique id, expiry, verification type, contact + + +Client-side public key generated by the user, which will be conditionally added to org data based on the validity of the verification token + + +Expiration window (in seconds) indicating how long the Session is valid for. If not provided, a default of 15 minutes will be used. + + +Invalidate all other previously generated Login API keys + + + clientSignature field + + +The public component of a cryptographic key pair used to create the signature. + + +scheme field + +Enum options: `CLIENT_SIGNATURE_SCHEME_API_P256` + + + +The message that was signed. + + +The cryptographic signature over the message. + + + + + +Optional session profile ID to specify which Session Profile to use for this login. If not provided, the default read/write session will be used. + + + + + + stampLoginIntent field + + +Client-side public key generated by the user, which will be conditionally added to org data based on the passkey stamp associated with this request + + +Expiration window (in seconds) indicating how long the Session is valid for. If not provided, a default of 15 minutes will be used. + + +Invalidate all other previously generated Login API keys + + +Optional session profile ID to specify which Session Profile to use for this login. If not provided, the default read/write session will be used. + + + + + + oauthLoginIntent field + + +Base64 encoded OIDC token + + +Client-side public key generated by the user, which will be conditionally added to org data based on the validity of the oidc token associated with this request + + +Expiration window (in seconds) indicating how long the Session is valid for. If not provided, a default of 15 minutes will be used. + + +Invalidate all other previously generated Login API keys + + +Optional session profile ID to specify which Session Profile to use for this login. If not provided, the default read/write session will be used. + + + + + + updateUserNameIntent field + + +Unique identifier for a given User. + + +Human-readable name for a User. + + + + + + updateUserEmailIntent field + + +Unique identifier for a given User. + + +The user's email address. Setting this to an empty string will remove the user's email. + + +Signed JWT containing a unique id, expiry, verification type, contact + + + + + + updateUserPhoneNumberIntent field + + +Unique identifier for a given User. + + +The user's phone number in E.164 format e.g. +13214567890. Setting this to an empty string will remove the user's phone number. + + +Signed JWT containing a unique id, expiry, verification type, contact + + + + + + initFiatOnRampIntent field + + +onrampProvider field + +Enum options: `FIAT_ON_RAMP_PROVIDER_COINBASE`, `FIAT_ON_RAMP_PROVIDER_MOONPAY` + + + +Destination wallet address for the buy transaction. + + +network field + +Enum options: `FIAT_ON_RAMP_BLOCKCHAIN_NETWORK_BITCOIN`, `FIAT_ON_RAMP_BLOCKCHAIN_NETWORK_ETHEREUM`, `FIAT_ON_RAMP_BLOCKCHAIN_NETWORK_SOLANA`, `FIAT_ON_RAMP_BLOCKCHAIN_NETWORK_BASE` + + + +cryptoCurrencyCode field + +Enum options: `FIAT_ON_RAMP_CRYPTO_CURRENCY_BTC`, `FIAT_ON_RAMP_CRYPTO_CURRENCY_ETH`, `FIAT_ON_RAMP_CRYPTO_CURRENCY_SOL`, `FIAT_ON_RAMP_CRYPTO_CURRENCY_USDC` + + + +fiatCurrencyCode field + +Enum options: `FIAT_ON_RAMP_CURRENCY_AUD`, `FIAT_ON_RAMP_CURRENCY_BGN`, `FIAT_ON_RAMP_CURRENCY_BRL`, `FIAT_ON_RAMP_CURRENCY_CAD`, `FIAT_ON_RAMP_CURRENCY_CHF`, `FIAT_ON_RAMP_CURRENCY_COP`, `FIAT_ON_RAMP_CURRENCY_CZK`, `FIAT_ON_RAMP_CURRENCY_DKK`, `FIAT_ON_RAMP_CURRENCY_DOP`, `FIAT_ON_RAMP_CURRENCY_EGP`, `FIAT_ON_RAMP_CURRENCY_EUR`, `FIAT_ON_RAMP_CURRENCY_GBP`, `FIAT_ON_RAMP_CURRENCY_HKD`, `FIAT_ON_RAMP_CURRENCY_IDR`, `FIAT_ON_RAMP_CURRENCY_ILS`, `FIAT_ON_RAMP_CURRENCY_JOD`, `FIAT_ON_RAMP_CURRENCY_KES`, `FIAT_ON_RAMP_CURRENCY_KWD`, `FIAT_ON_RAMP_CURRENCY_LKR`, `FIAT_ON_RAMP_CURRENCY_MXN`, `FIAT_ON_RAMP_CURRENCY_NGN`, `FIAT_ON_RAMP_CURRENCY_NOK`, `FIAT_ON_RAMP_CURRENCY_NZD`, `FIAT_ON_RAMP_CURRENCY_OMR`, `FIAT_ON_RAMP_CURRENCY_PEN`, `FIAT_ON_RAMP_CURRENCY_PLN`, `FIAT_ON_RAMP_CURRENCY_RON`, `FIAT_ON_RAMP_CURRENCY_SEK`, `FIAT_ON_RAMP_CURRENCY_THB`, `FIAT_ON_RAMP_CURRENCY_TRY`, `FIAT_ON_RAMP_CURRENCY_TWD`, `FIAT_ON_RAMP_CURRENCY_USD`, `FIAT_ON_RAMP_CURRENCY_VND`, `FIAT_ON_RAMP_CURRENCY_ZAR` + + + +Specifies a preset fiat amount for the transaction, e.g., '100'. Must be greater than '20'. If not provided, the user will be prompted to enter an amount. + + +paymentMethod field + +Enum options: `FIAT_ON_RAMP_PAYMENT_METHOD_CREDIT_DEBIT_CARD`, `FIAT_ON_RAMP_PAYMENT_METHOD_APPLE_PAY`, `FIAT_ON_RAMP_PAYMENT_METHOD_GBP_BANK_TRANSFER`, `FIAT_ON_RAMP_PAYMENT_METHOD_GBP_OPEN_BANKING_PAYMENT`, `FIAT_ON_RAMP_PAYMENT_METHOD_GOOGLE_PAY`, `FIAT_ON_RAMP_PAYMENT_METHOD_SEPA_BANK_TRANSFER`, `FIAT_ON_RAMP_PAYMENT_METHOD_PIX_INSTANT_PAYMENT`, `FIAT_ON_RAMP_PAYMENT_METHOD_PAYPAL`, `FIAT_ON_RAMP_PAYMENT_METHOD_VENMO`, `FIAT_ON_RAMP_PAYMENT_METHOD_MOONPAY_BALANCE`, `FIAT_ON_RAMP_PAYMENT_METHOD_CRYPTO_ACCOUNT`, `FIAT_ON_RAMP_PAYMENT_METHOD_FIAT_WALLET`, `FIAT_ON_RAMP_PAYMENT_METHOD_ACH_BANK_ACCOUNT` + + + +ISO 3166-1 two-digit country code for Coinbase representing the purchasing user’s country of residence, e.g., US, GB. + + +ISO 3166-2 two-digit country subdivision code for Coinbase representing the purchasing user’s subdivision of residence within their country, e.g. NY. Required if country_code=US. + + +Optional flag to indicate whether to use the sandbox mode to simulate transactions for the on-ramp provider. Default is false. + + +Optional MoonPay Widget URL to sign when using MoonPay client SDKs with URL Signing enabled. + + + + + + createSmartContractInterfaceIntent field + + +Corresponding contract address or program ID + + +ABI/IDL as a JSON string. Limited to 400kb + + +type field + +Enum options: `SMART_CONTRACT_INTERFACE_TYPE_ETHEREUM`, `SMART_CONTRACT_INTERFACE_TYPE_SOLANA` + + + +Human-readable name for a Smart Contract Interface. + + +Notes for a Smart Contract Interface. + + + + + + deleteSmartContractInterfaceIntent field + + +The ID of a Smart Contract Interface intended for deletion. + + + + + +enableAuthProxyIntent field + + +disableAuthProxyIntent field + + + updateAuthProxyConfigIntent field + + + Updated list of allowed origins for CORS. + + +item field + + + + + + Updated list of allowed proxy authentication methods. + + +item field + + + + + +Custom 'from' address for auth-related emails. + + +Custom reply-to address for auth-related emails. + + +Template ID for email-auth messages. + + +Template ID for OTP SMS messages. + + + emailCustomizationParams field + + +The name of the application. + + +A URL pointing to a logo in PNG format. Note this logo will be resized to fit into 340px x 124px. + + +A template for the URL to be used in a magic link button, e.g. `https://dapp.xyz/%s`. The auth bundle will be interpolated into the `%s`. + + +JSON object containing key/value pairs to be used with custom templates. + + +Unique identifier for a given Email Template. If not specified, the default is the most recent Email Template. + + + + + + smsCustomizationParams field + + +Template containing references to .OtpCode i.e Your OTP is \{\{.OtpCode\}\} + + + + + + walletKitSettings field + + + List of enabled social login providers (e.g., 'apple', 'google', 'facebook') + + +item field + + + + + +Mapping of social login providers to their Oauth client IDs. + + +Oauth redirect URL to be used for social login flows. + + + + + +OTP code lifetime in seconds. + + +Verification-token lifetime in seconds. + + +Session lifetime in seconds. + + +Enable alphanumeric OTP codes. + + +Desired OTP code length (6–9). + + +Custom 'from' email sender for auth-related emails. + + +Verification token required for get account with PII (email/phone number). Default false. + + + Whitelisted OAuth client IDs for social account linking. When a user authenticates via a social provider with an email matching an existing account, the accounts will be linked if the client ID is in this list and the issuer is considered a trusted provider. + + +item field + + + + + +Whether captcha verification is required on sign up & otp init. + + + + + + createOauth2CredentialIntent field + + +provider field + +Enum options: `OAUTH2_PROVIDER_X`, `OAUTH2_PROVIDER_DISCORD` + + + +The Client ID issued by the OAuth 2.0 provider + + +The client secret issued by the OAuth 2.0 provider encrypted to the TLS Fetcher quorum key + + + + + + updateOauth2CredentialIntent field + + +The ID of the OAuth 2.0 credential to update + + +provider field + +Enum options: `OAUTH2_PROVIDER_X`, `OAUTH2_PROVIDER_DISCORD` + + + +The Client ID issued by the OAuth 2.0 provider + + +The client secret issued by the OAuth 2.0 provider encrypted to the TLS Fetcher quorum key + + + + + + deleteOauth2CredentialIntent field + + +The ID of the OAuth 2.0 credential to delete + + + + + + oauth2AuthenticateIntent field + + +The OAuth 2.0 credential id whose client_id and client_secret will be used in the OAuth 2.0 flow + + +The auth_code provided by the OAuth 2.0 provider to the end user to be exchanged for a Bearer token in the OAuth 2.0 flow + + +The URI the user is redirected to after they have authenticated with the OAuth 2.0 provider + + +The code verifier used by OAuth 2.0 PKCE providers + + +A nonce value set to sha256(publicKey), used to bind the OIDC token to a specific public key + + +An optional P256 public key to which, if provided, the bearer token will be encrypted and returned via the `encrypted_bearer_token` claim of the OIDC Token + + + + + + deleteWalletAccountsIntent field + + + List of unique identifiers for wallet accounts within an organization + + +item field + + + + + +Optional parameter for deleting the wallet accounts, even if any have not been previously exported. If they have been exported, this field is ignored. + + + + + + deletePoliciesIntent field + + + List of unique identifiers for policies within an organization + + +item field + + + + + + + + + ethSendRawTransactionIntent field + + +The raw, signed transaction to be sent. + + +CAIP-2 chain ID (e.g., 'eip155:1' for Ethereum mainnet). + +Enum options: `eip155:1`, `eip155:11155111`, `eip155:8453`, `eip155:84532`, `eip155:137`, `eip155:80002`, `eip155:56`, `eip155:97`, `eip155:10`, `eip155:11155420`, `eip155:143`, `eip155:10143`, `eip155:42161`, `eip155:4217`, `eip155:42431`, `eip155:421614` + + + + + + + ethSendTransactionIntent field + + +A wallet or private key address to sign with. This does not support private key IDs. + + +Whether to sponsor this transaction via Gas Station. + + +CAIP-2 chain ID (e.g., 'eip155:1' for Ethereum mainnet). + +Enum options: `eip155:1`, `eip155:11155111`, `eip155:8453`, `eip155:84532`, `eip155:137`, `eip155:80002`, `eip155:56`, `eip155:97`, `eip155:10`, `eip155:11155420`, `eip155:143`, `eip155:10143`, `eip155:42161`, `eip155:4217`, `eip155:42431`, `eip155:421614` + + + +Recipient address as a hex string with 0x prefix. + + +Amount of native asset to send in wei. + + +Hex-encoded call data for contract interactions. + + +Transaction nonce, for EIP-1559 and Turnkey Gas Station authorizations. + + +Maximum amount of gas to use for this transaction, for EIP-1559 transactions. + + +Maximum total fee per gas unit (base fee + priority fee) in wei. Required for non-sponsored (EIP-1559) transactions. Not used for sponsored transactions. + + +Maximum priority fee (tip) per gas unit in wei. Required for non-sponsored (EIP-1559) transactions. Not used for sponsored transactions. + + +Unix timestamp in seconds for EIP-712 execution deadline. Only used when sponsor=true. + + +The gas station delegate contract nonce. Only used when sponsor=true. Include this if you want maximal security posture. + + + + + + createFiatOnRampCredentialIntent field + + +onrampProvider field + +Enum options: `FIAT_ON_RAMP_PROVIDER_COINBASE`, `FIAT_ON_RAMP_PROVIDER_MOONPAY` + + + +Project ID for the on-ramp provider. Some providers, like Coinbase, require this additional identifier + + +Publishable API key for the on-ramp provider + + +Secret API key for the on-ramp provider encrypted to our on-ramp encryption public key + + +Private API key for the on-ramp provider encrypted to our on-ramp encryption public key. Some providers, like Coinbase, require this additional key. + + +If the on-ramp credential is a sandbox credential + + + + + + updateFiatOnRampCredentialIntent field + + +The ID of the fiat on-ramp credential to update + + +onrampProvider field + +Enum options: `FIAT_ON_RAMP_PROVIDER_COINBASE`, `FIAT_ON_RAMP_PROVIDER_MOONPAY` + + + +Project ID for the on-ramp provider. Some providers, like Coinbase, require this additional identifier. + + +Publishable API key for the on-ramp provider + + +Secret API key for the on-ramp provider encrypted to our on-ramp encryption public key + + +Private API key for the on-ramp provider encrypted to our on-ramp encryption public key. Some providers, like Coinbase, require this additional key. + + + + + + deleteFiatOnRampCredentialIntent field + + +The ID of the fiat on-ramp credential to delete + + + + + + emailAuthIntentV3 field + + +Email of the authenticating user. + + +Client-side public key generated by the user, to which the email auth bundle (credentials) will be encrypted. + + +Optional human-readable name for an API Key. If none provided, default to Email Auth - <Timestamp> + + +Expiration window (in seconds) indicating how long the API key is valid for. If not provided, a default of 15 minutes will be used. + + + emailCustomization field + + +The name of the application. This field is required and will be used in email notifications if an email template is not provided. + + +A URL pointing to a logo in PNG format. Note this logo will be resized to fit into 340px x 124px. + + +A template for the URL to be used in a magic link button, e.g. `https://dapp.xyz/%s`. The auth bundle will be interpolated into the `%s`. + + +JSON object containing key/value pairs to be used with custom templates. + + +Unique identifier for a given Email Template. If not specified, the default is the most recent Email Template. + + + + + +Invalidate all other previously generated Email Auth API keys + + +Optional custom email address from which to send the email + + +Optional custom sender name for use with sendFromEmailAddress; if left empty, will default to 'Notifications' + + +Optional custom email address to use as reply-to + + + + + + initUserEmailRecoveryIntentV2 field + + +Email of the user starting recovery + + +Client-side public key generated by the user, to which the recovery bundle will be encrypted. + + +Expiration window (in seconds) indicating how long the recovery credential is valid for. If not provided, a default of 15 minutes will be used. + + + emailCustomization field + + +The name of the application. This field is required and will be used in email notifications if an email template is not provided. + + +A URL pointing to a logo in PNG format. Note this logo will be resized to fit into 340px x 124px. + + +A template for the URL to be used in a magic link button, e.g. `https://dapp.xyz/%s`. The auth bundle will be interpolated into the `%s`. + + +JSON object containing key/value pairs to be used with custom templates. + + +Unique identifier for a given Email Template. If not specified, the default is the most recent Email Template. + + + + + +Optional custom email address from which to send the OTP email + + +Optional custom sender name for use with sendFromEmailAddress; if left empty, will default to 'Notifications' + + +Optional custom email address to use as reply-to + + + + + + initOtpIntentV2 field + + +Whether to send OTP via SMS or email. Possible values: OTP_TYPE_SMS, OTP_TYPE_EMAIL + + +Email or phone number to send the OTP code to + + +Optional length of the OTP code. Default = 9 + + +The name of the application. This field is required and will be used in email notifications if an email template is not provided. + + + emailCustomization field + + +A URL pointing to a logo in PNG format. Note this logo will be resized to fit into 340px x 124px. + + +A template for the URL to be used in a magic link button, e.g. `https://dapp.xyz/%s`. The auth bundle will be interpolated into the `%s`. + + +JSON object containing key/value pairs to be used with custom templates. + + +Unique identifier for a given Email Template. If not specified, the default is the most recent Email Template. + + + + + + smsCustomization field + + +Template containing references to .OtpCode i.e Your OTP is \{\{.OtpCode\}\} + + + + + +Optional client-generated user identifier to enable per-user rate limiting for SMS auth. We recommend using a hash of the client-side IP address. + + +Optional custom email address from which to send the OTP email + + +Optional flag to specify if the OTP code should be alphanumeric (Crockford’s Base32). Default = true + + +Optional custom sender name for use with sendFromEmailAddress; if left empty, will default to 'Notifications' + + +Expiration window (in seconds) indicating how long the OTP is valid for. If not provided, a default of 5 minutes will be used. Maximum value is 600 seconds (10 minutes) + + +Optional custom email address to use as reply-to + + + + + + initOtpAuthIntentV3 field + + +Whether to send OTP via SMS or email. Possible values: OTP_TYPE_SMS, OTP_TYPE_EMAIL + + +Email or phone number to send the OTP code to + + +Optional length of the OTP code. Default = 9 + + +The name of the application. This field is required and will be used in email notifications if an email template is not provided. + + + emailCustomization field + + +A URL pointing to a logo in PNG format. Note this logo will be resized to fit into 340px x 124px. + + +A template for the URL to be used in a magic link button, e.g. `https://dapp.xyz/%s`. The auth bundle will be interpolated into the `%s`. + + +JSON object containing key/value pairs to be used with custom templates. + + +Unique identifier for a given Email Template. If not specified, the default is the most recent Email Template. + + + + + + smsCustomization field + + +Template containing references to .OtpCode i.e Your OTP is \{\{.OtpCode\}\} + + + + + +Optional client-generated user identifier to enable per-user rate limiting for SMS auth. We recommend using a hash of the client-side IP address. + + +Optional custom email address from which to send the OTP email + + +Optional flag to specify if the OTP code should be alphanumeric (Crockford’s Base32). Default = true + + +Optional custom sender name for use with sendFromEmailAddress; if left empty, will default to 'Notifications' + + +Expiration window (in seconds) indicating how long the OTP is valid for. If not provided, a default of 5 minutes will be used. Maximum value is 600 seconds (10 minutes) + + +Optional custom email address to use as reply-to + + + + + + upsertGasUsageConfigIntent field + + +Gas sponsorship USD limit for the billing organization window. + + +Gas sponsorship USD limit for sub-organizations under the billing organization. + + +Rolling sponsorship window duration, expressed in minutes. This value can't exceed 30 days (43200 minutes). + + +Whether gas sponsorship is enabled for the organization. + + + solanaConfig field + + +Whether Solana rent prefunding is enabled for the organization. When omitted, the existing rent-prefund state is left unchanged. + + + + + + + + + createTvcAppIntent field + + +The name of the new TVC application + + +Quorum public key to use for this application + + +Unique identifier for an existing TVC operator set to use as the Manifest Set for this TVC application. If left empty, a new Manifest Set configuration is required + + + manifestSetParams field + + +Short description for this new operator set + + + Operators to create as part of this new operator set + + +The name for this new operator + + +Public key for this operator + + + + + + Existing operators to use as part of this new operator set + + +item field + + + + + +The threshold of operators needed to reach consensus in this new Operator Set + + + + + +Unique identifier for an existing TVC operator set to use as the Share Set for this TVC application. If left empty, a new Share Set configuration is required + + + shareSetParams field + + +Short description for this new operator set + + + Operators to create as part of this new operator set + + +The name for this new operator + + +Public key for this operator + + + + + + Existing operators to use as part of this new operator set + + +item field + + + + + +The threshold of operators needed to reach consensus in this new Operator Set + + + + + +Enables network egress for this TVC app. Default if not provided: false. + + +When true, this app may create deployments in debug-mode. Debug-mode deployments expose logs and emit zero'd attestation PCRs, so remote attestation cannot succeed. Cannot be changed after app creation. Setting this true means the app's quorum key is considered permanently insecure, and a new app with a fresh quorum key must be created. Default if not provided: false. + + + + + + createTvcDeploymentIntent field + + +The unique identifier of the to-be-deployed TVC application + + +The QuorumOS version to use to deploy this application + + +URL of the container containing the pivot binary + + +Location of the binary in the pivot container + + + Arguments to pass to the pivot binary at startup. Encoded as a list of strings, for example ["--foo", "bar"] + + +item field + + + + + +Digest of the pivot binary in the pivot container. This value will be inserted in the QOS manifest to ensure application integrity. + + +Optional nonce to ensure uniqueness of the deployment manifest. If not provided, it defaults to the current Unix timestamp in seconds. + + +Optional encrypted pull secret to authorize Turnkey to pull the pivot container image. If your image is public, leave this empty. + + +Optional flag to indicate whether to deploy the TVC app in debug mode, which includes additional logging and debugging tools. Default is false. + + +healthCheckType field + +Enum options: `TVC_HEALTH_CHECK_TYPE_HTTP`, `TVC_HEALTH_CHECK_TYPE_GRPC` + + + +Port to use for health checks. + + +Port to use for public ingress. + + +Optional desired replica count for this deployment. + + + + + + createTvcManifestApprovalsIntent field + + +Unique identifier of the TVC deployment to approve + + + List of manifest approvals + + +Unique identifier of the operator providing this approval + + +Signature from the operator approving the manifest + + + + + + + + + solSendTransactionIntent field + + +Base64-encoded serialized unsigned Solana transaction + + +A wallet or private key address to sign with. This does not support private key IDs. + + +Whether to sponsor this transaction via Gas Station. + + +CAIP-2 chain ID (e.g., 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' for Solana mainnet). Human-readable Solana aliases ('solana:mainnet', 'solana:devnet') are also accepted and normalized to canonical CAIP-2 values. + +Enum options: `solana:mainnet`, `solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp`, `solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d`, `solana:devnet`, `solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1`, `solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1wcaWoxPkrZBG` + + + +user-provided blockhash for replay protection / deadline control. If omitted and sponsor=true, we fetch a fresh blockhash during execution + + + + + + initOtpIntentV3 field + + +Whether to send OTP via SMS or email. Possible values: OTP_TYPE_SMS, OTP_TYPE_EMAIL + + +Email or phone number to send the OTP code to + + +The name of the application. + + +Optional length of the OTP code. Default = 9 + + + emailCustomization field + + +A URL pointing to a logo in PNG format. Note this logo will be resized to fit into 340px x 124px. + + +A template for the URL to be used in a magic link button, e.g. `https://dapp.xyz/%s`. The auth bundle will be interpolated into the `%s`. + + +JSON object containing key/value pairs to be used with custom templates. + + +Unique identifier for a given Email Template. If not specified, the default is the most recent Email Template. + + + + + + smsCustomization field + + +Template containing references to .OtpCode i.e Your OTP is \{\{.OtpCode\}\} + + + + + +Optional client-generated user identifier to enable per-user rate limiting for SMS auth. We recommend using a hash of the client-side IP address. + + +Optional custom email address from which to send the OTP email + + +Optional flag to specify if the OTP code should be alphanumeric (Crockford’s Base32). If set to false, OTP code will only be numeric. Default = true + + +Optional custom sender name for use with sendFromEmailAddress; if left empty, will default to 'Notifications' + + +Expiration window (in seconds) indicating how long the OTP is valid for. If not provided, a default of 5 minutes will be used. Maximum value is 600 seconds (10 minutes) + + +Optional custom email address to use as reply-to + + + + + + verifyOtpIntentV2 field + + +UUID representing an OTP flow. A new UUID is created for each init OTP activity. + + +Encrypted bundle containing the OTP code and a client-generated public key. Turnkey's secure enclaves will decrypt this bundle, verify the OTP code, and issue a new Verification Token. Encrypted using the target encryption key provided in the INIT_OTP activity result. + + +Expiration window (in seconds) indicating how long the verification token is valid for. If not provided, a default of 1 hour will be used. Maximum value is 86400 seconds (24 hours) + + + + + + otpLoginIntentV2 field + + +Signed Verification Token containing a unique id, expiry, verification type, contact + + +Client-side public key generated by the user, used as the session public key upon successful login + + + clientSignature field + + +The public component of a cryptographic key pair used to create the signature. + + +scheme field + +Enum options: `CLIENT_SIGNATURE_SCHEME_API_P256` + + + +The message that was signed. + + +The cryptographic signature over the message. + + + + + +Expiration window (in seconds) indicating how long the Session is valid for. If not provided, a default of 15 minutes will be used. + + +Invalidate all other previously generated Login sessions + + +Optional session profile ID to specify which Session Profile to use for this login. If not provided, the default read/write session will be used. + + + + + + updateOrganizationNameIntent field + + +New name for the Organization. + + + + + + createSubOrganizationIntentV8 field + + +Name for this sub-organization + + + Root users to create within this sub-organization + + +Human-readable name for a User. + + +The user's email address. + + +The user's phone number in E.164 format e.g. +13214567890 + + + A list of API Key parameters. This field, if not needed, should be an empty array in your request body. + + +Human-readable name for an API Key. + + +The public component of a cryptographic key pair used to sign messages and transactions. + + +curveType field + +Enum options: `API_KEY_CURVE_P256`, `API_KEY_CURVE_SECP256K1`, `API_KEY_CURVE_ED25519` + + + +Optional window (in seconds) indicating how long the API Key should last. + + + + + + A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body. + + +Human-readable name for an Authenticator. + + +Challenge presented for authentication purposes. + + + attestation field + + +The cbor encoded then base64 url encoded id of the credential. + + +A base64 url encoded payload containing metadata about the signing context and the challenge. + + +A base64 url encoded payload containing authenticator data and any attestation the webauthn provider chooses. + + + The type of authenticator transports. + + +item field + +Enum options: `AUTHENTICATOR_TRANSPORT_BLE`, `AUTHENTICATOR_TRANSPORT_INTERNAL`, `AUTHENTICATOR_TRANSPORT_NFC`, `AUTHENTICATOR_TRANSPORT_USB`, `AUTHENTICATOR_TRANSPORT_HYBRID` + + + + + + + + + + + + + A list of Oauth providers. This field, if not needed, should be an empty array in your request body. + + +Human-readable name to identify a Provider. + + +Base64 encoded OIDC token + + + oidcClaims field + + +The issuer identifier from the OIDC token (iss claim) + + +The subject identifier from the OIDC token (sub claim) + + +The audience from the OIDC token (aud claim) + + + + + + + + + + + +The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users + + + wallet field + + +Human-readable name for a Wallet. + + + A list of wallet Accounts. This field, if not needed, should be an empty array in your request body. + + +curve field + +Enum options: `CURVE_SECP256K1`, `CURVE_ED25519`, `CURVE_P256` + + + +pathFormat field + +Enum options: `PATH_FORMAT_BIP32` + + + +Path used to generate a wallet Account. + + +addressFormat field + +Enum options: `ADDRESS_FORMAT_UNCOMPRESSED`, `ADDRESS_FORMAT_COMPRESSED`, `ADDRESS_FORMAT_ETHEREUM`, `ADDRESS_FORMAT_SOLANA`, `ADDRESS_FORMAT_COSMOS`, `ADDRESS_FORMAT_TRON`, `ADDRESS_FORMAT_SUI`, `ADDRESS_FORMAT_APTOS`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2PKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2SH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WSH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2TR`, `ADDRESS_FORMAT_SEI`, `ADDRESS_FORMAT_XLM`, `ADDRESS_FORMAT_DOGE_MAINNET`, `ADDRESS_FORMAT_DOGE_TESTNET`, `ADDRESS_FORMAT_TON_V3R2`, `ADDRESS_FORMAT_TON_V4R2`, `ADDRESS_FORMAT_TON_V5R1`, `ADDRESS_FORMAT_XRP`, `ADDRESS_FORMAT_SPARK_MAINNET`, `ADDRESS_FORMAT_SPARK_REGTEST` + + + +Optional human-readable name for the account. + + + + + +Length of mnemonic to generate the Wallet seed. Defaults to 12. Accepted values: 12, 15, 18, 21, 24. + + + + + +Disable email recovery for the sub-organization + + +Disable email auth for the sub-organization + + +Disable OTP SMS auth for the sub-organization + + +Disable OTP email auth for the sub-organization + + +Signed JWT containing a unique id, expiry, verification type, contact + + + clientSignature field + + +The public component of a cryptographic key pair used to create the signature. + + +scheme field + +Enum options: `CLIENT_SIGNATURE_SCHEME_API_P256` + + + +The message that was signed. + + +The cryptographic signature over the message. + + + + + + + + + createOauthProvidersIntentV2 field + + +The ID of the User to add an Oauth provider to + + + A list of Oauth providers. + + +Human-readable name to identify a Provider. + + +Base64 encoded OIDC token + + + oidcClaims field + + +The issuer identifier from the OIDC token (iss claim) + + +The subject identifier from the OIDC token (sub claim) + + +The audience from the OIDC token (aud claim) + + + + + + + + + + + + createUsersIntentV4 field + + + A list of Users. + + +Human-readable name for a User. + + +The user's email address. + + +The user's phone number in E.164 format e.g. +13214567890 + + + A list of API Key parameters. This field, if not needed, should be an empty array in your request body. + + +Human-readable name for an API Key. + + +The public component of a cryptographic key pair used to sign messages and transactions. + + +curveType field + +Enum options: `API_KEY_CURVE_P256`, `API_KEY_CURVE_SECP256K1`, `API_KEY_CURVE_ED25519` + + + +Optional window (in seconds) indicating how long the API Key should last. + + + + + + A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body. + + +Human-readable name for an Authenticator. + + +Challenge presented for authentication purposes. + + + attestation field + + +The cbor encoded then base64 url encoded id of the credential. + + +A base64 url encoded payload containing metadata about the signing context and the challenge. + + +A base64 url encoded payload containing authenticator data and any attestation the webauthn provider chooses. + + + The type of authenticator transports. + + +item field + +Enum options: `AUTHENTICATOR_TRANSPORT_BLE`, `AUTHENTICATOR_TRANSPORT_INTERNAL`, `AUTHENTICATOR_TRANSPORT_NFC`, `AUTHENTICATOR_TRANSPORT_USB`, `AUTHENTICATOR_TRANSPORT_HYBRID` + + + + + + + + + + + + + A list of Oauth providers. This field, if not needed, should be an empty array in your request body. + + +Human-readable name to identify a Provider. + + +Base64 encoded OIDC token + + + oidcClaims field + + +The issuer identifier from the OIDC token (iss claim) + + +The subject identifier from the OIDC token (sub claim) + + +The audience from the OIDC token (aud claim) + + + + + + + + + A list of User Tag IDs. This field, if not needed, should be an empty array in your request body. + + +item field + + + + + + + + + + + + createWebhookEndpointIntent field + + +The destination URL for webhook delivery. + + +Human-readable name for this webhook endpoint. + + + Event subscriptions to create for this endpoint. + + +The event type to subscribe to (for example, ACTIVITY_UPDATES, BALANCE_CONFIRMED_UPDATES, or BALANCE_FINALIZED_UPDATES). + + +JSON-encoded filter criteria for this subscription. + + +Whether this subscription is active. + + + + + + + + + updateWebhookEndpointIntent field + + +Unique identifier of the webhook endpoint to update. + + +Updated destination URL for webhook delivery. + + +Updated human-readable name for this webhook endpoint. + + +Whether this webhook endpoint is active. + + + + + + deleteWebhookEndpointIntent field + + +Unique identifier of the webhook endpoint to delete. + + + + + + setIpAllowlistIntent field + + +The public component of an API key. If null, the IP allowlist applies at the organization level. If set, it applies only to this specific API key. + + +Whether the IP allowlist is enabled. Only meaningful for organization-level allowlists. Omit for API key-level allowlists. + + + List of IP allowlist rules with CIDR blocks and optional labels. + + +CIDR block (e.g., '192.168.1.0/24', '2001:db8::/32'). + + +Optional human-readable label for this rule (e.g., 'Office VPN'). + + + + + +Behavior when an error occurs during IP allowlist evaluation. Valid values: ALLOW, DENY. Defaults to DENY. + + + + + + removeIpAllowlistIntent field + + +The public component of an API key. If null, removes the organization-level IP allowlist. If set, removes the IP allowlist for this specific API key. + + + + + + updateTvcAppLiveDeploymentIntent field + + +The unique identifier of the TVC deployment to set as live for the app. + + + + + + deleteTvcDeploymentIntent field + + +The unique identifier of the TVC deployment to delete. + + + + + + deleteTvcAppAndDeploymentsIntent field + + +The unique identifier of the TVC app to delete. The app and all associated deployments will be removed. + + + + + + restoreTvcDeploymentIntent field + + +The unique identifier of the TVC deployment to restore. + + + + + + sparkSignFrostIntent field + + +A Spark wallet account address identifying the wallet to sign with. + + + Batched sign requests. Each produces a partial signature plus Turnkey's public commitments. + + + derivation field + + +identity field + + + signingLeaf field + + +Unique identifier for the Spark signing leaf. + + + + + +deposit field + + + staticDeposit field + + +Index used to derive the static deposit key. + + + + + +htlcPreimage field + + + + + +Hex-encoded 32-byte sighash to sign. + + +Aggregate group verifying key (hex-encoded compressed secp256k1 point), computed as P_ops + P_user. Bound into the nonce HMAC. + + + Commitments for every non-Turnkey participant. MUST NOT include an entry under Turnkey's identifier. Bound into the nonce HMAC. + + +FROST participant identifier, hex-encoded (32-byte scalar). + + +Hiding commitment D, hex-encoded compressed secp256k1 point. + + +Binding commitment E, hex-encoded compressed secp256k1 point. + + + + + +Optional adaptor point T (hex-encoded 33-byte compressed secp256k1 pubkey). When set, Turnkey produces a Schnorr adaptor pre-signature with the FROST challenge bound to `R+T` (where `R` is the aggregate group nonce commitment from FROST). The party holding the discrete log `t` completes the pre-sig to a valid BIP-340 signature by adding `t` (or `-t`, for parity) to the signature scalar `s`. This is primarily used by Spark leaves-swap and other adaptor-bound flows; absent or empty leads to plain FROST signing (the typical case). + + + + + + + + + sparkPrepareTransferIntent field + + +A Spark wallet account address identifying the wallet. + + + transfer field + + +Spark transfer identifier (UUID). + + + Leaves being transferred. + + +Leaf identifier (UUID). + + + oldLeafDerivation field + + +identity field + + + signingLeaf field + + +Unique identifier for the Spark signing leaf. + + + + + +deposit field + + + staticDeposit field + + +Index used to derive the static deposit key. + + + + + +htlcPreimage field + + + + + + newLeafDerivation field + + +identity field + + + signingLeaf field + + +Unique identifier for the Spark signing leaf. + + + + + +deposit field + + + staticDeposit field + + +Index used to derive the static deposit key. + + + + + +htlcPreimage field + + + + + +Client-produced CPFP refund signature (hex-encoded), passed through verbatim into the per-operator SendLeafKeyTweak. Empty omits the field from the operator package. + + +Client-produced direct refund signature (hex-encoded). Passed through verbatim. + + +Client-produced direct-from-CPFP refund signature (hex-encoded). Passed through verbatim. + + + + + +Feldman VSS threshold for reconstructing the per-leaf tweak scalar. + + + Operators that will receive Feldman shares of the per-leaf tweak. Order must match the operators' numeric IDs in the Spark operator config - share index is the 1-based position in this list. + + +Spark operator identifier (UUID). + + +Operator's ECIES encryption pubkey (hex-encoded compressed secp256k1 point). + + + + + +Recipient's identity pubkey (hex-encoded compressed secp256k1 point). Each leaf's new_priv is ECIES-encrypted to this key and embedded in the per-operator package for claim-time delivery. + + + + + + + + + sparkClaimTransferIntent field + + +A Spark wallet account address identifying the wallet. + + + claim field + + + Leaves being claimed. + + +Leaf identifier (UUID). + + +ECIES ciphertext (hex-encoded) containing the inbound transfer secret. Decrypted inside the enclave using the wallet's Identity key. + + +Hex-encoded 64-byte compact ECDSA signature binding (leaf_id, transfer_id, ciphertext) to the sender's identity key. Verified inside the enclave before decryption. + + + + + +Shamir threshold for reconstructing the per-leaf claim secret. + + + Operators that will receive Shamir shares. + + +Spark operator identifier (UUID). + + +Operator's ECIES encryption pubkey (hex-encoded compressed secp256k1 point). + + + + + +Spark transfer identifier (UUID). Used together with each leaf's sender_signature to verify the sender bound this ciphertext to this transfer. + + +Sender's compressed secp256k1 identity public key (hex-encoded, 33 bytes). Used to verify the per-leaf sender_signature fields. + + + + + + + + + sparkPrepareLightningReceiveIntent field + + +A Spark wallet account address identifying the wallet. + + + lightningReceive field + + +Feldman VSS threshold for reconstructing the preimage. + + + Operators that will receive Feldman shares of the preimage. Order must match the operators' numeric IDs in the Spark operator config - share index is the 1-based position in this list. + + +Spark operator identifier (UUID). + + +Operator's ECIES encryption pubkey (hex-encoded compressed secp256k1 point). + + + + + + + + + + + + postTvcQuorumKeyShareIntent field + + +Unique identifier of the TVC deployment receiving quorum key share + + +Hex-encoded ephemeral public key used to encrypt the quorum key share + + + shareApprovalBundle field + + +Unique identifier of the operator providing this quorum key share + + +Hex-encoded re-encrypted quorum key share + + +Signature from the share set operator approving the manifest + + + + + + + + + ethSendTransactionIntentV2 field + + +A wallet or private key address to sign with. This does not support private key IDs. + + +CAIP-2 chain ID (e.g., 'eip155:1' for Ethereum mainnet). + +Enum options: `eip155:1`, `eip155:11155111`, `eip155:8453`, `eip155:84532`, `eip155:137`, `eip155:80002`, `eip155:56`, `eip155:97`, `eip155:10`, `eip155:11155420`, `eip155:143`, `eip155:10143`, `eip155:42161`, `eip155:4217`, `eip155:42431`, `eip155:421614` + + + +Whether to sponsor this transaction via Gas Station. If false or unset, the EOA pays gas. A single call uses EIP-1559; multiple calls use EIP-7702 batch execution via Gas Station. + + +Outer transaction nonce. Omit to auto-fetch. + + +Maximum amount of gas for the outer transaction. Omit to auto-estimate. + + +Maximum total fee per gas unit (base fee + priority fee) in wei. Omit to auto-estimate. + + +Maximum priority fee (tip) per gas unit in wei. Omit to auto-estimate. + + +Unix timestamp in seconds for EIP-712 execution deadline. Only used when sponsor=true. + + +The gas station delegate contract nonce used in the BatchExecution EIP-712 message. Valid for sponsored transactions and non-sponsored multi-call batches. Omit to auto-fetch. Use the nonces endpoint for replay protection. + + + Ordered list of calls to execute. Must contain between 1 and 50 entries. A single entry with sponsor=false uses EIP-1559; multiple entries use EIP-7702 batch execution via Gas Station. + + +Recipient address as a hex string with 0x prefix. + + +Amount of native asset to send in wei. + + +Hex-encoded call data for contract interactions. + + + + + + + + + createMfaPolicyIntent field + + +The ID of the User to add the MFA Policy to. + + +Human-readable name for a Policy. + + +A condition expression that evaluates to true or false, determining when this MFA policy applies. + + + An ordered list of authentication requirements. Each requirement must be satisfied sequentially to complete MFA. + + + A list of authentication methods for this MFA step. If only one method is provided, it is required. If multiple are provided, the user must satisfy ANY one of them. + + +type field + +Enum options: `AUTHENTICATION_TYPE_EMAIL_OTP`, `AUTHENTICATION_TYPE_SMS_OTP`, `AUTHENTICATION_TYPE_PASSKEY`, `AUTHENTICATION_TYPE_API_KEY`, `AUTHENTICATION_TYPE_OAUTH`, `AUTHENTICATION_TYPE_SESSION` + + + +Optional specific authenticator ID required (e.g., UUID of a passkey authenticator). If not provided, any authenticator of the specified type can be used. + + + + + + + + +The order in which this MFA policy is evaluated, starting from 0, relative to other MFA policies. Lower order values are evaluated first. + + +Notes for an MFA Policy. + + + + + + updateMfaPolicyIntent field + + +The ID of the User to update the MFA Policy for. + + +Unique identifier for a given MFA Policy. + + +Human-readable name for a Policy. + + +A condition expression that evaluates to true or false, determining when this MFA policy applies. + + + An ordered list of authentication requirements. Each requirement must be satisfied sequentially to complete MFA. + + + A list of authentication methods for this MFA step. If only one method is provided, it is required. If multiple are provided, the user must satisfy ANY one of them. + + +type field + +Enum options: `AUTHENTICATION_TYPE_EMAIL_OTP`, `AUTHENTICATION_TYPE_SMS_OTP`, `AUTHENTICATION_TYPE_PASSKEY`, `AUTHENTICATION_TYPE_API_KEY`, `AUTHENTICATION_TYPE_OAUTH`, `AUTHENTICATION_TYPE_SESSION` + + + +Optional specific authenticator ID required (e.g., UUID of a passkey authenticator). If not provided, any authenticator of the specified type can be used. + + + + + + + + +The order in which this MFA policy is evaluated, starting from 0, relative to other MFA policies. Lower order values are evaluated first. + + +Notes for an MFA Policy. + + + + + + deleteMfaPolicyIntent field + + +The ID of the User to delete the MFA Policy from. + + +Unique identifier for a given MFA Policy. + + + + + + createSessionProfileIntent field + + +Human-readable name for a Session Profile. + + +The scope string that defines the permissions for this Session Profile. + + +The duration in seconds for which sessions created with this Session Profile are valid. If not set, expiration will be determined by the value passed in to the intent of login activities. + + +Notes for a Session Profile. + + + + + + earnDeployWrapperIntent field + + +Address of the underlying yield vault to wrap (from the ListEarnVaults catalog). + + +CAIP-2 chain ID the vault lives on (e.g., 'eip155:8453' for Base). + +Enum options: `eip155:1`, `eip155:8453`, `eip155:42161`, `eip155:137`, `eip155:56`, `eip155:4217` + + + +Your fee on gross yield, in basis points (e.g., '2000' for 20%). Maximum is 4000 (40%). + + +The wallet address that receives the client's fee payouts on-chain. Must be a Turnkey-managed wallet address. + + + + + + earnDepositIntent field + + +Address of the deployed Earn wrapper to deposit into, from ListEarnVaults/ListEarnPositions. Must be one of the org's deployed wrappers. + + +A Wallet account address or Private Key address to deposit from and sign with. Must be an on-chain address; Private Key identifiers are not supported. + + +Amount of the underlying asset to deposit, in raw on-chain units (e.g., '1000000' for 1 USDC at 6 decimals). + + +CAIP-2 chain ID the vault lives on (e.g., 'eip155:8453' for Base). + +Enum options: `eip155:1`, `eip155:8453`, `eip155:42161`, `eip155:137`, `eip155:56`, `eip155:4217` + + + +Whether to sponsor this transaction via Gas Station. + + + + + + earnWithdrawIntent field + + +Address of the deployed Earn wrapper holding the position to withdraw from, from ListEarnPositions. Must be one of the org's deployed wrappers. + + +A Wallet account address or Private Key address to withdraw to and sign with. Must be an on-chain address; Private Key identifiers are not supported. + + +CAIP-2 chain ID the vault lives on (e.g., 'eip155:8453' for Base). + +Enum options: `eip155:1`, `eip155:8453`, `eip155:42161`, `eip155:137`, `eip155:56`, `eip155:4217` + + + +Whether to sponsor this transaction via Gas Station. + + +The amount of the underlying asset to withdraw, in raw on-chain units. Pass 'MAX' to withdraw the entire position. + + + + + + executeSwapIntent field + + +CAIP-19 asset ID for the input asset. The chain is derived from this value. + + +CAIP-19 asset ID for the output asset. May be on a different chain than `input_token` for cross-chain swaps. + + +Base-unit amount of the input asset. + + +Wallet account address to sign and submit the swap transaction from. Cross-wallet swaps are not supported. + + +Whether to sponsor the resulting swap transaction via Gas Station when supported by the chain. + + +Maximum allowed slippage in basis points. + + +Swap provider to execute with, as returned by create_swap_quote. When omitted, execution uses the default provider. + + +Minimum acceptable base-unit amount of the output asset. Execution fails if the swap provider's quoted minimum output falls below this floor at execution time. + + + + + + upsertSwapConfigIntent field + + +feeReceiverWalletAddress field + + +Client fee in basis points applied to swaps; used for all pairs unless stable_fee_bps is set. + + +Optional Enterprise-only override applied when both swap assets are stablecoins; falls back to fee_bps when unset. Non-Enterprise orgs may only set fee_bps. + + + + + + createTvcOperatorIntent field + + +Human-readable name for a new wallet created for this TVC operator + + +Unique identifier for an existing wallet to reuse for this TVC operator + + +Base derivation path for creating TVC operator wallet accounts + + +Human-readable name for this new TVC operator + + + + + + createTvcQuorumKeyIntent field + + +The threshold of operators needed to reassemble this TVC quorum key + + + Operator public keys used to encrypt and later approve the generated TVC quorum key shares + + +item field + + + + + + + + + reEncryptTvcQuorumKeyShareIntent field + + +Base64-encoded attestation document for the TVC deployment provisioning enclave + + +Base64-encoded manifest for the TVC deployment + + +Operator encryption public key used to encrypt the hosted TVC quorum key share + + +Operator signing public key used to approve the TVC manifest + + +Unique identifier of the TVC deployment receiving the re-encrypted quorum key share + + +Quorum key for the TVC application + + + + + + initImportSecretsIntent field + + +encryptionSuite field + +Enum options: `TRANSPORT_ENCRYPTION_SUITE_ENCLAVE_ENCRYPT_V1` + + + +The number of secrets the user intends to import. + + + + + + solSendTransactionIntentV2 field + + +Hex-encoded serialized unsigned Solana transaction (full wire format with zeroed signature placeholders) + + + Ordered Solana signer addresses Turnkey signs with. Between 1 and 16 signers. For sponsored transactions this must list every required signer of the transaction in transaction order. + + +item field + + + + + +Whether to sponsor this transaction via Gas Station. + + +CAIP-2 chain ID (e.g., 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' for Solana mainnet). Human-readable Solana aliases ('solana:mainnet', 'solana:devnet') are also accepted and normalized to canonical CAIP-2 values. + +Enum options: `solana:mainnet`, `solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp`, `solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d`, `solana:devnet`, `solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1`, `solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1wcaWoxPkrZBG` + + + +User-provided blockhash for replay protection / deadline control. If provided, it is used as-is, including for sponsored transactions (the transaction is only broadcastable while the blockhash is current). If omitted and sponsor=true, a fresh blockhash is fetched during execution. + + + + + +claimSwapFeesIntent field + + + earnSetWrapperStateIntent field + + +Address of the deployed Earn wrapper to update, from ListEarnVaults/ListEarnPositions. Must be one of the org's deployed wrappers. + + +When true, deposits to this wrapper are rejected; withdrawals are unaffected. Set to false to re-enable deposits. + + + + + + claimEarnFeesIntent field + + +Address of the deployed Earn wrapper to claim fees for. Must be one of the org's deployed wrappers. + + + + + + updateWalletAccountNameIntent field + + +Unique identifier for a given Wallet Account. + + +Human-readable name for this Wallet Account. + + + + + + ethUndelegate7702Intent field + + +A wallet or private key address to undelegate. This does not support private key IDs. + + +CAIP-2 chain ID (e.g., 'eip155:1' for Ethereum mainnet). + +Enum options: `eip155:1`, `eip155:11155111`, `eip155:8453`, `eip155:84532`, `eip155:137`, `eip155:80002`, `eip155:56`, `eip155:97`, `eip155:10`, `eip155:11155420`, `eip155:143`, `eip155:10143`, `eip155:42161`, `eip155:421614` + + + +Outer transaction nonce. Omit to auto-fetch. + + +Maximum amount of gas for the undelegation transaction. Omit to use the fixed undelegation gas limit. + + +Maximum total fee per gas unit (base fee + priority fee) in wei. Omit to auto-estimate. + + +Maximum priority fee (tip) per gas unit in wei. Omit to auto-estimate. + + + + + + executeSwapIntentV2 field + + +Quote identifier returned by create_swap_quote. Execution is bound to this quote; the signer is derived from the quote and must not be resupplied. + + +CAIP-19 asset ID for the input asset. + + +Exact base-unit amount of the input asset committed by the quote. + + +CAIP-19 asset ID for the output asset. + + +Exact quoted base-unit output amount committed by the quote. + + +Exact minimum base-unit output committed by the quote. + + +Whether the quoted transaction is sponsored. + + +Exact EVM sender (EOA account) nonce. Valid only for a non-sponsored EVM swap. Honored for already-delegated (Type-2) batch swaps and single-call swaps; ignored for not-yet-delegated EIP-7702 (Type-4) batches where the outer nonce is derived from the authorization. Prefer gas_station_nonce for batch replay protection and use the nonces endpoint to fetch it. Omit to auto-fetch. + + +Exact Solana recent blockhash. Valid only for a Solana swap, including sponsored swaps. Omit to auto-fetch. + + +Exact gas station delegate contract nonce used in the BatchExecution EIP-712 message. Valid for sponsored EVM swaps and non-sponsored EVM swaps that execute as a multi-call batch (for example ERC-20 approve + swap). This is the replay-protection nonce for gas-station batches; use the nonces endpoint to fetch it. Omit to auto-fetch. + + + + + + createSwapQuoteIntent field + + +Wallet account or Private Key address used to price the executable provider quote. Private Key identifiers are not supported. + + +CAIP-19 asset ID for the input asset. The chain is derived from this value. + + +CAIP-19 asset ID for the output asset. + + +Base-unit amount of the input asset. + + +Provider-neutral maximum allowed slippage in basis points. Turnkey converts this value to each provider's request format. When omitted, each provider applies its default slippage behavior. + + + + + + importSecretsIntent field + + + A list of secrets to import. + + +Optional human-readable name for the secret. Names must be unique within an organization when provided. + + +Encryption suite specific payload containing the secret ciphertext. For enclave encrypt v1 this is a JSON-encoded ClientSendMsg. + + +Targeted transport encryption public key, as returned by InitImportSecrets. + + +encryptionSuite field + +Enum options: `TRANSPORT_ENCRYPTION_SUITE_ENCLAVE_ENCRYPT_V1` + + + + Policy-visible, static properties to permanently bind to the secret. + + +key field + + +value field + + + + + + + + + + + + + + + result field + + + createOrganizationResult field + + +Unique identifier for a given Organization. + + + + + + createAuthenticatorsResult field + + + A list of Authenticator IDs. + + +item field + + + + + + + + + createUsersResult field + + + A list of User IDs. + + +item field + + + + + + + + + createPrivateKeysResult field + + + A list of Private Key IDs. + + +item field + + + + + + + + + createInvitationsResult field + + + A list of Invitation IDs + + +item field + + + + + + + + + acceptInvitationResult field + + +Unique identifier for a given Invitation. + + +Unique identifier for a given User. + + + + + + signRawPayloadResult field + + +Component of an ECSDA signature. + + +Component of an ECSDA signature. + + +Component of an ECSDA signature. + + + + + + createPolicyResult field + + +Unique identifier for a given Policy. + + + + + + disablePrivateKeyResult field + + +Unique identifier for a given Private Key. + + + + + + deleteUsersResult field + + + A list of User IDs. + + +item field + + + + + + + + + deleteAuthenticatorsResult field + + + Unique identifier for a given Authenticator. + + +item field + + + + + + + + + deleteInvitationResult field + + +Unique identifier for a given Invitation. + + + + + + deleteOrganizationResult field + + +Unique identifier for a given Organization. + + + + + + deletePolicyResult field + + +Unique identifier for a given Policy. + + + + + + createUserTagResult field + + +Unique identifier for a given User Tag. + + + A list of User IDs. + + +item field + + + + + + + + + deleteUserTagsResult field + + + A list of User Tag IDs. + + +item field + + + + + + A list of User IDs. + + +item field + + + + + + + + + signTransactionResult field + + +signedTransaction field + + + + + + deleteApiKeysResult field + + + A list of API Key IDs. + + +item field + + + + + + + + + createApiKeysResult field + + + A list of API Key IDs. + + +item field + + + + + + + + + createPrivateKeyTagResult field + + +Unique identifier for a given Private Key Tag. + + + A list of Private Key IDs. + + +item field + + + + + + + + + deletePrivateKeyTagsResult field + + + A list of Private Key Tag IDs. + + +item field + + + + + + A list of Private Key IDs. + + +item field + + + + + + + + + setPaymentMethodResult field + + +The last four digits of the credit card added. + + +The name associated with the payment method. + + +The email address associated with the payment method. + + + + + + activateBillingTierResult field + + +The id of the product being subscribed to. + + + + + + deletePaymentMethodResult field + + +The payment method that was removed. + + + + + + createApiOnlyUsersResult field + + + A list of API-only User IDs. + + +item field + + + + + + + + +updateRootQuorumResult field + + + updateUserTagResult field + + +Unique identifier for a given User Tag. + + + + + + updatePrivateKeyTagResult field + + +Unique identifier for a given Private Key Tag. + + + + + + createSubOrganizationResult field + + +subOrganizationId field + + + rootUserIds field + + +item field + + + + + + + + +updateAllowedOriginsResult field + + + createPrivateKeysResultV2 field + + + A list of Private Key IDs and addresses. + + +privateKeyId field + + + addresses field + + +format field + +Enum options: `ADDRESS_FORMAT_UNCOMPRESSED`, `ADDRESS_FORMAT_COMPRESSED`, `ADDRESS_FORMAT_ETHEREUM`, `ADDRESS_FORMAT_SOLANA`, `ADDRESS_FORMAT_COSMOS`, `ADDRESS_FORMAT_TRON`, `ADDRESS_FORMAT_SUI`, `ADDRESS_FORMAT_APTOS`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2PKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2SH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WSH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2TR`, `ADDRESS_FORMAT_SEI`, `ADDRESS_FORMAT_XLM`, `ADDRESS_FORMAT_DOGE_MAINNET`, `ADDRESS_FORMAT_DOGE_TESTNET`, `ADDRESS_FORMAT_TON_V3R2`, `ADDRESS_FORMAT_TON_V4R2`, `ADDRESS_FORMAT_TON_V5R1`, `ADDRESS_FORMAT_XRP`, `ADDRESS_FORMAT_SPARK_MAINNET`, `ADDRESS_FORMAT_SPARK_REGTEST` + + + +address field + + + + + + + + + + + + updateUserResult field + + +A User ID. + + + + + + updatePolicyResult field + + +Unique identifier for a given Policy. + + + + + + createSubOrganizationResultV3 field + + +subOrganizationId field + + + A list of Private Key IDs and addresses. + + +privateKeyId field + + + addresses field + + +format field + +Enum options: `ADDRESS_FORMAT_UNCOMPRESSED`, `ADDRESS_FORMAT_COMPRESSED`, `ADDRESS_FORMAT_ETHEREUM`, `ADDRESS_FORMAT_SOLANA`, `ADDRESS_FORMAT_COSMOS`, `ADDRESS_FORMAT_TRON`, `ADDRESS_FORMAT_SUI`, `ADDRESS_FORMAT_APTOS`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2PKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2SH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WSH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2TR`, `ADDRESS_FORMAT_SEI`, `ADDRESS_FORMAT_XLM`, `ADDRESS_FORMAT_DOGE_MAINNET`, `ADDRESS_FORMAT_DOGE_TESTNET`, `ADDRESS_FORMAT_TON_V3R2`, `ADDRESS_FORMAT_TON_V4R2`, `ADDRESS_FORMAT_TON_V5R1`, `ADDRESS_FORMAT_XRP`, `ADDRESS_FORMAT_SPARK_MAINNET`, `ADDRESS_FORMAT_SPARK_REGTEST` + + + +address field + + + + + + + + + rootUserIds field + + +item field + + + + + + + + + createWalletResult field + + +Unique identifier for a Wallet. + + + A list of account addresses. + + +item field + + + + + + + + + createWalletAccountsResult field + + + A list of derived addresses. + + +item field + + + + + + + + + initUserEmailRecoveryResult field + + +Unique identifier for the user being recovered. + + + + + + recoverUserResult field + + + ID of the authenticator created. + + +item field + + + + + + + + + setOrganizationFeatureResult field + + + Resulting list of organization features. + + +name field + +Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_SWAP_CONFIG`, `FEATURE_NAME_EARN_CONFIG` + + + +value field + + + + + + + + + removeOrganizationFeatureResult field + + + Resulting list of organization features. + + +name field + +Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_SWAP_CONFIG`, `FEATURE_NAME_EARN_CONFIG` + + + +value field + + + + + + + + + exportPrivateKeyResult field + + +Unique identifier for a given Private Key. + + +Export bundle containing a private key encrypted to the client's target public key. + + + + + + exportWalletResult field + + +Unique identifier for a given Wallet. + + +Export bundle containing a wallet mnemonic + optional newline passphrase encrypted by the client's target public key. + + + + + + createSubOrganizationResultV4 field + + +subOrganizationId field + + + wallet field + + +walletId field + + + A list of account addresses. + + +item field + + + + + + + + + rootUserIds field + + +item field + + + + + + + + + emailAuthResult field + + +Unique identifier for the authenticating User. + + +Unique identifier for the created API key. + + + + + + exportWalletAccountResult field + + +Address to identify Wallet Account. + + +Export bundle containing a private key encrypted by the client's target public key. + + + + + + initImportWalletResult field + + +Import bundle containing a public key and signature to use for importing client data. + + + + + + importWalletResult field + + +Unique identifier for a Wallet. + + + A list of account addresses. + + +item field + + + + + + + + + initImportPrivateKeyResult field + + +Import bundle containing a public key and signature to use for importing client data. + + + + + + importPrivateKeyResult field + + +Unique identifier for a Private Key. + + + A list of addresses. + + +format field + +Enum options: `ADDRESS_FORMAT_UNCOMPRESSED`, `ADDRESS_FORMAT_COMPRESSED`, `ADDRESS_FORMAT_ETHEREUM`, `ADDRESS_FORMAT_SOLANA`, `ADDRESS_FORMAT_COSMOS`, `ADDRESS_FORMAT_TRON`, `ADDRESS_FORMAT_SUI`, `ADDRESS_FORMAT_APTOS`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2PKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2SH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WSH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2TR`, `ADDRESS_FORMAT_SEI`, `ADDRESS_FORMAT_XLM`, `ADDRESS_FORMAT_DOGE_MAINNET`, `ADDRESS_FORMAT_DOGE_TESTNET`, `ADDRESS_FORMAT_TON_V3R2`, `ADDRESS_FORMAT_TON_V4R2`, `ADDRESS_FORMAT_TON_V5R1`, `ADDRESS_FORMAT_XRP`, `ADDRESS_FORMAT_SPARK_MAINNET`, `ADDRESS_FORMAT_SPARK_REGTEST` + + + +address field + + + + + + + + + createPoliciesResult field + + + A list of unique identifiers for the created policies. + + +item field + + + + + + + + + signRawPayloadsResult field + + + signatures field + + +Component of an ECSDA signature. + + +Component of an ECSDA signature. + + +Component of an ECSDA signature. + + + + + + + + + createReadOnlySessionResult field + + +Unique identifier for a given Organization. If the request is being made by a user and their Sub-Organization ID is unknown, this can be the Parent Organization ID. However, using the Sub-Organization ID is preferred due to performance reasons. + + +Human-readable name for an Organization. + + +Unique identifier for a given User. + + +Human-readable name for a User. + + +String representing a read only session + + +UTC timestamp in seconds representing the expiry time for the read only session. + + + + + + createOauthProvidersResult field + + + A list of unique identifiers for Oauth Providers + + +item field + + + + + + + + + deleteOauthProvidersResult field + + + A list of unique identifiers for Oauth Providers + + +item field + + + + + + + + + createSubOrganizationResultV5 field + + +subOrganizationId field + + + wallet field + + +walletId field + + + A list of account addresses. + + +item field + + + + + + + + + rootUserIds field + + +item field + + + + + + + + + oauthResult field + + +Unique identifier for the authenticating User. + + +Unique identifier for the created API key. + + +HPKE encrypted credential bundle + + + + + + createReadWriteSessionResult field + + +Unique identifier for a given Organization. If the request is being made by a user and their Sub-Organization ID is unknown, this can be the Parent Organization ID. However, using the Sub-Organization ID is preferred due to performance reasons. + + +Human-readable name for an Organization. + + +Unique identifier for a given User. + + +Human-readable name for a User. + + +Unique identifier for the created API key. + + +HPKE encrypted credential bundle + + + + + + createSubOrganizationResultV6 field + + +subOrganizationId field + + + wallet field + + +walletId field + + + A list of account addresses. + + +item field + + + + + + + + + rootUserIds field + + +item field + + + + + + + + + deletePrivateKeysResult field + + + A list of private key unique identifiers that were removed + + +item field + + + + + + + + + deleteWalletsResult field + + + A list of wallet unique identifiers that were removed + + +item field + + + + + + + + + createReadWriteSessionResultV2 field + + +Unique identifier for a given Organization. If the request is being made by a user and their Sub-Organization ID is unknown, this can be the Parent Organization ID. However, using the Sub-Organization ID is preferred due to performance reasons. + + +Human-readable name for an Organization. + + +Unique identifier for a given User. + + +Human-readable name for a User. + + +Unique identifier for the created API key. + + +HPKE encrypted credential bundle + + + + + + deleteSubOrganizationResult field + + +Unique identifier of the sub organization that was removed + + + + + + initOtpAuthResult field + + +Unique identifier for an OTP authentication + + + + + + otpAuthResult field + + +Unique identifier for the authenticating User. + + +Unique identifier for the created API key. + + +HPKE encrypted credential bundle + + + + + + createSubOrganizationResultV7 field + + +subOrganizationId field + + + wallet field + + +walletId field + + + A list of account addresses. + + +item field + + + + + + + + + rootUserIds field + + +item field + + + + + + + + + updateWalletResult field + + +A Wallet ID. + + + + + + updatePolicyResultV2 field + + +Unique identifier for a given Policy. + + + + + + initOtpAuthResultV2 field + + +Unique identifier for an OTP authentication + + + + + + initOtpResult field + + +Unique identifier for an OTP authentication + + + + + + verifyOtpResult field + + +Signed JWT containing a unique id, expiry, verification type, contact. Verification status of a user is updated when the token is consumed (in OTP_LOGIN requests) + + + + + + otpLoginResult field + + +Signed JWT containing an expiry, public key, session type, user id, and organization id + + + + + + stampLoginResult field + + +Signed JWT containing an expiry, public key, session type, user id, and organization id + + + + + + oauthLoginResult field + + +Signed JWT containing an expiry, public key, session type, user id, and organization id + + + + + + updateUserNameResult field + + +Unique identifier of the User whose name was updated. + + + + + + updateUserEmailResult field + + +Unique identifier of the User whose email was updated. + + + + + + updateUserPhoneNumberResult field + + +Unique identifier of the User whose phone number was updated. + + + + + + initFiatOnRampResult field + + +Unique URL for a given fiat on-ramp flow. + + +Unique identifier used to retrieve transaction statuses for a given fiat on-ramp flow. + + +Optional signature of the MoonPay Widget URL. The signature is generated if the Init Fiat On Ramp intent includes the urlForSignature field. The signature can be used to initialize the MoonPay SDKs when URL signing is enabled for your project. + + + + + + createSmartContractInterfaceResult field + + +The ID of the created Smart Contract Interface. + + + + + + deleteSmartContractInterfaceResult field + + +The ID of the deleted Smart Contract Interface. + + + + + + enableAuthProxyResult field + + +A User ID with permission to initiate authentication. + + + + + +disableAuthProxyResult field + + + updateAuthProxyConfigResult field + + +Unique identifier for a given User. (representing the turnkey signer user id) + + + + + + createOauth2CredentialResult field + + +Unique identifier of the OAuth 2.0 credential that was created + + + + + + updateOauth2CredentialResult field + + +Unique identifier of the OAuth 2.0 credential that was updated + + + + + + deleteOauth2CredentialResult field + + +Unique identifier of the OAuth 2.0 credential that was deleted + + + + + + oauth2AuthenticateResult field + + +Base64 encoded OIDC token issued by Turnkey to be used with the LoginWithOAuth activity + + + + + + deleteWalletAccountsResult field + + + A list of wallet account unique identifiers that were removed + + +item field + + + + + + + + + deletePoliciesResult field + + + A list of unique identifiers for the deleted policies. + + +item field + + + + + + + + + ethSendRawTransactionResult field + + +The transaction hash of the sent transaction + + + + + + createFiatOnRampCredentialResult field + + +Unique identifier of the Fiat On-Ramp credential that was created + + + + + + updateFiatOnRampCredentialResult field + + +Unique identifier of the Fiat On-Ramp credential that was updated + + + + + + deleteFiatOnRampCredentialResult field + + +Unique identifier of the Fiat On-Ramp credential that was deleted + + + + + + ethSendTransactionResult field + + +The send_transaction_status ID associated with the transaction submission + + + + + + upsertGasUsageConfigResult field + + +Unique identifier for the gas usage configuration that was created or updated. + + + + + + createTvcAppResult field + + +The unique identifier for the TVC application + + +The unique identifier for the TVC manifest set + + + The unique identifier(s) of the manifest set operators + + +item field + + + + + +The required number of approvals for the manifest set + + +The unique identifier for the TVC share set + + + The unique identifiers of the share set operators + + +item field + + + + + +The required number of approvals for the share set + + + + + + createTvcDeploymentResult field + + +The unique identifier for the TVC deployment + + +The unique identifier for the TVC manifest + + + + + + createTvcManifestApprovalsResult field + + + The unique identifier(s) for the manifest approvals + + +item field + + + + + + + + + solSendTransactionResult field + + +The send_transaction_status ID associated with the transaction submission + + + + + + initOtpResultV2 field + + +Unique identifier for an OTP flow + + +Signed bundle containing a target encryption key to use when submitting OTP codes. + + + + + + updateOrganizationNameResult field + + +Unique identifier for the Organization. + + +The updated organization name. + + + + + + createSubOrganizationResultV8 field + + +subOrganizationId field + + + wallet field + + +walletId field + + + A list of account addresses. + + +item field + + + + + + + + + rootUserIds field + + +item field + + + + + + + + + createOauthProvidersResultV2 field + + + A list of unique identifiers for Oauth Providers + + +item field + + + + + + + + + createWebhookEndpointResult field + + +Unique identifier of the created webhook endpoint. + + + webhookEndpoint field + + +Unique identifier of the webhook endpoint. + + +Unique identifier for a given Organization. + + +The destination URL for webhook delivery. + + +Human-readable name for this webhook endpoint. + + +Whether this webhook endpoint is active. + + + Current subscriptions attached to this endpoint. + + +The event type to subscribe to (for example, ACTIVITY_UPDATES, BALANCE_CONFIRMED_UPDATES, or BALANCE_FINALIZED_UPDATES). + + +JSON-encoded filter criteria for this subscription. + + +Whether this subscription is active. + + + + + + + + + + + + updateWebhookEndpointResult field + + +Unique identifier of the updated webhook endpoint. + + + webhookEndpoint field + + +Unique identifier of the webhook endpoint. + + +Unique identifier for a given Organization. + + +The destination URL for webhook delivery. + + +Human-readable name for this webhook endpoint. + + +Whether this webhook endpoint is active. + + + Current subscriptions attached to this endpoint. + + +The event type to subscribe to (for example, ACTIVITY_UPDATES, BALANCE_CONFIRMED_UPDATES, or BALANCE_FINALIZED_UPDATES). + + +JSON-encoded filter criteria for this subscription. + + +Whether this subscription is active. + + + + + + + + + + + + deleteWebhookEndpointResult field + + +Unique identifier of the deleted webhook endpoint. + + + + + +setIpAllowlistResult field + + +removeIpAllowlistResult field + + +updateTvcAppLiveDeploymentResult field + + + deleteTvcDeploymentResult field + + +The unique identifier of the deleted TVC deployment. + + + + + + deleteTvcAppAndDeploymentsResult field + + +The unique identifier of the deleted TVC app. + + + + + + restoreTvcDeploymentResult field + + +The unique identifier of the restored TVC deployment. + + + + + + sparkSignFrostResult field + + + Partial signatures plus Turnkey commitments, one per request, in order. + + +Hex-encoded FROST partial signature. + + +Turnkey's hiding commitment D (hex-encoded compressed secp256k1 point). Forward to the Spark Operator. + + +Turnkey's binding commitment E (hex-encoded compressed secp256k1 point). Forward to the Spark Operator. + + + + + + + + + sparkPrepareTransferResult field + + + Per-operator ECIES-encrypted packages. + + +Spark operator identifier (UUID). + + +ECIES ciphertext (hex-encoded) opaque to Turnkey after emission. + + + + + +Hex-encoded ECDSA-DER signature of the TransferPackage signing payload, signed with the wallet's IDENTITY key. + + + Newly-derived SigningLeaf public keys, one per leaf, in input order. + + +The Spark leaf_id this public key was derived for. + + +Hex-encoded compressed secp256k1 point (33 bytes) for the SigningLeaf derivation at leaf_id. + + + + + + + + + sparkClaimTransferResult field + + + Per-operator ECIES-encrypted packages. + + +Spark operator identifier (UUID). + + +ECIES ciphertext (hex-encoded) opaque to Turnkey after emission. + + + + + + Newly-derived SigningLeaf public keys, one per leaf, in input order. + + +The Spark leaf_id this public key was derived for. + + +Hex-encoded compressed secp256k1 point (33 bytes) for the SigningLeaf derivation at leaf_id. + + + + + + + + + sparkPrepareLightningReceiveResult field + + + Per-operator ECIES-encrypted Feldman share packages. + + +Spark operator identifier (UUID). + + +ECIES ciphertext (hex-encoded) opaque to Turnkey after emission. + + + + + +Hex-encoded SHA256(preimage). Forward to the Lightning node. + + + + + + postTvcQuorumKeyShareResult field + + +The unique identifier for the provisioning quorum key share + + + + + + ethSendTransactionResultV2 field + + +The send_transaction_status ID associated with the transaction submission + + + + + + createMfaPolicyResult field + + +Unique identifier for a given MFA Policy. + + + + + + updateMfaPolicyResult field + + +Unique identifier for a given MFA Policy. + + + + + + deleteMfaPolicyResult field + + +Unique identifier for a given MFA Policy. + + + + + + createSessionProfileResult field + + +Unique identifier for a given Session Profile. + + + + + + earnDeployWrapperResult field + + +Address of the deployed fee wrapper (the deposit target). + + +Address of the deployed fee splitter (PaymentSplitter for Morpho, RevenueSplitterOwner for Aave). + + +Identifier to poll deploy status. + + + + + + earnDepositResult field + + +Identifier to poll deposit status and tx hash via GetEarnDepositStatus. + + + + + + earnWithdrawResult field + + +Identifier to poll withdrawal status and tx hash via GetEarnWithdrawStatus. + + + + + + executeSwapResult field + + +Identifier to poll swap status via GetSwapStatus. + + +Swap provider used to build the transaction. + + +Quote identifier used for execution, if any. + + + + + + upsertSwapConfigResult field + + +feeReceiverWalletAddress field + + +feeBps field + + +stableFeeBps field + + + + + + createTvcOperatorResult field + + +The unique identifier for the wallet containing TVC operator accounts + + +The unique identifier for the TVC operator + + +Public encryption key for this TVC operator + + +Public signing key for this TVC operator + + + + + + createTvcQuorumKeyResult field + + +The unique identifier for the TVC quorum key + + +Public key for the generated TVC quorum key + + + The unique identifier(s) for the generated TVC quorum key shares + + +item field + + + + + + + + + reEncryptTvcQuorumKeyShareResult field + + +The unique identifier for the provisioning quorum key share + + + + + + initImportSecretsResult field + + + Enclave ingress target keys along with metadata specific to the encryption suite. For enclave encrypt v1 this will be ServerTargetMsgV1. + + +item field + + + + + + + + + solSendTransactionResultV2 field + + +The send_transaction_status ID associated with the transaction submission + + + + + + claimSwapFeesResult field + + +Relay claim request ID submitted through the permit endpoint. + + + + + + earnSetWrapperStateResult field + + +Address of the updated Earn wrapper. + + +The wrapper's deposit state after this activity. + + + + + + claimEarnFeesResult field + + +Identifier to poll claim status and tx hash via GetClaimEarnFeesStatus. + + + + + + updateWalletAccountNameResult field + + +Unique identifier for a given Wallet Account. + + + + + + ethUndelegate7702Result field + + +The send_transaction_status ID associated with the undelegation transaction submission + + + + + + createSwapQuoteResult field + + + One or more provider quotes for this request. Today this contains a single Relay quote; pass quotes[i].quoteId to execute_swap_v2 to bind execution. + + +Identifier for this provider quote. Pass this value to execute_swap_v2 to bind execution to this exact quote. The signer is derived from the quote; clients do not resupply sign_with on execute. + + +Swap provider that produced this quote. + + +Estimated base-unit amount of the output asset. + + +Minimum acceptable base-unit amount of the output asset after slippage. + + +Quote expiration as a millisecond epoch string. + + +Provider-neutral maximum allowed slippage in basis points, echoed from the quote request when set. + + +Client fee in basis points applied for this pair. Informational only; already reflected in output_amount and min_output_amount. + + +Provider-estimated completion time in seconds, when available. + + + + + + + + + importSecretsResult field + + + Unique identifier for each imported secret, in the order the params were specified. + + +item field + + + + + + + + + + + + A list of objects representing a particular User's approval or rejection of a Consensus request, including all relevant metadata. + + +Unique identifier for a given Vote object. + + +Unique identifier for a given User. + + + user field + + +Unique identifier for a given User. + + +Human-readable name for a User. + + +The user's email address. + + +The user's phone number in E.164 format e.g. +13214567890 + + + A list of Authenticator parameters. + + + Types of transports that may be used by an Authenticator (e.g., USB, NFC, BLE). + + +item field + +Enum options: `AUTHENTICATOR_TRANSPORT_BLE`, `AUTHENTICATOR_TRANSPORT_INTERNAL`, `AUTHENTICATOR_TRANSPORT_NFC`, `AUTHENTICATOR_TRANSPORT_USB`, `AUTHENTICATOR_TRANSPORT_HYBRID` + + + + + + +attestationType field + + +Identifier indicating the type of the Security Key. + + +Unique identifier for a WebAuthn credential. + + +The type of Authenticator device. + + + credential field + + +The public component of a cryptographic key pair used to sign messages and transactions. + + +type field + +Enum options: `CREDENTIAL_TYPE_WEBAUTHN_AUTHENTICATOR`, `CREDENTIAL_TYPE_API_KEY_P256`, `CREDENTIAL_TYPE_RECOVER_USER_KEY_P256`, `CREDENTIAL_TYPE_API_KEY_SECP256K1`, `CREDENTIAL_TYPE_EMAIL_AUTH_KEY_P256`, `CREDENTIAL_TYPE_API_KEY_ED25519`, `CREDENTIAL_TYPE_OTP_AUTH_KEY_P256`, `CREDENTIAL_TYPE_READ_WRITE_SESSION_KEY_P256`, `CREDENTIAL_TYPE_OAUTH_KEY_P256`, `CREDENTIAL_TYPE_LOGIN` + + + +The session profile associated with this credential, if any. This field is only applicable for credentials of type CREDENTIAL_TYPE_LOGIN. + + + + + +Unique identifier for a given Authenticator. + + +Human-readable name for an Authenticator. + + + createdAt field + + +seconds field + + +nanos field + + + + + + updatedAt field + + +seconds field + + +nanos field + + + + + + + + + A list of API Key parameters. This field, if not needed, should be an empty array in your request body. + + + credential field + + +The public component of a cryptographic key pair used to sign messages and transactions. + + +type field + +Enum options: `CREDENTIAL_TYPE_WEBAUTHN_AUTHENTICATOR`, `CREDENTIAL_TYPE_API_KEY_P256`, `CREDENTIAL_TYPE_RECOVER_USER_KEY_P256`, `CREDENTIAL_TYPE_API_KEY_SECP256K1`, `CREDENTIAL_TYPE_EMAIL_AUTH_KEY_P256`, `CREDENTIAL_TYPE_API_KEY_ED25519`, `CREDENTIAL_TYPE_OTP_AUTH_KEY_P256`, `CREDENTIAL_TYPE_READ_WRITE_SESSION_KEY_P256`, `CREDENTIAL_TYPE_OAUTH_KEY_P256`, `CREDENTIAL_TYPE_LOGIN` + + + +The session profile associated with this credential, if any. This field is only applicable for credentials of type CREDENTIAL_TYPE_LOGIN. + + + + + +Unique identifier for a given API Key. + + +Human-readable name for an API Key. + + + createdAt field + + +seconds field + + +nanos field + + + + + + updatedAt field + + +seconds field + + +nanos field + + + + + +Optional window (in seconds) indicating how long the API Key should last. + + + + + + A list of User Tag IDs. + + +item field + + + + + + A list of Oauth Providers. + + +Unique identifier for an OAuth Provider + + +Human-readable name to identify a Provider. + + +The issuer of the token, typically a URL indicating the authentication server, e.g https://accounts.google.com + + +Expected audience ('aud' attribute of the signed token) which represents the app ID + + +Expected subject ('sub' attribute of the signed token) which represents the user ID + + + createdAt field + + +seconds field + + +nanos field + + + + + + updatedAt field + + +seconds field + + +nanos field + + + + + + + + + createdAt field + + +seconds field + + +nanos field + + + + + + updatedAt field + + +seconds field + + +nanos field + + + + + + A list of MFA Policies that define multi-factor authentication requirements for this user. + + +Unique identifier for a given MFA Policy. + + +Human-readable name for an MFA Policy. + + +A condition expression that evaluates to true or false, determining when this MFA policy applies. + + + An ordered list of authentication requirements. Each requirement must be satisfied sequentially to complete MFA. + + + A list of authentication methods for this MFA step. If only one method is provided, it is required. If multiple are provided, the user must satisfy ANY one of them. + + +type field + +Enum options: `AUTHENTICATION_TYPE_EMAIL_OTP`, `AUTHENTICATION_TYPE_SMS_OTP`, `AUTHENTICATION_TYPE_PASSKEY`, `AUTHENTICATION_TYPE_API_KEY`, `AUTHENTICATION_TYPE_OAUTH`, `AUTHENTICATION_TYPE_SESSION` + + + +Optional specific authenticator ID required (e.g., for requiring a specific session profile id) + + + + + + + + +The order in which this policy is evaluated relative to other MFA policies. + + +Optional human-readable notes added by a User to describe a particular MFA policy. + + + createdAt field + + +seconds field + + +nanos field + + + + + + updatedAt field + + +seconds field + + +nanos field + + + + + + + + + + + +Unique identifier for a given Activity object. + + +selection field + +Enum options: `VOTE_SELECTION_APPROVED`, `VOTE_SELECTION_REJECTED` + + + +The raw message being signed within a Vote. + + +The public component of a cryptographic key pair used to sign messages and transactions. + + +The signature applied to a particular vote. + + +Method used to produce a signature. + + + createdAt field + + +seconds field + + +nanos field + + + + + + + + + A list of App Proofs generated by enclaves during activity execution, providing verifiable attestations of performed operations. + + +scheme field + +Enum options: `SIGNATURE_SCHEME_EPHEMERAL_KEY_P256` + + + +Ephemeral public key. + + +JSON serialized AppProofPayload. + + +Signature over hashed proof_payload. + + + + + +An artifact verifying a User's action. + + +canApprove field + + +canReject field + + + createdAt field + + +seconds field + + +nanos field + + + + + + updatedAt field + + +seconds field + + +nanos field + + + + + + failure field + + +code field + + +message field + + + details field + + +@type field + + + + + + + + + + + + + +```bash title="cURL" +curl --request POST \ + --url https://api.turnkey.com/public/v1/query/get_activity \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header "X-Stamp: (see Authorizations)" \ + --data '{ + "organizationId": "", + "activityId": "" +}' +``` + +```javascript title="JavaScript" +import { Turnkey } from "@turnkey/sdk-server"; + +const turnkeyClient = new Turnkey({ + apiBaseUrl: "https://api.turnkey.com", + apiPublicKey: process.env.API_PUBLIC_KEY!, + apiPrivateKey: process.env.API_PRIVATE_KEY!, + defaultOrganizationId: process.env.ORGANIZATION_ID!, +}); + +const response = await turnkeyClient.apiClient().getActivity({ + organizationId: " (Unique identifier for a given organization.)", + activityId: " (Unique identifier for a given activity object.)" +}); +``` + + + + + +```json 200 +{ + "activity": { + "id": "", + "organizationId": "", + "status": "", + "type": "", + "intent": { + "createOrganizationIntent": { + "organizationName": "", + "rootEmail": "", + "rootAuthenticator": { + "authenticatorName": "", + "userId": "", + "attestation": { + "id": "", + "type": "", + "rawId": "", + "authenticatorAttachment": "", + "response": { + "clientDataJson": "", + "attestationObject": "", + "transports": [ + "" + ], + "authenticatorAttachment": "" + }, + "clientExtensionResults": { + "appid": "", + "appidExclude": "", + "credProps": { + "rk": "" + } + } + }, + "challenge": "" + }, + "rootUserId": "" + } + }, + "result": { + "createOrganizationResult": { + "organizationId": "" + }, + "createAuthenticatorsResult": { + "authenticatorIds": [ + "" + ] + }, + "createUsersResult": { + "userIds": [ + "" + ] + }, + "createPrivateKeysResult": { + "privateKeyIds": [ + "" + ] + }, + "createInvitationsResult": { + "invitationIds": [ + "" + ] + }, + "acceptInvitationResult": { + "invitationId": "", + "userId": "" + }, + "signRawPayloadResult": { + "r": "", + "s": "", + "v": "" + }, + "createPolicyResult": { + "policyId": "" + }, + "disablePrivateKeyResult": { + "privateKeyId": "" + }, + "deleteUsersResult": { + "userIds": [ + "" + ] + }, + "deleteAuthenticatorsResult": { + "authenticatorIds": [ + "" + ] + }, + "deleteInvitationResult": { + "invitationId": "" + }, + "deleteOrganizationResult": { + "organizationId": "" + }, + "deletePolicyResult": { + "policyId": "" + }, + "createUserTagResult": { + "userTagId": "", + "userIds": [ + "" + ] + }, + "deleteUserTagsResult": { + "userTagIds": [ + "" + ], + "userIds": [ + "" + ] + }, + "signTransactionResult": { + "signedTransaction": "" + }, + "deleteApiKeysResult": { + "apiKeyIds": [ + "" + ] + }, + "createApiKeysResult": { + "apiKeyIds": [ + "" + ] + }, + "createPrivateKeyTagResult": { + "privateKeyTagId": "", + "privateKeyIds": [ + "" + ] + }, + "deletePrivateKeyTagsResult": { + "privateKeyTagIds": [ + "" + ], + "privateKeyIds": [ + "" + ] + }, + "setPaymentMethodResult": { + "lastFour": "", + "cardHolderName": "", + "cardHolderEmail": "" + }, + "activateBillingTierResult": { + "productId": "" + }, + "deletePaymentMethodResult": { + "paymentMethodId": "" + }, + "createApiOnlyUsersResult": { + "userIds": [ + "" + ] + }, + "updateRootQuorumResult": "", + "updateUserTagResult": { + "userTagId": "" + }, + "updatePrivateKeyTagResult": { + "privateKeyTagId": "" + }, + "createSubOrganizationResult": { + "subOrganizationId": "", + "rootUserIds": [ + "" + ] + }, + "updateAllowedOriginsResult": "", + "createPrivateKeysResultV2": { + "privateKeys": [ + { + "privateKeyId": "", + "addresses": [ + { + "format": "", + "address": "" + } + ] + } + ] + }, + "updateUserResult": { + "userId": "" + }, + "updatePolicyResult": { + "policyId": "" + }, + "createSubOrganizationResultV3": { + "subOrganizationId": "", + "privateKeys": [ + { + "privateKeyId": "", + "addresses": [ + { + "format": "", + "address": "" + } + ] + } + ], + "rootUserIds": [ + "" + ] + }, + "createWalletResult": { + "walletId": "", + "addresses": [ + "" + ] + }, + "createWalletAccountsResult": { + "addresses": [ + "" + ] + }, + "initUserEmailRecoveryResult": { + "userId": "" + }, + "recoverUserResult": { + "authenticatorId": [ + "" + ] + }, + "setOrganizationFeatureResult": { + "features": [ + { + "name": "", + "value": "" + } + ] + }, + "removeOrganizationFeatureResult": { + "features": [ + { + "name": "", + "value": "" + } + ] + }, + "exportPrivateKeyResult": { + "privateKeyId": "", + "exportBundle": "" + }, + "exportWalletResult": { + "walletId": "", + "exportBundle": "" + }, + "createSubOrganizationResultV4": { + "subOrganizationId": "", + "wallet": { + "walletId": "", + "addresses": [ + "" + ] + }, + "rootUserIds": [ + "" + ] + }, + "emailAuthResult": { + "userId": "", + "apiKeyId": "" + }, + "exportWalletAccountResult": { + "address": "", + "exportBundle": "" + }, + "initImportWalletResult": { + "importBundle": "" + }, + "importWalletResult": { + "walletId": "", + "addresses": [ + "" + ] + }, + "initImportPrivateKeyResult": { + "importBundle": "" + }, + "importPrivateKeyResult": { + "privateKeyId": "", + "addresses": [ + { + "format": "", + "address": "" + } + ] + }, + "createPoliciesResult": { + "policyIds": [ + "" + ] + }, + "signRawPayloadsResult": { + "signatures": [ + { + "r": "", + "s": "", + "v": "" + } + ] + }, + "createReadOnlySessionResult": { + "organizationId": "", + "organizationName": "", + "userId": "", + "username": "", + "session": "", + "sessionExpiry": "" + }, + "createOauthProvidersResult": { + "providerIds": [ + "" + ] + }, + "deleteOauthProvidersResult": { + "providerIds": [ + "" + ] + }, + "createSubOrganizationResultV5": { + "subOrganizationId": "", + "wallet": { + "walletId": "", + "addresses": [ + "" + ] + }, + "rootUserIds": [ + "" + ] + }, + "oauthResult": { + "userId": "", + "apiKeyId": "", + "credentialBundle": "" + }, + "createReadWriteSessionResult": { + "organizationId": "", + "organizationName": "", + "userId": "", + "username": "", + "apiKeyId": "", + "credentialBundle": "" + }, + "createSubOrganizationResultV6": { + "subOrganizationId": "", + "wallet": { + "walletId": "", + "addresses": [ + "" + ] + }, + "rootUserIds": [ + "" + ] + }, + "deletePrivateKeysResult": { + "privateKeyIds": [ + "" + ] + }, + "deleteWalletsResult": { + "walletIds": [ + "" + ] + }, + "createReadWriteSessionResultV2": { + "organizationId": "", + "organizationName": "", + "userId": "", + "username": "", + "apiKeyId": "", + "credentialBundle": "" + }, + "deleteSubOrganizationResult": { + "subOrganizationUuid": "" + }, + "initOtpAuthResult": { + "otpId": "" + }, + "otpAuthResult": { + "userId": "", + "apiKeyId": "", + "credentialBundle": "" + }, + "createSubOrganizationResultV7": { + "subOrganizationId": "", + "wallet": { + "walletId": "", + "addresses": [ + "" + ] + }, + "rootUserIds": [ + "" + ] + }, + "updateWalletResult": { + "walletId": "" + }, + "updatePolicyResultV2": { + "policyId": "" + }, + "initOtpAuthResultV2": { + "otpId": "" + }, + "initOtpResult": { + "otpId": "" + }, + "verifyOtpResult": { + "verificationToken": "" + }, + "otpLoginResult": { + "session": "" + }, + "stampLoginResult": { + "session": "" + }, + "oauthLoginResult": { + "session": "" + }, + "updateUserNameResult": { + "userId": "" + }, + "updateUserEmailResult": { + "userId": "" + }, + "updateUserPhoneNumberResult": { + "userId": "" + }, + "initFiatOnRampResult": { + "onRampUrl": "", + "onRampTransactionId": "", + "onRampUrlSignature": "" + }, + "createSmartContractInterfaceResult": { + "smartContractInterfaceId": "" + }, + "deleteSmartContractInterfaceResult": { + "smartContractInterfaceId": "" + }, + "enableAuthProxyResult": { + "userId": "" + }, + "disableAuthProxyResult": "", + "updateAuthProxyConfigResult": { + "configId": "" + }, + "createOauth2CredentialResult": { + "oauth2CredentialId": "" + }, + "updateOauth2CredentialResult": { + "oauth2CredentialId": "" + }, + "deleteOauth2CredentialResult": { + "oauth2CredentialId": "" + }, + "oauth2AuthenticateResult": { + "oidcToken": "" + }, + "deleteWalletAccountsResult": { + "walletAccountIds": [ + "" + ] + }, + "deletePoliciesResult": { + "policyIds": [ + "" + ] + }, + "ethSendRawTransactionResult": { + "transactionHash": "" + }, + "createFiatOnRampCredentialResult": { + "fiatOnRampCredentialId": "" + }, + "updateFiatOnRampCredentialResult": { + "fiatOnRampCredentialId": "" + }, + "deleteFiatOnRampCredentialResult": { + "fiatOnRampCredentialId": "" + }, + "ethSendTransactionResult": { + "sendTransactionStatusId": "" + }, + "upsertGasUsageConfigResult": { + "gasUsageConfigId": "" + }, + "createTvcAppResult": { + "appId": "", + "manifestSetId": "", + "manifestSetOperatorIds": [ + "" + ], + "manifestSetThreshold": "", + "shareSetId": "", + "shareSetOperatorIds": [ + "" + ], + "shareSetThreshold": "" + }, + "createTvcDeploymentResult": { + "deploymentId": "", + "manifestId": "" + }, + "createTvcManifestApprovalsResult": { + "approvalIds": [ + "" + ] + }, + "solSendTransactionResult": { + "sendTransactionStatusId": "" + }, + "initOtpResultV2": { + "otpId": "", + "otpEncryptionTargetBundle": "" + }, + "updateOrganizationNameResult": { + "organizationId": "", + "organizationName": "" + }, + "createSubOrganizationResultV8": { + "subOrganizationId": "", + "wallet": { + "walletId": "", + "addresses": [ + "" + ] + }, + "rootUserIds": [ + "" + ] + }, + "createOauthProvidersResultV2": { + "providerIds": [ + "" + ] + }, + "createWebhookEndpointResult": { + "endpointId": "", + "webhookEndpoint": { + "endpointId": "", + "organizationId": "", + "url": "", + "name": "", + "isActive": "", + "subscriptions": [ + { + "eventType": "", + "filtersJson": "", + "isActive": "" + } + ] + } + }, + "updateWebhookEndpointResult": { + "endpointId": "", + "webhookEndpoint": { + "endpointId": "", + "organizationId": "", + "url": "", + "name": "", + "isActive": "", + "subscriptions": [ + { + "eventType": "", + "filtersJson": "", + "isActive": "" + } + ] + } + }, + "deleteWebhookEndpointResult": { + "endpointId": "" + }, + "setIpAllowlistResult": "", + "removeIpAllowlistResult": "", + "updateTvcAppLiveDeploymentResult": "", + "deleteTvcDeploymentResult": { + "deploymentId": "" + }, + "deleteTvcAppAndDeploymentsResult": { + "appId": "" + }, + "restoreTvcDeploymentResult": { + "deploymentId": "" + }, + "sparkSignFrostResult": { + "signatures": [ + { + "signatureShare": "", + "hiding": "", + "binding": "" + } + ] + }, + "sparkPrepareTransferResult": { + "operatorPackages": [ + { + "operatorId": "", + "encryptedPackage": "" + } + ], + "transferUserSignature": "", + "newLeafPublicKeys": [ + { + "leafId": "", + "publicKey": "" + } + ] + }, + "sparkClaimTransferResult": { + "operatorPackages": [ + { + "operatorId": "", + "encryptedPackage": "" + } + ], + "newLeafPublicKeys": [ + { + "leafId": "", + "publicKey": "" + } + ] + }, + "sparkPrepareLightningReceiveResult": { + "operatorPackages": [ + { + "operatorId": "", + "encryptedPackage": "" + } + ], + "paymentHash": "" + }, + "postTvcQuorumKeyShareResult": { + "provisioningShareId": "" + }, + "ethSendTransactionResultV2": { + "sendTransactionStatusId": "" + }, + "createMfaPolicyResult": { + "mfaPolicyId": "" + }, + "updateMfaPolicyResult": { + "mfaPolicyId": "" + }, + "deleteMfaPolicyResult": { + "mfaPolicyId": "" + }, + "createSessionProfileResult": { + "sessionProfileId": "" + }, + "earnDeployWrapperResult": { + "wrapperAddress": "", + "splitterAddress": "", + "deployRequestId": "" + }, + "earnDepositResult": { + "depositRequestId": "" + }, + "earnWithdrawResult": { + "withdrawRequestId": "" + }, + "executeSwapResult": { + "swapRequestId": "", + "provider": "", + "quoteId": "" + }, + "upsertSwapConfigResult": { + "feeReceiverWalletAddress": "", + "feeBps": "", + "stableFeeBps": "" + }, + "createTvcOperatorResult": { + "walletId": "", + "operatorId": "", + "encryptPublicKey": "", + "signPublicKey": "" + }, + "createTvcQuorumKeyResult": { + "quorumKeyId": "", + "quorumPublicKey": "", + "shareIds": [ + "" + ] + }, + "reEncryptTvcQuorumKeyShareResult": { + "provisioningShareId": "" + }, + "initImportSecretsResult": { + "enclaveTargetMessages": [ + "" + ] + }, + "solSendTransactionResultV2": { + "sendTransactionStatusId": "" + }, + "claimSwapFeesResult": { + "requestId": "" + }, + "earnSetWrapperStateResult": { + "wrapperAddress": "", + "depositsDisabled": "" + }, + "claimEarnFeesResult": { + "claimRequestId": "" + }, + "updateWalletAccountNameResult": { + "walletAccountId": "" + }, + "ethUndelegate7702Result": { + "sendTransactionStatusId": "" + }, + "createSwapQuoteResult": { + "quotes": [ + { + "quoteId": "", + "provider": "", + "outputAmount": "", + "minOutputAmount": "", + "expiresAt": "", + "slippageBps": "", + "clientFeeBps": "", + "estimatedTimeSeconds": "" + } + ] + }, + "importSecretsResult": { + "secretIds": [ + "" + ] + } + }, + "votes": [ + { + "id": "", + "userId": "", + "user": { + "userId": "", + "userName": "", + "userEmail": "", + "userPhoneNumber": "", + "authenticators": [ + { + "transports": [ + "" + ], + "attestationType": "", + "aaguid": "", + "credentialId": "", + "model": "", + "credential": { + "publicKey": "", + "type": "", + "sessionProfileId": "" + }, + "authenticatorId": "", + "authenticatorName": "", + "createdAt": { + "seconds": "", + "nanos": "" + }, + "updatedAt": { + "seconds": "", + "nanos": "" + } + } + ], + "apiKeys": [ + { + "credential": { + "publicKey": "", + "type": "", + "sessionProfileId": "" + }, + "apiKeyId": "", + "apiKeyName": "", + "createdAt": { + "seconds": "", + "nanos": "" + }, + "updatedAt": { + "seconds": "", + "nanos": "" + }, + "expirationSeconds": "" + } + ], + "userTags": [ + "" + ], + "oauthProviders": [ + { + "providerId": "", + "providerName": "", + "issuer": "", + "audience": "", + "subject": "", + "createdAt": { + "seconds": "", + "nanos": "" + }, + "updatedAt": { + "seconds": "", + "nanos": "" + } + } + ], + "createdAt": { + "seconds": "", + "nanos": "" + }, + "updatedAt": { + "seconds": "", + "nanos": "" + }, + "mfaPolicies": [ + { + "mfaPolicyId": "", + "mfaPolicyName": "", + "condition": "", + "requiredAuthenticationMethods": [ + { + "any": [ + { + "type": "", + "id": "" + } + ] + } + ], + "order": "", + "notes": "", + "createdAt": { + "seconds": "", + "nanos": "" + }, + "updatedAt": { + "seconds": "", + "nanos": "" + } + } + ] + }, + "activityId": "", + "selection": "", + "message": "", + "publicKey": "", + "signature": "", + "scheme": "", + "createdAt": { + "seconds": "", + "nanos": "" + } + } + ], + "appProofs": [ + { + "scheme": "", + "publicKey": "", + "proofPayload": "", + "signature": "" + } + ], + "fingerprint": "", + "canApprove": "", + "canReject": "", + "createdAt": { + "seconds": "", + "nanos": "" + }, + "updatedAt": { + "seconds": "", + "nanos": "" + }, + "failure": { + "code": "", + "message": "", + "details": [ + { + "@type": "" + } + ] + } + } +} +``` + + diff --git a/api-reference/queries/get-configs.mdx b/api-reference/queries/get-configs.mdx index e69de29b..cf082601 100644 --- a/api-reference/queries/get-configs.mdx +++ b/api-reference/queries/get-configs.mdx @@ -0,0 +1,117 @@ +--- +title: "Get configs" +description: "Get quorum settings and features for an organization." +--- + +import { Authorizations } from "/snippets/api/authorizations.mdx"; +import { H3Bordered } from "/snippets/h3-bordered.mdx"; +import { NestedParam } from "/snippets/nested-param.mdx"; +import { EndpointPath } from "/snippets/api/endpoint.mdx"; + + + + + + + + + +Unique identifier for a given organization. + + + + +A successful response returns the following fields: + + + configs field + + + features field + + +name field + +Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_SWAP_CONFIG`, `FEATURE_NAME_EARN_CONFIG` + + + +value field + + + + + + quorum field + + +Count of unique approvals required to meet quorum. + + + Unique identifiers of quorum set members. + + +item field + + + + + + + + + + + + + +```bash title="cURL" +curl --request POST \ + --url https://api.turnkey.com/public/v1/query/get_organization_configs \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header "X-Stamp: (see Authorizations)" \ + --data '{ + "organizationId": "" +}' +``` + +```javascript title="JavaScript" +import { Turnkey } from "@turnkey/sdk-server"; + +const turnkeyClient = new Turnkey({ + apiBaseUrl: "https://api.turnkey.com", + apiPublicKey: process.env.API_PUBLIC_KEY!, + apiPrivateKey: process.env.API_PRIVATE_KEY!, + defaultOrganizationId: process.env.ORGANIZATION_ID!, +}); + +const response = await turnkeyClient.apiClient().getOrganizationConfigs({ + organizationId: " (Unique identifier for a given organization.)" +}); +``` + + + + + +```json 200 +{ + "configs": { + "features": [ + { + "name": "", + "value": "" + } + ], + "quorum": { + "threshold": "", + "userIds": [ + "" + ] + } + } +} +``` + + diff --git a/api-reference/queries/get-earn-deploy-status.mdx b/api-reference/queries/get-earn-deploy-status.mdx index e69de29b..afbb37e6 100644 --- a/api-reference/queries/get-earn-deploy-status.mdx +++ b/api-reference/queries/get-earn-deploy-status.mdx @@ -0,0 +1,80 @@ +--- +title: "Get Earn deploy status" +description: "Poll the status of a wrapper deployment by its deploy_request_id." +--- + +import { Authorizations } from "/snippets/api/authorizations.mdx"; +import { H3Bordered } from "/snippets/h3-bordered.mdx"; +import { NestedParam } from "/snippets/nested-param.mdx"; +import { EndpointPath } from "/snippets/api/endpoint.mdx"; + + + + + + + + + +Unique identifier for a given Organization. + + + + +The deploy_request_id returned by EarnDeployWrapper. + + + + +A successful response returns the following fields: + +Status of the wrapper deployment. + +Enum options: `PENDING`, `COMPLETED`, `FAILED` + +Transaction hash of the deployment, once available. +Reason the deployment transaction failed, when status is FAILED. + + + +```bash title="cURL" +curl --request POST \ + --url https://api.turnkey.com/public/v1/query/get_earn_deploy_status \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header "X-Stamp: (see Authorizations)" \ + --data '{ + "organizationId": "", + "deployRequestId": "" +}' +``` + +```javascript title="JavaScript" +import { Turnkey } from "@turnkey/sdk-server"; + +const turnkeyClient = new Turnkey({ + apiBaseUrl: "https://api.turnkey.com", + apiPublicKey: process.env.API_PUBLIC_KEY!, + apiPrivateKey: process.env.API_PRIVATE_KEY!, + defaultOrganizationId: process.env.ORGANIZATION_ID!, +}); + +const response = await turnkeyClient.apiClient().getEarnDeployStatus({ + organizationId: " (Unique identifier for a given Organization.)", + deployRequestId: " (The deploy_request_id returned by EarnDeployWrapper.)" +}); +``` + + + + + +```json 200 +{ + "status": "", + "deployTxHash": "", + "error": "" +} +``` + + diff --git a/api-reference/queries/get-earn-deposit-status.mdx b/api-reference/queries/get-earn-deposit-status.mdx index e69de29b..6bc3cd22 100644 --- a/api-reference/queries/get-earn-deposit-status.mdx +++ b/api-reference/queries/get-earn-deposit-status.mdx @@ -0,0 +1,80 @@ +--- +title: "Get Earn deposit status" +description: "Poll the status of a deposit by its deposit_request_id (for the async/sponsored deposit path)." +--- + +import { Authorizations } from "/snippets/api/authorizations.mdx"; +import { H3Bordered } from "/snippets/h3-bordered.mdx"; +import { NestedParam } from "/snippets/nested-param.mdx"; +import { EndpointPath } from "/snippets/api/endpoint.mdx"; + + + + + + + + + +Unique identifier for a given Organization. + + + + +The deposit_request_id returned by EarnDeposit. + + + + +A successful response returns the following fields: + +Status of the deposit. + +Enum options: `PENDING`, `COMPLETED`, `FAILED` + +Transaction hash of the deposit, once available. +Reason the deposit transaction failed, when status is FAILED. + + + +```bash title="cURL" +curl --request POST \ + --url https://api.turnkey.com/public/v1/query/get_earn_deposit_status \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header "X-Stamp: (see Authorizations)" \ + --data '{ + "organizationId": "", + "depositRequestId": "" +}' +``` + +```javascript title="JavaScript" +import { Turnkey } from "@turnkey/sdk-server"; + +const turnkeyClient = new Turnkey({ + apiBaseUrl: "https://api.turnkey.com", + apiPublicKey: process.env.API_PUBLIC_KEY!, + apiPrivateKey: process.env.API_PRIVATE_KEY!, + defaultOrganizationId: process.env.ORGANIZATION_ID!, +}); + +const response = await turnkeyClient.apiClient().getEarnDepositStatus({ + organizationId: " (Unique identifier for a given Organization.)", + depositRequestId: " (The deposit_request_id returned by EarnDeposit.)" +}); +``` + + + + + +```json 200 +{ + "status": "", + "depositTxHash": "", + "error": "" +} +``` + + diff --git a/api-reference/queries/get-earn-enabled-vaults.mdx b/api-reference/queries/get-earn-enabled-vaults.mdx index e69de29b..d4737aea 100644 --- a/api-reference/queries/get-earn-enabled-vaults.mdx +++ b/api-reference/queries/get-earn-enabled-vaults.mdx @@ -0,0 +1,175 @@ +--- +title: "Get Earn enabled vaults" +description: "Get the organization's deployed wrappers with on-chain total deposited and live APY. The management view, distinct from per-wallet positions." +--- + +import { Authorizations } from "/snippets/api/authorizations.mdx"; +import { H3Bordered } from "/snippets/h3-bordered.mdx"; +import { NestedParam } from "/snippets/nested-param.mdx"; +import { EndpointPath } from "/snippets/api/endpoint.mdx"; + + + + + + + + + +Unique identifier for a given Organization. + + + + +Enum options: `EARN_PROVIDER_MORPHO`, `EARN_PROVIDER_AAVE` + + + + +Optional filter: only return enabled vaults whose underlying asset matches this CAIP-19 asset ID (e.g. 'eip155:8453/erc20:0x833589...'). The chain is taken from the CAIP-19 identifier. + + + + +A successful response returns the following fields: + + + The organization's deployed wrappers. + + +Address of the underlying yield vault. + + +Address of the deployed fee wrapper (the deposit target). + + +provider field + +Enum options: `EARN_PROVIDER_MORPHO`, `EARN_PROVIDER_AAVE` + + + +CAIP-19 asset ID of the vault's underlying asset (e.g. 'eip155:8453/erc20:0x833589...'); the chain is encoded in the identifier. + + +Gross annual percentage yield, expressed as a decimal fraction (before fees). + + +Total deposited through this wrapper (wrapper TVL), in raw on-chain units of the underlying asset. + + + display field + + +USD value, for display only. + + +Normalized amount in the asset's own units, for display only. + + + + + +Annual percentage yield net of fees, expressed as a decimal fraction. + + +Client fee taken on yield, in basis points. + + +When true, deposits to this wrapper are rejected; withdrawals are unaffected. Toggled via EarnSetWrapperState. + + +Human-readable vault name from the provider (e.g. 'Steakhouse Prime USDC' for Morpho; the reserve symbol for Aave). + + +Vault curator name(s), comma-separated when a vault has multiple. Empty for providers without curators (e.g. Aave). + + +The client's claimable fee (releasable now), in raw on-chain units of the underlying asset (the caip19 asset). Turnkey's fee is excluded. Only returned to the parent org; unset when a sub-org queries. + + + claimableClientFeeDisplay field + + +USD value, for display only. + + +Normalized amount in the asset's own units, for display only. + + + + + +The wallet address that receives the client's fee payouts on-chain. Unset when a sub-org queries. + + + + + + + +```bash title="cURL" +curl --request POST \ + --url https://api.turnkey.com/public/v1/query/list_earn_enabled_vaults \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header "X-Stamp: (see Authorizations)" \ + --data '{ + "organizationId": "", + "provider": "", + "caip19": "" +}' +``` + +```javascript title="JavaScript" +import { Turnkey } from "@turnkey/sdk-server"; + +const turnkeyClient = new Turnkey({ + apiBaseUrl: "https://api.turnkey.com", + apiPublicKey: process.env.API_PUBLIC_KEY!, + apiPrivateKey: process.env.API_PRIVATE_KEY!, + defaultOrganizationId: process.env.ORGANIZATION_ID!, +}); + +const response = await turnkeyClient.apiClient().listEarnEnabledVaults({ + organizationId: " (Unique identifier for a given Organization.)", + provider: "" // provider field, + caip19: " (Optional filter: only return enabled vaults whose underlying asset matches this CAIP-19 asset ID (e.g. 'eip155:8453/erc20:0x833589...'). The chain is taken from the CAIP-19 identifier.)" +}); +``` + + + + + +```json 200 +{ + "enabledVaults": [ + { + "vaultAddress": "", + "wrapperAddress": "", + "provider": "", + "caip19": "", + "apyPct": "", + "totalDeposited": "", + "display": { + "usd": "", + "crypto": "" + }, + "netApyPct": "", + "clientFeeBps": "", + "depositsDisabled": "", + "name": "", + "curator": "", + "claimableClientFee": "", + "claimableClientFeeDisplay": { + "usd": "", + "crypto": "" + }, + "clientFeeWallet": "" + } + ] +} +``` + + diff --git a/api-reference/queries/get-earn-withdraw-status.mdx b/api-reference/queries/get-earn-withdraw-status.mdx index e69de29b..69ff05cf 100644 --- a/api-reference/queries/get-earn-withdraw-status.mdx +++ b/api-reference/queries/get-earn-withdraw-status.mdx @@ -0,0 +1,80 @@ +--- +title: "Get Earn withdraw status" +description: "Poll the status of a withdrawal by its withdraw_request_id." +--- + +import { Authorizations } from "/snippets/api/authorizations.mdx"; +import { H3Bordered } from "/snippets/h3-bordered.mdx"; +import { NestedParam } from "/snippets/nested-param.mdx"; +import { EndpointPath } from "/snippets/api/endpoint.mdx"; + + + + + + + + + +Unique identifier for a given Organization. + + + + +The withdraw_request_id returned by EarnWithdraw. + + + + +A successful response returns the following fields: + +Status of the withdrawal. + +Enum options: `PENDING`, `COMPLETED`, `FAILED` + +Transaction hash of the withdrawal, once available. +Reason the withdrawal transaction failed, when status is FAILED. + + + +```bash title="cURL" +curl --request POST \ + --url https://api.turnkey.com/public/v1/query/get_earn_withdraw_status \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header "X-Stamp: (see Authorizations)" \ + --data '{ + "organizationId": "", + "withdrawRequestId": "" +}' +``` + +```javascript title="JavaScript" +import { Turnkey } from "@turnkey/sdk-server"; + +const turnkeyClient = new Turnkey({ + apiBaseUrl: "https://api.turnkey.com", + apiPublicKey: process.env.API_PUBLIC_KEY!, + apiPrivateKey: process.env.API_PRIVATE_KEY!, + defaultOrganizationId: process.env.ORGANIZATION_ID!, +}); + +const response = await turnkeyClient.apiClient().getEarnWithdrawStatus({ + organizationId: " (Unique identifier for a given Organization.)", + withdrawRequestId: " (The withdraw_request_id returned by EarnWithdraw.)" +}); +``` + + + + + +```json 200 +{ + "status": "", + "withdrawTxHash": "", + "error": "" +} +``` + + diff --git a/api-reference/queries/list-activities.mdx b/api-reference/queries/list-activities.mdx index e69de29b..6ef5f13a 100644 --- a/api-reference/queries/list-activities.mdx +++ b/api-reference/queries/list-activities.mdx @@ -0,0 +1,11121 @@ +--- +title: "List activities" +description: "List all activities within an organization." +--- + +import { Authorizations } from "/snippets/api/authorizations.mdx"; +import { H3Bordered } from "/snippets/h3-bordered.mdx"; +import { NestedParam } from "/snippets/nested-param.mdx"; +import { EndpointPath } from "/snippets/api/endpoint.mdx"; + + + + + + + + + +Unique identifier for a given organization. + + + + +Enum options: `ACTIVITY_STATUS_CREATED`, `ACTIVITY_STATUS_PENDING`, `ACTIVITY_STATUS_COMPLETED`, `ACTIVITY_STATUS_FAILED`, `ACTIVITY_STATUS_CONSENSUS_NEEDED`, `ACTIVITY_STATUS_REJECTED`, `ACTIVITY_STATUS_AUTHENTICATORS_NEEDED` + + + +

paginationOptions field

+ + + A limit of the number of object to be returned, between 1 and 100. Defaults to 10. + + + + A pagination cursor. This is an object ID that enables you to fetch all objects before this ID. + + + + A pagination cursor. This is an object ID that enables you to fetch all objects after this ID. + + +
+ + +Enum options: `ACTIVITY_TYPE_CREATE_API_KEYS`, `ACTIVITY_TYPE_CREATE_USERS`, `ACTIVITY_TYPE_CREATE_PRIVATE_KEYS`, `ACTIVITY_TYPE_SIGN_RAW_PAYLOAD`, `ACTIVITY_TYPE_CREATE_INVITATIONS`, `ACTIVITY_TYPE_ACCEPT_INVITATION`, `ACTIVITY_TYPE_CREATE_POLICY`, `ACTIVITY_TYPE_DISABLE_PRIVATE_KEY`, `ACTIVITY_TYPE_DELETE_USERS`, `ACTIVITY_TYPE_DELETE_API_KEYS`, `ACTIVITY_TYPE_DELETE_INVITATION`, `ACTIVITY_TYPE_DELETE_ORGANIZATION`, `ACTIVITY_TYPE_DELETE_POLICY`, `ACTIVITY_TYPE_CREATE_USER_TAG`, `ACTIVITY_TYPE_DELETE_USER_TAGS`, `ACTIVITY_TYPE_CREATE_ORGANIZATION`, `ACTIVITY_TYPE_SIGN_TRANSACTION`, `ACTIVITY_TYPE_APPROVE_ACTIVITY`, `ACTIVITY_TYPE_REJECT_ACTIVITY`, `ACTIVITY_TYPE_DELETE_AUTHENTICATORS`, `ACTIVITY_TYPE_CREATE_AUTHENTICATORS`, `ACTIVITY_TYPE_CREATE_PRIVATE_KEY_TAG`, `ACTIVITY_TYPE_DELETE_PRIVATE_KEY_TAGS`, `ACTIVITY_TYPE_SET_PAYMENT_METHOD`, `ACTIVITY_TYPE_ACTIVATE_BILLING_TIER`, `ACTIVITY_TYPE_DELETE_PAYMENT_METHOD`, `ACTIVITY_TYPE_CREATE_POLICY_V2`, `ACTIVITY_TYPE_CREATE_POLICY_V3`, `ACTIVITY_TYPE_CREATE_API_ONLY_USERS`, `ACTIVITY_TYPE_UPDATE_ROOT_QUORUM`, `ACTIVITY_TYPE_UPDATE_USER_TAG`, `ACTIVITY_TYPE_UPDATE_PRIVATE_KEY_TAG`, `ACTIVITY_TYPE_CREATE_AUTHENTICATORS_V2`, `ACTIVITY_TYPE_CREATE_ORGANIZATION_V2`, `ACTIVITY_TYPE_CREATE_USERS_V2`, `ACTIVITY_TYPE_ACCEPT_INVITATION_V2`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V2`, `ACTIVITY_TYPE_UPDATE_ALLOWED_ORIGINS`, `ACTIVITY_TYPE_CREATE_PRIVATE_KEYS_V2`, `ACTIVITY_TYPE_UPDATE_USER`, `ACTIVITY_TYPE_UPDATE_POLICY`, `ACTIVITY_TYPE_SET_PAYMENT_METHOD_V2`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V3`, `ACTIVITY_TYPE_CREATE_WALLET`, `ACTIVITY_TYPE_CREATE_WALLET_ACCOUNTS`, `ACTIVITY_TYPE_INIT_USER_EMAIL_RECOVERY`, `ACTIVITY_TYPE_RECOVER_USER`, `ACTIVITY_TYPE_SET_ORGANIZATION_FEATURE`, `ACTIVITY_TYPE_REMOVE_ORGANIZATION_FEATURE`, `ACTIVITY_TYPE_SIGN_RAW_PAYLOAD_V2`, `ACTIVITY_TYPE_SIGN_TRANSACTION_V2`, `ACTIVITY_TYPE_EXPORT_PRIVATE_KEY`, `ACTIVITY_TYPE_EXPORT_WALLET`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V4`, `ACTIVITY_TYPE_EMAIL_AUTH`, `ACTIVITY_TYPE_EXPORT_WALLET_ACCOUNT`, `ACTIVITY_TYPE_INIT_IMPORT_WALLET`, `ACTIVITY_TYPE_IMPORT_WALLET`, `ACTIVITY_TYPE_INIT_IMPORT_PRIVATE_KEY`, `ACTIVITY_TYPE_IMPORT_PRIVATE_KEY`, `ACTIVITY_TYPE_CREATE_POLICIES`, `ACTIVITY_TYPE_SIGN_RAW_PAYLOADS`, `ACTIVITY_TYPE_CREATE_READ_ONLY_SESSION`, `ACTIVITY_TYPE_CREATE_OAUTH_PROVIDERS`, `ACTIVITY_TYPE_DELETE_OAUTH_PROVIDERS`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V5`, `ACTIVITY_TYPE_OAUTH`, `ACTIVITY_TYPE_CREATE_API_KEYS_V2`, `ACTIVITY_TYPE_CREATE_READ_WRITE_SESSION`, `ACTIVITY_TYPE_EMAIL_AUTH_V2`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V6`, `ACTIVITY_TYPE_DELETE_PRIVATE_KEYS`, `ACTIVITY_TYPE_DELETE_WALLETS`, `ACTIVITY_TYPE_CREATE_READ_WRITE_SESSION_V2`, `ACTIVITY_TYPE_DELETE_SUB_ORGANIZATION`, `ACTIVITY_TYPE_INIT_OTP_AUTH`, `ACTIVITY_TYPE_OTP_AUTH`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V7`, `ACTIVITY_TYPE_UPDATE_WALLET`, `ACTIVITY_TYPE_UPDATE_POLICY_V2`, `ACTIVITY_TYPE_CREATE_USERS_V3`, `ACTIVITY_TYPE_INIT_OTP_AUTH_V2`, `ACTIVITY_TYPE_INIT_OTP`, `ACTIVITY_TYPE_VERIFY_OTP`, `ACTIVITY_TYPE_OTP_LOGIN`, `ACTIVITY_TYPE_STAMP_LOGIN`, `ACTIVITY_TYPE_OAUTH_LOGIN`, `ACTIVITY_TYPE_UPDATE_USER_NAME`, `ACTIVITY_TYPE_UPDATE_USER_EMAIL`, `ACTIVITY_TYPE_UPDATE_USER_PHONE_NUMBER`, `ACTIVITY_TYPE_INIT_FIAT_ON_RAMP`, `ACTIVITY_TYPE_CREATE_SMART_CONTRACT_INTERFACE`, `ACTIVITY_TYPE_DELETE_SMART_CONTRACT_INTERFACE`, `ACTIVITY_TYPE_ENABLE_AUTH_PROXY`, `ACTIVITY_TYPE_DISABLE_AUTH_PROXY`, `ACTIVITY_TYPE_UPDATE_AUTH_PROXY_CONFIG`, `ACTIVITY_TYPE_CREATE_OAUTH2_CREDENTIAL`, `ACTIVITY_TYPE_UPDATE_OAUTH2_CREDENTIAL`, `ACTIVITY_TYPE_DELETE_OAUTH2_CREDENTIAL`, `ACTIVITY_TYPE_OAUTH2_AUTHENTICATE`, `ACTIVITY_TYPE_DELETE_WALLET_ACCOUNTS`, `ACTIVITY_TYPE_DELETE_POLICIES`, `ACTIVITY_TYPE_ETH_SEND_RAW_TRANSACTION`, `ACTIVITY_TYPE_ETH_SEND_TRANSACTION`, `ACTIVITY_TYPE_CREATE_FIAT_ON_RAMP_CREDENTIAL`, `ACTIVITY_TYPE_UPDATE_FIAT_ON_RAMP_CREDENTIAL`, `ACTIVITY_TYPE_DELETE_FIAT_ON_RAMP_CREDENTIAL`, `ACTIVITY_TYPE_EMAIL_AUTH_V3`, `ACTIVITY_TYPE_INIT_USER_EMAIL_RECOVERY_V2`, `ACTIVITY_TYPE_INIT_OTP_AUTH_V3`, `ACTIVITY_TYPE_INIT_OTP_V2`, `ACTIVITY_TYPE_UPSERT_GAS_USAGE_CONFIG`, `ACTIVITY_TYPE_CREATE_TVC_APP`, `ACTIVITY_TYPE_CREATE_TVC_DEPLOYMENT`, `ACTIVITY_TYPE_CREATE_TVC_MANIFEST_APPROVALS`, `ACTIVITY_TYPE_SOL_SEND_TRANSACTION`, `ACTIVITY_TYPE_INIT_OTP_V3`, `ACTIVITY_TYPE_VERIFY_OTP_V2`, `ACTIVITY_TYPE_OTP_LOGIN_V2`, `ACTIVITY_TYPE_UPDATE_ORGANIZATION_NAME`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V8`, `ACTIVITY_TYPE_CREATE_OAUTH_PROVIDERS_V2`, `ACTIVITY_TYPE_CREATE_USERS_V4`, `ACTIVITY_TYPE_CREATE_WEBHOOK_ENDPOINT`, `ACTIVITY_TYPE_UPDATE_WEBHOOK_ENDPOINT`, `ACTIVITY_TYPE_DELETE_WEBHOOK_ENDPOINT`, `ACTIVITY_TYPE_SET_IP_ALLOWLIST`, `ACTIVITY_TYPE_REMOVE_IP_ALLOWLIST`, `ACTIVITY_TYPE_UPDATE_TVC_APP_LIVE_DEPLOYMENT`, `ACTIVITY_TYPE_DELETE_TVC_DEPLOYMENT`, `ACTIVITY_TYPE_DELETE_TVC_APP_AND_DEPLOYMENTS`, `ACTIVITY_TYPE_RESTORE_TVC_DEPLOYMENT`, `ACTIVITY_TYPE_SPARK_SIGN_FROST`, `ACTIVITY_TYPE_SPARK_PREPARE_TRANSFER`, `ACTIVITY_TYPE_SPARK_CLAIM_TRANSFER`, `ACTIVITY_TYPE_SPARK_PREPARE_LIGHTNING_RECEIVE`, `ACTIVITY_TYPE_POST_TVC_QUORUM_KEY_SHARE`, `ACTIVITY_TYPE_ETH_SEND_TRANSACTION_V2`, `ACTIVITY_TYPE_CREATE_MFA_POLICY`, `ACTIVITY_TYPE_UPDATE_MFA_POLICY`, `ACTIVITY_TYPE_DELETE_MFA_POLICY`, `ACTIVITY_TYPE_CREATE_SESSION_PROFILE`, `ACTIVITY_TYPE_EARN_DEPLOY_WRAPPER`, `ACTIVITY_TYPE_EARN_DEPOSIT`, `ACTIVITY_TYPE_EARN_WITHDRAW`, `ACTIVITY_TYPE_EXECUTE_SWAP`, `ACTIVITY_TYPE_UPSERT_SWAP_CONFIG`, `ACTIVITY_TYPE_CREATE_TVC_OPERATOR`, `ACTIVITY_TYPE_CREATE_TVC_QUORUM_KEY`, `ACTIVITY_TYPE_RE_ENCRYPT_TVC_QUORUM_KEY_SHARE`, `ACTIVITY_TYPE_INIT_IMPORT_SECRETS`, `ACTIVITY_TYPE_SOL_SEND_TRANSACTION_V2`, `ACTIVITY_TYPE_CLAIM_SWAP_FEES`, `ACTIVITY_TYPE_EARN_SET_WRAPPER_STATE`, `ACTIVITY_TYPE_CLAIM_EARN_FEES`, `ACTIVITY_TYPE_UPDATE_WALLET_ACCOUNT_NAME`, `ACTIVITY_TYPE_ETH_UNDELEGATE_7702`, `ACTIVITY_TYPE_EXECUTE_SWAP_V2`, `ACTIVITY_TYPE_CREATE_SWAP_QUOTE`, `ACTIVITY_TYPE_IMPORT_SECRETS` + + + + +A successful response returns the following fields: + + + A list of activities. + + +Unique identifier for a given Activity object. + + +Unique identifier for a given Organization. + + +status field + +Enum options: `ACTIVITY_STATUS_CREATED`, `ACTIVITY_STATUS_PENDING`, `ACTIVITY_STATUS_COMPLETED`, `ACTIVITY_STATUS_FAILED`, `ACTIVITY_STATUS_CONSENSUS_NEEDED`, `ACTIVITY_STATUS_REJECTED`, `ACTIVITY_STATUS_AUTHENTICATORS_NEEDED` + + + +type field + +Enum options: `ACTIVITY_TYPE_CREATE_API_KEYS`, `ACTIVITY_TYPE_CREATE_USERS`, `ACTIVITY_TYPE_CREATE_PRIVATE_KEYS`, `ACTIVITY_TYPE_SIGN_RAW_PAYLOAD`, `ACTIVITY_TYPE_CREATE_INVITATIONS`, `ACTIVITY_TYPE_ACCEPT_INVITATION`, `ACTIVITY_TYPE_CREATE_POLICY`, `ACTIVITY_TYPE_DISABLE_PRIVATE_KEY`, `ACTIVITY_TYPE_DELETE_USERS`, `ACTIVITY_TYPE_DELETE_API_KEYS`, `ACTIVITY_TYPE_DELETE_INVITATION`, `ACTIVITY_TYPE_DELETE_ORGANIZATION`, `ACTIVITY_TYPE_DELETE_POLICY`, `ACTIVITY_TYPE_CREATE_USER_TAG`, `ACTIVITY_TYPE_DELETE_USER_TAGS`, `ACTIVITY_TYPE_CREATE_ORGANIZATION`, `ACTIVITY_TYPE_SIGN_TRANSACTION`, `ACTIVITY_TYPE_APPROVE_ACTIVITY`, `ACTIVITY_TYPE_REJECT_ACTIVITY`, `ACTIVITY_TYPE_DELETE_AUTHENTICATORS`, `ACTIVITY_TYPE_CREATE_AUTHENTICATORS`, `ACTIVITY_TYPE_CREATE_PRIVATE_KEY_TAG`, `ACTIVITY_TYPE_DELETE_PRIVATE_KEY_TAGS`, `ACTIVITY_TYPE_SET_PAYMENT_METHOD`, `ACTIVITY_TYPE_ACTIVATE_BILLING_TIER`, `ACTIVITY_TYPE_DELETE_PAYMENT_METHOD`, `ACTIVITY_TYPE_CREATE_POLICY_V2`, `ACTIVITY_TYPE_CREATE_POLICY_V3`, `ACTIVITY_TYPE_CREATE_API_ONLY_USERS`, `ACTIVITY_TYPE_UPDATE_ROOT_QUORUM`, `ACTIVITY_TYPE_UPDATE_USER_TAG`, `ACTIVITY_TYPE_UPDATE_PRIVATE_KEY_TAG`, `ACTIVITY_TYPE_CREATE_AUTHENTICATORS_V2`, `ACTIVITY_TYPE_CREATE_ORGANIZATION_V2`, `ACTIVITY_TYPE_CREATE_USERS_V2`, `ACTIVITY_TYPE_ACCEPT_INVITATION_V2`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V2`, `ACTIVITY_TYPE_UPDATE_ALLOWED_ORIGINS`, `ACTIVITY_TYPE_CREATE_PRIVATE_KEYS_V2`, `ACTIVITY_TYPE_UPDATE_USER`, `ACTIVITY_TYPE_UPDATE_POLICY`, `ACTIVITY_TYPE_SET_PAYMENT_METHOD_V2`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V3`, `ACTIVITY_TYPE_CREATE_WALLET`, `ACTIVITY_TYPE_CREATE_WALLET_ACCOUNTS`, `ACTIVITY_TYPE_INIT_USER_EMAIL_RECOVERY`, `ACTIVITY_TYPE_RECOVER_USER`, `ACTIVITY_TYPE_SET_ORGANIZATION_FEATURE`, `ACTIVITY_TYPE_REMOVE_ORGANIZATION_FEATURE`, `ACTIVITY_TYPE_SIGN_RAW_PAYLOAD_V2`, `ACTIVITY_TYPE_SIGN_TRANSACTION_V2`, `ACTIVITY_TYPE_EXPORT_PRIVATE_KEY`, `ACTIVITY_TYPE_EXPORT_WALLET`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V4`, `ACTIVITY_TYPE_EMAIL_AUTH`, `ACTIVITY_TYPE_EXPORT_WALLET_ACCOUNT`, `ACTIVITY_TYPE_INIT_IMPORT_WALLET`, `ACTIVITY_TYPE_IMPORT_WALLET`, `ACTIVITY_TYPE_INIT_IMPORT_PRIVATE_KEY`, `ACTIVITY_TYPE_IMPORT_PRIVATE_KEY`, `ACTIVITY_TYPE_CREATE_POLICIES`, `ACTIVITY_TYPE_SIGN_RAW_PAYLOADS`, `ACTIVITY_TYPE_CREATE_READ_ONLY_SESSION`, `ACTIVITY_TYPE_CREATE_OAUTH_PROVIDERS`, `ACTIVITY_TYPE_DELETE_OAUTH_PROVIDERS`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V5`, `ACTIVITY_TYPE_OAUTH`, `ACTIVITY_TYPE_CREATE_API_KEYS_V2`, `ACTIVITY_TYPE_CREATE_READ_WRITE_SESSION`, `ACTIVITY_TYPE_EMAIL_AUTH_V2`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V6`, `ACTIVITY_TYPE_DELETE_PRIVATE_KEYS`, `ACTIVITY_TYPE_DELETE_WALLETS`, `ACTIVITY_TYPE_CREATE_READ_WRITE_SESSION_V2`, `ACTIVITY_TYPE_DELETE_SUB_ORGANIZATION`, `ACTIVITY_TYPE_INIT_OTP_AUTH`, `ACTIVITY_TYPE_OTP_AUTH`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V7`, `ACTIVITY_TYPE_UPDATE_WALLET`, `ACTIVITY_TYPE_UPDATE_POLICY_V2`, `ACTIVITY_TYPE_CREATE_USERS_V3`, `ACTIVITY_TYPE_INIT_OTP_AUTH_V2`, `ACTIVITY_TYPE_INIT_OTP`, `ACTIVITY_TYPE_VERIFY_OTP`, `ACTIVITY_TYPE_OTP_LOGIN`, `ACTIVITY_TYPE_STAMP_LOGIN`, `ACTIVITY_TYPE_OAUTH_LOGIN`, `ACTIVITY_TYPE_UPDATE_USER_NAME`, `ACTIVITY_TYPE_UPDATE_USER_EMAIL`, `ACTIVITY_TYPE_UPDATE_USER_PHONE_NUMBER`, `ACTIVITY_TYPE_INIT_FIAT_ON_RAMP`, `ACTIVITY_TYPE_CREATE_SMART_CONTRACT_INTERFACE`, `ACTIVITY_TYPE_DELETE_SMART_CONTRACT_INTERFACE`, `ACTIVITY_TYPE_ENABLE_AUTH_PROXY`, `ACTIVITY_TYPE_DISABLE_AUTH_PROXY`, `ACTIVITY_TYPE_UPDATE_AUTH_PROXY_CONFIG`, `ACTIVITY_TYPE_CREATE_OAUTH2_CREDENTIAL`, `ACTIVITY_TYPE_UPDATE_OAUTH2_CREDENTIAL`, `ACTIVITY_TYPE_DELETE_OAUTH2_CREDENTIAL`, `ACTIVITY_TYPE_OAUTH2_AUTHENTICATE`, `ACTIVITY_TYPE_DELETE_WALLET_ACCOUNTS`, `ACTIVITY_TYPE_DELETE_POLICIES`, `ACTIVITY_TYPE_ETH_SEND_RAW_TRANSACTION`, `ACTIVITY_TYPE_ETH_SEND_TRANSACTION`, `ACTIVITY_TYPE_CREATE_FIAT_ON_RAMP_CREDENTIAL`, `ACTIVITY_TYPE_UPDATE_FIAT_ON_RAMP_CREDENTIAL`, `ACTIVITY_TYPE_DELETE_FIAT_ON_RAMP_CREDENTIAL`, `ACTIVITY_TYPE_EMAIL_AUTH_V3`, `ACTIVITY_TYPE_INIT_USER_EMAIL_RECOVERY_V2`, `ACTIVITY_TYPE_INIT_OTP_AUTH_V3`, `ACTIVITY_TYPE_INIT_OTP_V2`, `ACTIVITY_TYPE_UPSERT_GAS_USAGE_CONFIG`, `ACTIVITY_TYPE_CREATE_TVC_APP`, `ACTIVITY_TYPE_CREATE_TVC_DEPLOYMENT`, `ACTIVITY_TYPE_CREATE_TVC_MANIFEST_APPROVALS`, `ACTIVITY_TYPE_SOL_SEND_TRANSACTION`, `ACTIVITY_TYPE_INIT_OTP_V3`, `ACTIVITY_TYPE_VERIFY_OTP_V2`, `ACTIVITY_TYPE_OTP_LOGIN_V2`, `ACTIVITY_TYPE_UPDATE_ORGANIZATION_NAME`, `ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V8`, `ACTIVITY_TYPE_CREATE_OAUTH_PROVIDERS_V2`, `ACTIVITY_TYPE_CREATE_USERS_V4`, `ACTIVITY_TYPE_CREATE_WEBHOOK_ENDPOINT`, `ACTIVITY_TYPE_UPDATE_WEBHOOK_ENDPOINT`, `ACTIVITY_TYPE_DELETE_WEBHOOK_ENDPOINT`, `ACTIVITY_TYPE_SET_IP_ALLOWLIST`, `ACTIVITY_TYPE_REMOVE_IP_ALLOWLIST`, `ACTIVITY_TYPE_UPDATE_TVC_APP_LIVE_DEPLOYMENT`, `ACTIVITY_TYPE_DELETE_TVC_DEPLOYMENT`, `ACTIVITY_TYPE_DELETE_TVC_APP_AND_DEPLOYMENTS`, `ACTIVITY_TYPE_RESTORE_TVC_DEPLOYMENT`, `ACTIVITY_TYPE_SPARK_SIGN_FROST`, `ACTIVITY_TYPE_SPARK_PREPARE_TRANSFER`, `ACTIVITY_TYPE_SPARK_CLAIM_TRANSFER`, `ACTIVITY_TYPE_SPARK_PREPARE_LIGHTNING_RECEIVE`, `ACTIVITY_TYPE_POST_TVC_QUORUM_KEY_SHARE`, `ACTIVITY_TYPE_ETH_SEND_TRANSACTION_V2`, `ACTIVITY_TYPE_CREATE_MFA_POLICY`, `ACTIVITY_TYPE_UPDATE_MFA_POLICY`, `ACTIVITY_TYPE_DELETE_MFA_POLICY`, `ACTIVITY_TYPE_CREATE_SESSION_PROFILE`, `ACTIVITY_TYPE_EARN_DEPLOY_WRAPPER`, `ACTIVITY_TYPE_EARN_DEPOSIT`, `ACTIVITY_TYPE_EARN_WITHDRAW`, `ACTIVITY_TYPE_EXECUTE_SWAP`, `ACTIVITY_TYPE_UPSERT_SWAP_CONFIG`, `ACTIVITY_TYPE_CREATE_TVC_OPERATOR`, `ACTIVITY_TYPE_CREATE_TVC_QUORUM_KEY`, `ACTIVITY_TYPE_RE_ENCRYPT_TVC_QUORUM_KEY_SHARE`, `ACTIVITY_TYPE_INIT_IMPORT_SECRETS`, `ACTIVITY_TYPE_SOL_SEND_TRANSACTION_V2`, `ACTIVITY_TYPE_CLAIM_SWAP_FEES`, `ACTIVITY_TYPE_EARN_SET_WRAPPER_STATE`, `ACTIVITY_TYPE_CLAIM_EARN_FEES`, `ACTIVITY_TYPE_UPDATE_WALLET_ACCOUNT_NAME`, `ACTIVITY_TYPE_ETH_UNDELEGATE_7702`, `ACTIVITY_TYPE_EXECUTE_SWAP_V2`, `ACTIVITY_TYPE_CREATE_SWAP_QUOTE`, `ACTIVITY_TYPE_IMPORT_SECRETS` + + + + intent field + + + createOrganizationIntent field + + +Human-readable name for an Organization. + + +The root user's email address. + + + rootAuthenticator field + + +Human-readable name for an Authenticator. + + +Unique identifier for a given User. + + + attestation field + + +id field + + +type field + +Enum options: `public-key` + + + +rawId field + + +authenticatorAttachment field + +Enum options: `cross-platform`, `platform` + + + + response field + + +clientDataJson field + + +attestationObject field + + + transports field + + +item field + +Enum options: `AUTHENTICATOR_TRANSPORT_BLE`, `AUTHENTICATOR_TRANSPORT_INTERNAL`, `AUTHENTICATOR_TRANSPORT_NFC`, `AUTHENTICATOR_TRANSPORT_USB`, `AUTHENTICATOR_TRANSPORT_HYBRID` + + + + + + +authenticatorAttachment field + +Enum options: `cross-platform`, `platform` + + + + + + + clientExtensionResults field + + +appid field + + +appidExclude field + + + credProps field + + +rk field + + + + + + + + + + + +Challenge presented for authentication purposes. + + + + + +Unique identifier for the root user object. + + + + + + createAuthenticatorsIntent field + + + A list of Authenticators. + + +Human-readable name for an Authenticator. + + +Unique identifier for a given User. + + + attestation field + + +id field + + +type field + +Enum options: `public-key` + + + +rawId field + + +authenticatorAttachment field + +Enum options: `cross-platform`, `platform` + + + + response field + + +clientDataJson field + + +attestationObject field + + + transports field + + +item field + +Enum options: `AUTHENTICATOR_TRANSPORT_BLE`, `AUTHENTICATOR_TRANSPORT_INTERNAL`, `AUTHENTICATOR_TRANSPORT_NFC`, `AUTHENTICATOR_TRANSPORT_USB`, `AUTHENTICATOR_TRANSPORT_HYBRID` + + + + + + +authenticatorAttachment field + +Enum options: `cross-platform`, `platform` + + + + + + + clientExtensionResults field + + +appid field + + +appidExclude field + + + credProps field + + +rk field + + + + + + + + + + + +Challenge presented for authentication purposes. + + + + + +Unique identifier for a given User. + + + + + + createUsersIntent field + + + A list of Users. + + +Human-readable name for a User. + + +The user's email address. + + +accessType field + +Enum options: `ACCESS_TYPE_WEB`, `ACCESS_TYPE_API`, `ACCESS_TYPE_ALL` + + + + A list of API Key parameters. This field, if not needed, should be an empty array in your request body. + + +Human-readable name for an API Key. + + +The public component of a cryptographic key pair used to sign messages and transactions. + + +Optional window (in seconds) indicating how long the API Key should last. + + + + + + A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body. + + +Human-readable name for an Authenticator. + + +Unique identifier for a given User. + + + attestation field + + +id field + + +type field + +Enum options: `public-key` + + + +rawId field + + +authenticatorAttachment field + +Enum options: `cross-platform`, `platform` + + + + response field + + +clientDataJson field + + +attestationObject field + + + transports field + + +item field + +Enum options: `AUTHENTICATOR_TRANSPORT_BLE`, `AUTHENTICATOR_TRANSPORT_INTERNAL`, `AUTHENTICATOR_TRANSPORT_NFC`, `AUTHENTICATOR_TRANSPORT_USB`, `AUTHENTICATOR_TRANSPORT_HYBRID` + + + + + + +authenticatorAttachment field + +Enum options: `cross-platform`, `platform` + + + + + + + clientExtensionResults field + + +appid field + + +appidExclude field + + + credProps field + + +rk field + + + + + + + + + + + +Challenge presented for authentication purposes. + + + + + + A list of User Tag IDs. This field, if not needed, should be an empty array in your request body. + + +item field + + + + + + + + + + + + createPrivateKeysIntent field + + + A list of Private Keys. + + +Human-readable name for a Private Key. + + +curve field + +Enum options: `CURVE_SECP256K1`, `CURVE_ED25519`, `CURVE_P256` + + + + A list of Private Key Tag IDs. This field, if not needed, should be an empty array in your request body. + + +item field + + + + + + Cryptocurrency-specific formats for a derived address (e.g., Ethereum). + + +item field + +Enum options: `ADDRESS_FORMAT_UNCOMPRESSED`, `ADDRESS_FORMAT_COMPRESSED`, `ADDRESS_FORMAT_ETHEREUM`, `ADDRESS_FORMAT_SOLANA`, `ADDRESS_FORMAT_COSMOS`, `ADDRESS_FORMAT_TRON`, `ADDRESS_FORMAT_SUI`, `ADDRESS_FORMAT_APTOS`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2PKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2SH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WSH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2TR`, `ADDRESS_FORMAT_SEI`, `ADDRESS_FORMAT_XLM`, `ADDRESS_FORMAT_DOGE_MAINNET`, `ADDRESS_FORMAT_DOGE_TESTNET`, `ADDRESS_FORMAT_TON_V3R2`, `ADDRESS_FORMAT_TON_V4R2`, `ADDRESS_FORMAT_TON_V5R1`, `ADDRESS_FORMAT_XRP`, `ADDRESS_FORMAT_SPARK_MAINNET`, `ADDRESS_FORMAT_SPARK_REGTEST` + + + + + + + + + + + + + signRawPayloadIntent field + + +Unique identifier for a given Private Key. + + +Raw unsigned payload to be signed. + + +encoding field + +Enum options: `PAYLOAD_ENCODING_HEXADECIMAL`, `PAYLOAD_ENCODING_TEXT_UTF8`, `PAYLOAD_ENCODING_EIP712`, `PAYLOAD_ENCODING_EIP7702_AUTHORIZATION` + + + +hashFunction field + +Enum options: `HASH_FUNCTION_NO_OP`, `HASH_FUNCTION_SHA256`, `HASH_FUNCTION_KECCAK256`, `HASH_FUNCTION_NOT_APPLICABLE` + + + + + + + createInvitationsIntent field + + + A list of Invitations. + + +The name of the intended Invitation recipient. + + +The email address of the intended Invitation recipient. + + + A list of tags assigned to the Invitation recipient. This field, if not needed, should be an empty array in your request body. + + +item field + + + + + +accessType field + +Enum options: `ACCESS_TYPE_WEB`, `ACCESS_TYPE_API`, `ACCESS_TYPE_ALL` + + + +Unique identifier for the Sender of an Invitation. + + + + + + + + + acceptInvitationIntent field + + +Unique identifier for a given Invitation object. + + +Unique identifier for a given User. + + + authenticator field + + +Human-readable name for an Authenticator. + + +Unique identifier for a given User. + + + attestation field + + +id field + + +type field + +Enum options: `public-key` + + + +rawId field + + +authenticatorAttachment field + +Enum options: `cross-platform`, `platform` + + + + response field + + +clientDataJson field + + +attestationObject field + + + transports field + + +item field + +Enum options: `AUTHENTICATOR_TRANSPORT_BLE`, `AUTHENTICATOR_TRANSPORT_INTERNAL`, `AUTHENTICATOR_TRANSPORT_NFC`, `AUTHENTICATOR_TRANSPORT_USB`, `AUTHENTICATOR_TRANSPORT_HYBRID` + + + + + + +authenticatorAttachment field + +Enum options: `cross-platform`, `platform` + + + + + + + clientExtensionResults field + + +appid field + + +appidExclude field + + + credProps field + + +rk field + + + + + + + + + + + +Challenge presented for authentication purposes. + + + + + + + + + createPolicyIntent field + + +Human-readable name for a Policy. + + + A list of simple functions each including a subject, target and boolean. See Policy Engine Language section for additional details. + + +subject field + + +operator field + +Enum options: `OPERATOR_EQUAL`, `OPERATOR_MORE_THAN`, `OPERATOR_MORE_THAN_OR_EQUAL`, `OPERATOR_LESS_THAN`, `OPERATOR_LESS_THAN_OR_EQUAL`, `OPERATOR_CONTAINS`, `OPERATOR_NOT_EQUAL`, `OPERATOR_IN`, `OPERATOR_NOT_IN`, `OPERATOR_CONTAINS_ONE`, `OPERATOR_CONTAINS_ALL` + + + +target field + + + + + +effect field + +Enum options: `EFFECT_ALLOW`, `EFFECT_DENY` + + + +notes field + + + + + + disablePrivateKeyIntent field + + +Unique identifier for a given Private Key. + + + + + + deleteUsersIntent field + + + A list of User IDs. + + +item field + + + + + + + + + deleteAuthenticatorsIntent field + + +Unique identifier for a given User. + + + A list of Authenticator IDs. + + +item field + + + + + + + + + deleteInvitationIntent field + + +Unique identifier for a given Invitation object. + + + + + + deleteOrganizationIntent field + + +Unique identifier for a given Organization. + + + + + + deletePolicyIntent field + + +Unique identifier for a given Policy. + + + + + + createUserTagIntent field + + +Human-readable name for a User Tag. + + + A list of User IDs. + + +item field + + + + + + + + + deleteUserTagsIntent field + + + A list of User Tag IDs. + + +item field + + + + + + + + + signTransactionIntent field + + +Unique identifier for a given Private Key. + + +Raw unsigned transaction to be signed by a particular Private Key. + + +type field + +Enum options: `TRANSACTION_TYPE_ETHEREUM`, `TRANSACTION_TYPE_SOLANA`, `TRANSACTION_TYPE_TRON`, `TRANSACTION_TYPE_BITCOIN`, `TRANSACTION_TYPE_TEMPO` + + + + + + + createApiKeysIntent field + + + A list of API Keys. + + +Human-readable name for an API Key. + + +The public component of a cryptographic key pair used to sign messages and transactions. + + +Optional window (in seconds) indicating how long the API Key should last. + + + + + +Unique identifier for a given User. + + + + + + deleteApiKeysIntent field + + +Unique identifier for a given User. + + + A list of API Key IDs. + + +item field + + + + + + + + + approveActivityIntent field + + +An artifact verifying a User's action. + + + + + + rejectActivityIntent field + + +An artifact verifying a User's action. + + + + + + createPrivateKeyTagIntent field + + +Human-readable name for a Private Key Tag. + + + A list of Private Key IDs. + + +item field + + + + + + + + + deletePrivateKeyTagsIntent field + + + A list of Private Key Tag IDs. + + +item field + + + + + + + + + createPolicyIntentV2 field + + +Human-readable name for a Policy. + + + A list of simple functions each including a subject, target and boolean. See Policy Engine Language section for additional details. + + +subject field + + +operator field + +Enum options: `OPERATOR_EQUAL`, `OPERATOR_MORE_THAN`, `OPERATOR_MORE_THAN_OR_EQUAL`, `OPERATOR_LESS_THAN`, `OPERATOR_LESS_THAN_OR_EQUAL`, `OPERATOR_CONTAINS`, `OPERATOR_NOT_EQUAL`, `OPERATOR_IN`, `OPERATOR_NOT_IN`, `OPERATOR_CONTAINS_ONE`, `OPERATOR_CONTAINS_ALL` + + + + targets field + + +item field + + + + + + + + +effect field + +Enum options: `EFFECT_ALLOW`, `EFFECT_DENY` + + + +notes field + + + + + + setPaymentMethodIntent field + + +The account number of the customer's credit card. + + +The verification digits of the customer's credit card. + + +The month that the credit card expires. + + +The year that the credit card expires. + + +The email that will receive invoices for the credit card. + + +The name associated with the credit card. + + + + + + activateBillingTierIntent field + + +The product that the customer wants to subscribe to. + + +orbPlanId field + + + + + + deletePaymentMethodIntent field + + +The payment method that the customer wants to remove. + + + + + + createPolicyIntentV3 field + + +Human-readable name for a Policy. + + +effect field + +Enum options: `EFFECT_ALLOW`, `EFFECT_DENY` + + + +The condition expression that triggers the Effect + + +The consensus expression that triggers the Effect + + +Notes for a Policy. + + +The time expression that triggers the Effect + + + + + + createApiOnlyUsersIntent field + + + A list of API-only Users to create. + + +The name of the new API-only User. + + +The email address for this API-only User (optional). + + + A list of tags assigned to the new API-only User. This field, if not needed, should be an empty array in your request body. + + +item field + + + + + + A list of API Key parameters. This field, if not needed, should be an empty array in your request body. + + +Human-readable name for an API Key. + + +The public component of a cryptographic key pair used to sign messages and transactions. + + +Optional window (in seconds) indicating how long the API Key should last. + + + + + + + + + + + + updateRootQuorumIntent field + + +The threshold of unique approvals to reach quorum. + + + The unique identifiers of users who comprise the quorum set. + + +item field + + + + + + + + + updateUserTagIntent field + + +Unique identifier for a given User Tag. + + +The new, human-readable name for the tag with the given ID. + + + A list of User IDs to add this tag to. + + +item field + + + + + + A list of User IDs to remove this tag from. + + +item field + + + + + + + + + updatePrivateKeyTagIntent field + + +Unique identifier for a given Private Key Tag. + + +The new, human-readable name for the tag with the given ID. + + + A list of Private Keys IDs to add this tag to. + + +item field + + + + + + A list of Private Key IDs to remove this tag from. + + +item field + + + + + + + + + createAuthenticatorsIntentV2 field + + + A list of Authenticators. + + +Human-readable name for an Authenticator. + + +Challenge presented for authentication purposes. + + + attestation field + + +The cbor encoded then base64 url encoded id of the credential. + + +A base64 url encoded payload containing metadata about the signing context and the challenge. + + +A base64 url encoded payload containing authenticator data and any attestation the webauthn provider chooses. + + + The type of authenticator transports. + + +item field + +Enum options: `AUTHENTICATOR_TRANSPORT_BLE`, `AUTHENTICATOR_TRANSPORT_INTERNAL`, `AUTHENTICATOR_TRANSPORT_NFC`, `AUTHENTICATOR_TRANSPORT_USB`, `AUTHENTICATOR_TRANSPORT_HYBRID` + + + + + + + + + + + + +Unique identifier for a given User. + + + + + + acceptInvitationIntentV2 field + + +Unique identifier for a given Invitation object. + + +Unique identifier for a given User. + + + authenticator field + + +Human-readable name for an Authenticator. + + +Challenge presented for authentication purposes. + + + attestation field + + +The cbor encoded then base64 url encoded id of the credential. + + +A base64 url encoded payload containing metadata about the signing context and the challenge. + + +A base64 url encoded payload containing authenticator data and any attestation the webauthn provider chooses. + + + The type of authenticator transports. + + +item field + +Enum options: `AUTHENTICATOR_TRANSPORT_BLE`, `AUTHENTICATOR_TRANSPORT_INTERNAL`, `AUTHENTICATOR_TRANSPORT_NFC`, `AUTHENTICATOR_TRANSPORT_USB`, `AUTHENTICATOR_TRANSPORT_HYBRID` + + + + + + + + + + + + + + + + createOrganizationIntentV2 field + + +Human-readable name for an Organization. + + +The root user's email address. + + + rootAuthenticator field + + +Human-readable name for an Authenticator. + + +Challenge presented for authentication purposes. + + + attestation field + + +The cbor encoded then base64 url encoded id of the credential. + + +A base64 url encoded payload containing metadata about the signing context and the challenge. + + +A base64 url encoded payload containing authenticator data and any attestation the webauthn provider chooses. + + + The type of authenticator transports. + + +item field + +Enum options: `AUTHENTICATOR_TRANSPORT_BLE`, `AUTHENTICATOR_TRANSPORT_INTERNAL`, `AUTHENTICATOR_TRANSPORT_NFC`, `AUTHENTICATOR_TRANSPORT_USB`, `AUTHENTICATOR_TRANSPORT_HYBRID` + + + + + + + + + + + + +Unique identifier for the root user object. + + + + + + createUsersIntentV2 field + + + A list of Users. + + +Human-readable name for a User. + + +The user's email address. + + + A list of API Key parameters. This field, if not needed, should be an empty array in your request body. + + +Human-readable name for an API Key. + + +The public component of a cryptographic key pair used to sign messages and transactions. + + +Optional window (in seconds) indicating how long the API Key should last. + + + + + + A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body. + + +Human-readable name for an Authenticator. + + +Challenge presented for authentication purposes. + + + attestation field + + +The cbor encoded then base64 url encoded id of the credential. + + +A base64 url encoded payload containing metadata about the signing context and the challenge. + + +A base64 url encoded payload containing authenticator data and any attestation the webauthn provider chooses. + + + The type of authenticator transports. + + +item field + +Enum options: `AUTHENTICATOR_TRANSPORT_BLE`, `AUTHENTICATOR_TRANSPORT_INTERNAL`, `AUTHENTICATOR_TRANSPORT_NFC`, `AUTHENTICATOR_TRANSPORT_USB`, `AUTHENTICATOR_TRANSPORT_HYBRID` + + + + + + + + + + + + + A list of User Tag IDs. This field, if not needed, should be an empty array in your request body. + + +item field + + + + + + + + + + + + createSubOrganizationIntent field + + +Name for this sub-organization + + + rootAuthenticator field + + +Human-readable name for an Authenticator. + + +Challenge presented for authentication purposes. + + + attestation field + + +The cbor encoded then base64 url encoded id of the credential. + + +A base64 url encoded payload containing metadata about the signing context and the challenge. + + +A base64 url encoded payload containing authenticator data and any attestation the webauthn provider chooses. + + + The type of authenticator transports. + + +item field + +Enum options: `AUTHENTICATOR_TRANSPORT_BLE`, `AUTHENTICATOR_TRANSPORT_INTERNAL`, `AUTHENTICATOR_TRANSPORT_NFC`, `AUTHENTICATOR_TRANSPORT_USB`, `AUTHENTICATOR_TRANSPORT_HYBRID` + + + + + + + + + + + + + + + + createSubOrganizationIntentV2 field + + +Name for this sub-organization + + + Root users to create within this sub-organization + + +Human-readable name for a User. + + +The user's email address. + + + A list of API Key parameters. This field, if not needed, should be an empty array in your request body. + + +Human-readable name for an API Key. + + +The public component of a cryptographic key pair used to sign messages and transactions. + + +Optional window (in seconds) indicating how long the API Key should last. + + + + + + A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body. + + +Human-readable name for an Authenticator. + + +Challenge presented for authentication purposes. + + + attestation field + + +The cbor encoded then base64 url encoded id of the credential. + + +A base64 url encoded payload containing metadata about the signing context and the challenge. + + +A base64 url encoded payload containing authenticator data and any attestation the webauthn provider chooses. + + + The type of authenticator transports. + + +item field + +Enum options: `AUTHENTICATOR_TRANSPORT_BLE`, `AUTHENTICATOR_TRANSPORT_INTERNAL`, `AUTHENTICATOR_TRANSPORT_NFC`, `AUTHENTICATOR_TRANSPORT_USB`, `AUTHENTICATOR_TRANSPORT_HYBRID` + + + + + + + + + + + + + + + +The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users + + + + + + updateAllowedOriginsIntent field + + + Additional origins requests are allowed from besides Turnkey origins + + +item field + + + + + + + + + createPrivateKeysIntentV2 field + + + A list of Private Keys. + + +Human-readable name for a Private Key. + + +curve field + +Enum options: `CURVE_SECP256K1`, `CURVE_ED25519`, `CURVE_P256` + + + + A list of Private Key Tag IDs. This field, if not needed, should be an empty array in your request body. + + +item field + + + + + + Cryptocurrency-specific formats for a derived address (e.g., Ethereum). + + +item field + +Enum options: `ADDRESS_FORMAT_UNCOMPRESSED`, `ADDRESS_FORMAT_COMPRESSED`, `ADDRESS_FORMAT_ETHEREUM`, `ADDRESS_FORMAT_SOLANA`, `ADDRESS_FORMAT_COSMOS`, `ADDRESS_FORMAT_TRON`, `ADDRESS_FORMAT_SUI`, `ADDRESS_FORMAT_APTOS`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2PKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2SH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WSH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2TR`, `ADDRESS_FORMAT_SEI`, `ADDRESS_FORMAT_XLM`, `ADDRESS_FORMAT_DOGE_MAINNET`, `ADDRESS_FORMAT_DOGE_TESTNET`, `ADDRESS_FORMAT_TON_V3R2`, `ADDRESS_FORMAT_TON_V4R2`, `ADDRESS_FORMAT_TON_V5R1`, `ADDRESS_FORMAT_XRP`, `ADDRESS_FORMAT_SPARK_MAINNET`, `ADDRESS_FORMAT_SPARK_REGTEST` + + + + + + + + + + + + + updateUserIntent field + + +Unique identifier for a given User. + + +Human-readable name for a User. + + +The user's email address. + + + An updated list of User Tags to apply to this User. This field, if not needed, should be an empty array in your request body. + + +item field + + + + + +The user's phone number in E.164 format e.g. +13214567890 + + + + + + updatePolicyIntent field + + +Unique identifier for a given Policy. + + +Human-readable name for a Policy. + + +policyEffect field + +Enum options: `EFFECT_ALLOW`, `EFFECT_DENY` + + + +The condition expression that triggers the Effect (optional). + + +The consensus expression that triggers the Effect (optional). + + +Accompanying notes for a Policy (optional). + + + + + + setPaymentMethodIntentV2 field + + +The id of the payment method that was created clientside. + + +The email that will receive invoices for the credit card. + + +The name associated with the credit card. + + + + + + createSubOrganizationIntentV3 field + + +Name for this sub-organization + + + Root users to create within this sub-organization + + +Human-readable name for a User. + + +The user's email address. + + + A list of API Key parameters. This field, if not needed, should be an empty array in your request body. + + +Human-readable name for an API Key. + + +The public component of a cryptographic key pair used to sign messages and transactions. + + +Optional window (in seconds) indicating how long the API Key should last. + + + + + + A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body. + + +Human-readable name for an Authenticator. + + +Challenge presented for authentication purposes. + + + attestation field + + +The cbor encoded then base64 url encoded id of the credential. + + +A base64 url encoded payload containing metadata about the signing context and the challenge. + + +A base64 url encoded payload containing authenticator data and any attestation the webauthn provider chooses. + + + The type of authenticator transports. + + +item field + +Enum options: `AUTHENTICATOR_TRANSPORT_BLE`, `AUTHENTICATOR_TRANSPORT_INTERNAL`, `AUTHENTICATOR_TRANSPORT_NFC`, `AUTHENTICATOR_TRANSPORT_USB`, `AUTHENTICATOR_TRANSPORT_HYBRID` + + + + + + + + + + + + + + + +The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users + + + A list of Private Keys. + + +Human-readable name for a Private Key. + + +curve field + +Enum options: `CURVE_SECP256K1`, `CURVE_ED25519`, `CURVE_P256` + + + + A list of Private Key Tag IDs. This field, if not needed, should be an empty array in your request body. + + +item field + + + + + + Cryptocurrency-specific formats for a derived address (e.g., Ethereum). + + +item field + +Enum options: `ADDRESS_FORMAT_UNCOMPRESSED`, `ADDRESS_FORMAT_COMPRESSED`, `ADDRESS_FORMAT_ETHEREUM`, `ADDRESS_FORMAT_SOLANA`, `ADDRESS_FORMAT_COSMOS`, `ADDRESS_FORMAT_TRON`, `ADDRESS_FORMAT_SUI`, `ADDRESS_FORMAT_APTOS`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2PKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2SH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WSH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2TR`, `ADDRESS_FORMAT_SEI`, `ADDRESS_FORMAT_XLM`, `ADDRESS_FORMAT_DOGE_MAINNET`, `ADDRESS_FORMAT_DOGE_TESTNET`, `ADDRESS_FORMAT_TON_V3R2`, `ADDRESS_FORMAT_TON_V4R2`, `ADDRESS_FORMAT_TON_V5R1`, `ADDRESS_FORMAT_XRP`, `ADDRESS_FORMAT_SPARK_MAINNET`, `ADDRESS_FORMAT_SPARK_REGTEST` + + + + + + + + + + + + + createWalletIntent field + + +Human-readable name for a Wallet. + + + A list of wallet Accounts. This field, if not needed, should be an empty array in your request body. + + +curve field + +Enum options: `CURVE_SECP256K1`, `CURVE_ED25519`, `CURVE_P256` + + + +pathFormat field + +Enum options: `PATH_FORMAT_BIP32` + + + +Path used to generate a wallet Account. + + +addressFormat field + +Enum options: `ADDRESS_FORMAT_UNCOMPRESSED`, `ADDRESS_FORMAT_COMPRESSED`, `ADDRESS_FORMAT_ETHEREUM`, `ADDRESS_FORMAT_SOLANA`, `ADDRESS_FORMAT_COSMOS`, `ADDRESS_FORMAT_TRON`, `ADDRESS_FORMAT_SUI`, `ADDRESS_FORMAT_APTOS`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2PKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2SH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WSH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2TR`, `ADDRESS_FORMAT_SEI`, `ADDRESS_FORMAT_XLM`, `ADDRESS_FORMAT_DOGE_MAINNET`, `ADDRESS_FORMAT_DOGE_TESTNET`, `ADDRESS_FORMAT_TON_V3R2`, `ADDRESS_FORMAT_TON_V4R2`, `ADDRESS_FORMAT_TON_V5R1`, `ADDRESS_FORMAT_XRP`, `ADDRESS_FORMAT_SPARK_MAINNET`, `ADDRESS_FORMAT_SPARK_REGTEST` + + + +Optional human-readable name for the account. + + + + + +Length of mnemonic to generate the Wallet seed. Defaults to 12. Accepted values: 12, 15, 18, 21, 24. + + + + + + createWalletAccountsIntent field + + +Unique identifier for a given Wallet. + + + A list of wallet Accounts. + + +curve field + +Enum options: `CURVE_SECP256K1`, `CURVE_ED25519`, `CURVE_P256` + + + +pathFormat field + +Enum options: `PATH_FORMAT_BIP32` + + + +Path used to generate a wallet Account. + + +addressFormat field + +Enum options: `ADDRESS_FORMAT_UNCOMPRESSED`, `ADDRESS_FORMAT_COMPRESSED`, `ADDRESS_FORMAT_ETHEREUM`, `ADDRESS_FORMAT_SOLANA`, `ADDRESS_FORMAT_COSMOS`, `ADDRESS_FORMAT_TRON`, `ADDRESS_FORMAT_SUI`, `ADDRESS_FORMAT_APTOS`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2PKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2SH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WSH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2TR`, `ADDRESS_FORMAT_SEI`, `ADDRESS_FORMAT_XLM`, `ADDRESS_FORMAT_DOGE_MAINNET`, `ADDRESS_FORMAT_DOGE_TESTNET`, `ADDRESS_FORMAT_TON_V3R2`, `ADDRESS_FORMAT_TON_V4R2`, `ADDRESS_FORMAT_TON_V5R1`, `ADDRESS_FORMAT_XRP`, `ADDRESS_FORMAT_SPARK_MAINNET`, `ADDRESS_FORMAT_SPARK_REGTEST` + + + +Optional human-readable name for the account. + + + + + +Indicates if the wallet accounts should be persisted. This is helpful if you'd like to see the addresses of different derivation paths without actually creating the accounts. Defaults to true. + + + + + + initUserEmailRecoveryIntent field + + +Email of the user starting recovery + + +Client-side public key generated by the user, to which the recovery bundle will be encrypted. + + +Expiration window (in seconds) indicating how long the recovery credential is valid for. If not provided, a default of 15 minutes will be used. + + + emailCustomization field + + +The name of the application. + + +A URL pointing to a logo in PNG format. Note this logo will be resized to fit into 340px x 124px. + + +A template for the URL to be used in a magic link button, e.g. `https://dapp.xyz/%s`. The auth bundle will be interpolated into the `%s`. + + +JSON object containing key/value pairs to be used with custom templates. + + +Unique identifier for a given Email Template. If not specified, the default is the most recent Email Template. + + + + + +Optional custom email address from which to send the OTP email + + +Optional custom sender name for use with sendFromEmailAddress; if left empty, will default to 'Notifications' + + +Optional custom email address to use as reply-to + + + + + + recoverUserIntent field + + + authenticator field + + +Human-readable name for an Authenticator. + + +Challenge presented for authentication purposes. + + + attestation field + + +The cbor encoded then base64 url encoded id of the credential. + + +A base64 url encoded payload containing metadata about the signing context and the challenge. + + +A base64 url encoded payload containing authenticator data and any attestation the webauthn provider chooses. + + + The type of authenticator transports. + + +item field + +Enum options: `AUTHENTICATOR_TRANSPORT_BLE`, `AUTHENTICATOR_TRANSPORT_INTERNAL`, `AUTHENTICATOR_TRANSPORT_NFC`, `AUTHENTICATOR_TRANSPORT_USB`, `AUTHENTICATOR_TRANSPORT_HYBRID` + + + + + + + + + + + + +Unique identifier for the user performing recovery. + + + + + + setOrganizationFeatureIntent field + + +name field + +Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_SWAP_CONFIG`, `FEATURE_NAME_EARN_CONFIG` + + + +Optional value for the feature. Will override existing values if feature is already set. + + + + + + removeOrganizationFeatureIntent field + + +name field + +Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_SWAP_CONFIG`, `FEATURE_NAME_EARN_CONFIG` + + + + + + + signRawPayloadIntentV2 field + + +A Wallet account address, Private Key address, or Private Key identifier. + + +Raw unsigned payload to be signed. + + +encoding field + +Enum options: `PAYLOAD_ENCODING_HEXADECIMAL`, `PAYLOAD_ENCODING_TEXT_UTF8`, `PAYLOAD_ENCODING_EIP712`, `PAYLOAD_ENCODING_EIP7702_AUTHORIZATION` + + + +hashFunction field + +Enum options: `HASH_FUNCTION_NO_OP`, `HASH_FUNCTION_SHA256`, `HASH_FUNCTION_KECCAK256`, `HASH_FUNCTION_NOT_APPLICABLE` + + + + + + + signTransactionIntentV2 field + + +A Wallet account address, Private Key address, or Private Key identifier. + + +Raw unsigned transaction to be signed + + +type field + +Enum options: `TRANSACTION_TYPE_ETHEREUM`, `TRANSACTION_TYPE_SOLANA`, `TRANSACTION_TYPE_TRON`, `TRANSACTION_TYPE_BITCOIN`, `TRANSACTION_TYPE_TEMPO` + + + + + + + exportPrivateKeyIntent field + + +Unique identifier for a given Private Key. + + +Client-side public key generated by the user, to which the export bundle will be encrypted. + + + + + + exportWalletIntent field + + +Unique identifier for a given Wallet. + + +Client-side public key generated by the user, to which the export bundle will be encrypted. + + +language field + +Enum options: `MNEMONIC_LANGUAGE_ENGLISH`, `MNEMONIC_LANGUAGE_SIMPLIFIED_CHINESE`, `MNEMONIC_LANGUAGE_TRADITIONAL_CHINESE`, `MNEMONIC_LANGUAGE_CZECH`, `MNEMONIC_LANGUAGE_FRENCH`, `MNEMONIC_LANGUAGE_ITALIAN`, `MNEMONIC_LANGUAGE_JAPANESE`, `MNEMONIC_LANGUAGE_KOREAN`, `MNEMONIC_LANGUAGE_SPANISH` + + + + + + + createSubOrganizationIntentV4 field + + +Name for this sub-organization + + + Root users to create within this sub-organization + + +Human-readable name for a User. + + +The user's email address. + + + A list of API Key parameters. This field, if not needed, should be an empty array in your request body. + + +Human-readable name for an API Key. + + +The public component of a cryptographic key pair used to sign messages and transactions. + + +Optional window (in seconds) indicating how long the API Key should last. + + + + + + A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body. + + +Human-readable name for an Authenticator. + + +Challenge presented for authentication purposes. + + + attestation field + + +The cbor encoded then base64 url encoded id of the credential. + + +A base64 url encoded payload containing metadata about the signing context and the challenge. + + +A base64 url encoded payload containing authenticator data and any attestation the webauthn provider chooses. + + + The type of authenticator transports. + + +item field + +Enum options: `AUTHENTICATOR_TRANSPORT_BLE`, `AUTHENTICATOR_TRANSPORT_INTERNAL`, `AUTHENTICATOR_TRANSPORT_NFC`, `AUTHENTICATOR_TRANSPORT_USB`, `AUTHENTICATOR_TRANSPORT_HYBRID` + + + + + + + + + + + + + + + +The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users + + + wallet field + + +Human-readable name for a Wallet. + + + A list of wallet Accounts. This field, if not needed, should be an empty array in your request body. + + +curve field + +Enum options: `CURVE_SECP256K1`, `CURVE_ED25519`, `CURVE_P256` + + + +pathFormat field + +Enum options: `PATH_FORMAT_BIP32` + + + +Path used to generate a wallet Account. + + +addressFormat field + +Enum options: `ADDRESS_FORMAT_UNCOMPRESSED`, `ADDRESS_FORMAT_COMPRESSED`, `ADDRESS_FORMAT_ETHEREUM`, `ADDRESS_FORMAT_SOLANA`, `ADDRESS_FORMAT_COSMOS`, `ADDRESS_FORMAT_TRON`, `ADDRESS_FORMAT_SUI`, `ADDRESS_FORMAT_APTOS`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2PKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2SH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WSH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2TR`, `ADDRESS_FORMAT_SEI`, `ADDRESS_FORMAT_XLM`, `ADDRESS_FORMAT_DOGE_MAINNET`, `ADDRESS_FORMAT_DOGE_TESTNET`, `ADDRESS_FORMAT_TON_V3R2`, `ADDRESS_FORMAT_TON_V4R2`, `ADDRESS_FORMAT_TON_V5R1`, `ADDRESS_FORMAT_XRP`, `ADDRESS_FORMAT_SPARK_MAINNET`, `ADDRESS_FORMAT_SPARK_REGTEST` + + + +Optional human-readable name for the account. + + + + + +Length of mnemonic to generate the Wallet seed. Defaults to 12. Accepted values: 12, 15, 18, 21, 24. + + + + + +Disable email recovery for the sub-organization + + +Disable email auth for the sub-organization + + + + + + emailAuthIntent field + + +Email of the authenticating user. + + +Client-side public key generated by the user, to which the email auth bundle (credentials) will be encrypted. + + +Optional human-readable name for an API Key. If none provided, default to Email Auth - <Timestamp> + + +Expiration window (in seconds) indicating how long the API key is valid for. If not provided, a default of 15 minutes will be used. + + + emailCustomization field + + +The name of the application. + + +A URL pointing to a logo in PNG format. Note this logo will be resized to fit into 340px x 124px. + + +A template for the URL to be used in a magic link button, e.g. `https://dapp.xyz/%s`. The auth bundle will be interpolated into the `%s`. + + +JSON object containing key/value pairs to be used with custom templates. + + +Unique identifier for a given Email Template. If not specified, the default is the most recent Email Template. + + + + + +Invalidate all other previously generated Email Auth API keys + + +Optional custom email address from which to send the email + + +Optional custom sender name for use with sendFromEmailAddress; if left empty, will default to 'Notifications' + + +Optional custom email address to use as reply-to + + + + + + exportWalletAccountIntent field + + +Address to identify Wallet Account. + + +Client-side public key generated by the user, to which the export bundle will be encrypted. + + + + + + initImportWalletIntent field + + +The ID of the User importing a Wallet. + + + + + + importWalletIntent field + + +The ID of the User importing a Wallet. + + +Human-readable name for a Wallet. + + +Bundle containing a wallet mnemonic encrypted to the enclave's target public key. + + + A list of wallet Accounts. + + +curve field + +Enum options: `CURVE_SECP256K1`, `CURVE_ED25519`, `CURVE_P256` + + + +pathFormat field + +Enum options: `PATH_FORMAT_BIP32` + + + +Path used to generate a wallet Account. + + +addressFormat field + +Enum options: `ADDRESS_FORMAT_UNCOMPRESSED`, `ADDRESS_FORMAT_COMPRESSED`, `ADDRESS_FORMAT_ETHEREUM`, `ADDRESS_FORMAT_SOLANA`, `ADDRESS_FORMAT_COSMOS`, `ADDRESS_FORMAT_TRON`, `ADDRESS_FORMAT_SUI`, `ADDRESS_FORMAT_APTOS`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2PKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2SH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WSH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2TR`, `ADDRESS_FORMAT_SEI`, `ADDRESS_FORMAT_XLM`, `ADDRESS_FORMAT_DOGE_MAINNET`, `ADDRESS_FORMAT_DOGE_TESTNET`, `ADDRESS_FORMAT_TON_V3R2`, `ADDRESS_FORMAT_TON_V4R2`, `ADDRESS_FORMAT_TON_V5R1`, `ADDRESS_FORMAT_XRP`, `ADDRESS_FORMAT_SPARK_MAINNET`, `ADDRESS_FORMAT_SPARK_REGTEST` + + + +Optional human-readable name for the account. + + + + + + + + + initImportPrivateKeyIntent field + + +The ID of the User importing a Private Key. + + + + + + importPrivateKeyIntent field + + +The ID of the User importing a Private Key. + + +Human-readable name for a Private Key. + + +Bundle containing a raw private key encrypted to the enclave's target public key. + + +curve field + +Enum options: `CURVE_SECP256K1`, `CURVE_ED25519`, `CURVE_P256` + + + + Cryptocurrency-specific formats for a derived address (e.g., Ethereum). + + +item field + +Enum options: `ADDRESS_FORMAT_UNCOMPRESSED`, `ADDRESS_FORMAT_COMPRESSED`, `ADDRESS_FORMAT_ETHEREUM`, `ADDRESS_FORMAT_SOLANA`, `ADDRESS_FORMAT_COSMOS`, `ADDRESS_FORMAT_TRON`, `ADDRESS_FORMAT_SUI`, `ADDRESS_FORMAT_APTOS`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2PKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2SH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WSH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2TR`, `ADDRESS_FORMAT_SEI`, `ADDRESS_FORMAT_XLM`, `ADDRESS_FORMAT_DOGE_MAINNET`, `ADDRESS_FORMAT_DOGE_TESTNET`, `ADDRESS_FORMAT_TON_V3R2`, `ADDRESS_FORMAT_TON_V4R2`, `ADDRESS_FORMAT_TON_V5R1`, `ADDRESS_FORMAT_XRP`, `ADDRESS_FORMAT_SPARK_MAINNET`, `ADDRESS_FORMAT_SPARK_REGTEST` + + + + + + + + + + createPoliciesIntent field + + + An array of policy intents to be created. + + +Human-readable name for a Policy. + + +effect field + +Enum options: `EFFECT_ALLOW`, `EFFECT_DENY` + + + +The condition expression that triggers the Effect + + +The consensus expression that triggers the Effect + + +Notes for a Policy. + + +The time expression that triggers the Effect + + + + + + + + + signRawPayloadsIntent field + + +A Wallet account address, Private Key address, or Private Key identifier. + + + An array of raw unsigned payloads to be signed. + + +item field + + + + + +encoding field + +Enum options: `PAYLOAD_ENCODING_HEXADECIMAL`, `PAYLOAD_ENCODING_TEXT_UTF8`, `PAYLOAD_ENCODING_EIP712`, `PAYLOAD_ENCODING_EIP7702_AUTHORIZATION` + + + +hashFunction field + +Enum options: `HASH_FUNCTION_NO_OP`, `HASH_FUNCTION_SHA256`, `HASH_FUNCTION_KECCAK256`, `HASH_FUNCTION_NOT_APPLICABLE` + + + + + + +createReadOnlySessionIntent field + + + createOauthProvidersIntent field + + +The ID of the User to add an Oauth provider to + + + A list of Oauth providers. + + +Human-readable name to identify a Provider. + + +Base64 encoded OIDC token + + + + + + + + + deleteOauthProvidersIntent field + + +The ID of the User to remove an Oauth provider from + + + Unique identifier for a given Provider. + + +item field + + + + + + + + + createSubOrganizationIntentV5 field + + +Name for this sub-organization + + + Root users to create within this sub-organization + + +Human-readable name for a User. + + +The user's email address. + + + A list of API Key parameters. This field, if not needed, should be an empty array in your request body. + + +Human-readable name for an API Key. + + +The public component of a cryptographic key pair used to sign messages and transactions. + + +Optional window (in seconds) indicating how long the API Key should last. + + + + + + A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body. + + +Human-readable name for an Authenticator. + + +Challenge presented for authentication purposes. + + + attestation field + + +The cbor encoded then base64 url encoded id of the credential. + + +A base64 url encoded payload containing metadata about the signing context and the challenge. + + +A base64 url encoded payload containing authenticator data and any attestation the webauthn provider chooses. + + + The type of authenticator transports. + + +item field + +Enum options: `AUTHENTICATOR_TRANSPORT_BLE`, `AUTHENTICATOR_TRANSPORT_INTERNAL`, `AUTHENTICATOR_TRANSPORT_NFC`, `AUTHENTICATOR_TRANSPORT_USB`, `AUTHENTICATOR_TRANSPORT_HYBRID` + + + + + + + + + + + + + A list of Oauth providers. This field, if not needed, should be an empty array in your request body. + + +Human-readable name to identify a Provider. + + +Base64 encoded OIDC token + + + + + + + + +The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users + + + wallet field + + +Human-readable name for a Wallet. + + + A list of wallet Accounts. This field, if not needed, should be an empty array in your request body. + + +curve field + +Enum options: `CURVE_SECP256K1`, `CURVE_ED25519`, `CURVE_P256` + + + +pathFormat field + +Enum options: `PATH_FORMAT_BIP32` + + + +Path used to generate a wallet Account. + + +addressFormat field + +Enum options: `ADDRESS_FORMAT_UNCOMPRESSED`, `ADDRESS_FORMAT_COMPRESSED`, `ADDRESS_FORMAT_ETHEREUM`, `ADDRESS_FORMAT_SOLANA`, `ADDRESS_FORMAT_COSMOS`, `ADDRESS_FORMAT_TRON`, `ADDRESS_FORMAT_SUI`, `ADDRESS_FORMAT_APTOS`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2PKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2SH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WSH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2TR`, `ADDRESS_FORMAT_SEI`, `ADDRESS_FORMAT_XLM`, `ADDRESS_FORMAT_DOGE_MAINNET`, `ADDRESS_FORMAT_DOGE_TESTNET`, `ADDRESS_FORMAT_TON_V3R2`, `ADDRESS_FORMAT_TON_V4R2`, `ADDRESS_FORMAT_TON_V5R1`, `ADDRESS_FORMAT_XRP`, `ADDRESS_FORMAT_SPARK_MAINNET`, `ADDRESS_FORMAT_SPARK_REGTEST` + + + +Optional human-readable name for the account. + + + + + +Length of mnemonic to generate the Wallet seed. Defaults to 12. Accepted values: 12, 15, 18, 21, 24. + + + + + +Disable email recovery for the sub-organization + + +Disable email auth for the sub-organization + + + + + + oauthIntent field + + +Base64 encoded OIDC token + + +Client-side public key generated by the user, to which the oauth bundle (credentials) will be encrypted. + + +Optional human-readable name for an API Key. If none provided, default to Oauth - <Timestamp> + + +Expiration window (in seconds) indicating how long the API key is valid for. If not provided, a default of 15 minutes will be used. + + +Invalidate all other previously generated Oauth API keys + + + + + + createApiKeysIntentV2 field + + + A list of API Keys. + + +Human-readable name for an API Key. + + +The public component of a cryptographic key pair used to sign messages and transactions. + + +curveType field + +Enum options: `API_KEY_CURVE_P256`, `API_KEY_CURVE_SECP256K1`, `API_KEY_CURVE_ED25519` + + + +Optional window (in seconds) indicating how long the API Key should last. + + + + + +Unique identifier for a given User. + + + + + + createReadWriteSessionIntent field + + +Client-side public key generated by the user, to which the read write session bundle (credentials) will be encrypted. + + +Email of the user to create a read write session for + + +Optional human-readable name for an API Key. If none provided, default to Read Write Session - <Timestamp> + + +Expiration window (in seconds) indicating how long the API key is valid for. If not provided, a default of 15 minutes will be used. + + + + + + emailAuthIntentV2 field + + +Email of the authenticating user. + + +Client-side public key generated by the user, to which the email auth bundle (credentials) will be encrypted. + + +Optional human-readable name for an API Key. If none provided, default to Email Auth - <Timestamp> + + +Expiration window (in seconds) indicating how long the API key is valid for. If not provided, a default of 15 minutes will be used. + + + emailCustomization field + + +The name of the application. + + +A URL pointing to a logo in PNG format. Note this logo will be resized to fit into 340px x 124px. + + +A template for the URL to be used in a magic link button, e.g. `https://dapp.xyz/%s`. The auth bundle will be interpolated into the `%s`. + + +JSON object containing key/value pairs to be used with custom templates. + + +Unique identifier for a given Email Template. If not specified, the default is the most recent Email Template. + + + + + +Invalidate all other previously generated Email Auth API keys + + +Optional custom email address from which to send the email + + +Optional custom sender name for use with sendFromEmailAddress; if left empty, will default to 'Notifications' + + +Optional custom email address to use as reply-to + + + + + + createSubOrganizationIntentV6 field + + +Name for this sub-organization + + + Root users to create within this sub-organization + + +Human-readable name for a User. + + +The user's email address. + + + A list of API Key parameters. This field, if not needed, should be an empty array in your request body. + + +Human-readable name for an API Key. + + +The public component of a cryptographic key pair used to sign messages and transactions. + + +curveType field + +Enum options: `API_KEY_CURVE_P256`, `API_KEY_CURVE_SECP256K1`, `API_KEY_CURVE_ED25519` + + + +Optional window (in seconds) indicating how long the API Key should last. + + + + + + A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body. + + +Human-readable name for an Authenticator. + + +Challenge presented for authentication purposes. + + + attestation field + + +The cbor encoded then base64 url encoded id of the credential. + + +A base64 url encoded payload containing metadata about the signing context and the challenge. + + +A base64 url encoded payload containing authenticator data and any attestation the webauthn provider chooses. + + + The type of authenticator transports. + + +item field + +Enum options: `AUTHENTICATOR_TRANSPORT_BLE`, `AUTHENTICATOR_TRANSPORT_INTERNAL`, `AUTHENTICATOR_TRANSPORT_NFC`, `AUTHENTICATOR_TRANSPORT_USB`, `AUTHENTICATOR_TRANSPORT_HYBRID` + + + + + + + + + + + + + A list of Oauth providers. This field, if not needed, should be an empty array in your request body. + + +Human-readable name to identify a Provider. + + +Base64 encoded OIDC token + + + + + + + + +The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users + + + wallet field + + +Human-readable name for a Wallet. + + + A list of wallet Accounts. This field, if not needed, should be an empty array in your request body. + + +curve field + +Enum options: `CURVE_SECP256K1`, `CURVE_ED25519`, `CURVE_P256` + + + +pathFormat field + +Enum options: `PATH_FORMAT_BIP32` + + + +Path used to generate a wallet Account. + + +addressFormat field + +Enum options: `ADDRESS_FORMAT_UNCOMPRESSED`, `ADDRESS_FORMAT_COMPRESSED`, `ADDRESS_FORMAT_ETHEREUM`, `ADDRESS_FORMAT_SOLANA`, `ADDRESS_FORMAT_COSMOS`, `ADDRESS_FORMAT_TRON`, `ADDRESS_FORMAT_SUI`, `ADDRESS_FORMAT_APTOS`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2PKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2SH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WSH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2TR`, `ADDRESS_FORMAT_SEI`, `ADDRESS_FORMAT_XLM`, `ADDRESS_FORMAT_DOGE_MAINNET`, `ADDRESS_FORMAT_DOGE_TESTNET`, `ADDRESS_FORMAT_TON_V3R2`, `ADDRESS_FORMAT_TON_V4R2`, `ADDRESS_FORMAT_TON_V5R1`, `ADDRESS_FORMAT_XRP`, `ADDRESS_FORMAT_SPARK_MAINNET`, `ADDRESS_FORMAT_SPARK_REGTEST` + + + +Optional human-readable name for the account. + + + + + +Length of mnemonic to generate the Wallet seed. Defaults to 12. Accepted values: 12, 15, 18, 21, 24. + + + + + +Disable email recovery for the sub-organization + + +Disable email auth for the sub-organization + + + + + + deletePrivateKeysIntent field + + + List of unique identifiers for private keys within an organization + + +item field + + + + + +Optional parameter for deleting the private keys, even if any have not been previously exported. If they have been exported, this field is ignored. + + + + + + deleteWalletsIntent field + + + List of unique identifiers for wallets within an organization + + +item field + + + + + +Optional parameter for deleting the wallets, even if any have not been previously exported. If they have been exported, this field is ignored. + + + + + + createReadWriteSessionIntentV2 field + + +Client-side public key generated by the user, to which the read write session bundle (credentials) will be encrypted. + + +Optional unique identifier for a given User. If none provided, the read write session will be created for the user who is making the request. + + +Optional human-readable name for an API Key. If none provided, default to Read Write Session - <Timestamp> + + +Expiration window (in seconds) indicating how long the API key is valid for. If not provided, a default of 15 minutes will be used. + + +Invalidate all other previously generated ReadWriteSession API keys + + + + + + deleteSubOrganizationIntent field + + +Sub-organization deletion, by default, requires associated wallets and private keys to be exported for security reasons. Set this boolean to true to force sub-organization deletion even if some wallets or private keys within it have not been exported yet. Default: false. + + + + + + initOtpAuthIntent field + + +Enum to specify whether to send OTP via SMS or email + + +Email or phone number to send the OTP code to + + + emailCustomization field + + +The name of the application. + + +A URL pointing to a logo in PNG format. Note this logo will be resized to fit into 340px x 124px. + + +A template for the URL to be used in a magic link button, e.g. `https://dapp.xyz/%s`. The auth bundle will be interpolated into the `%s`. + + +JSON object containing key/value pairs to be used with custom templates. + + +Unique identifier for a given Email Template. If not specified, the default is the most recent Email Template. + + + + + + smsCustomization field + + +Template containing references to .OtpCode i.e Your OTP is \{\{.OtpCode\}\} + + + + + +Optional client-generated user identifier to enable per-user rate limiting for SMS auth. We recommend using a hash of the client-side IP address. + + +Optional custom email address from which to send the OTP email + + +Optional custom sender name for use with sendFromEmailAddress; if left empty, will default to 'Notifications' + + +Optional custom email address to use as reply-to + + + + + + otpAuthIntent field + + +ID representing the result of an init OTP activity. + + +OTP sent out to a user's contact (email or SMS) + + +Client-side public key generated by the user, to which the OTP bundle (credentials) will be encrypted. + + +Optional human-readable name for an API Key. If none provided, default to OTP Auth - <Timestamp> + + +Expiration window (in seconds) indicating how long the API key is valid for. If not provided, a default of 15 minutes will be used. + + +Invalidate all other previously generated OTP Auth API keys + + + + + + createSubOrganizationIntentV7 field + + +Name for this sub-organization + + + Root users to create within this sub-organization + + +Human-readable name for a User. + + +The user's email address. + + +The user's phone number in E.164 format e.g. +13214567890 + + + A list of API Key parameters. This field, if not needed, should be an empty array in your request body. + + +Human-readable name for an API Key. + + +The public component of a cryptographic key pair used to sign messages and transactions. + + +curveType field + +Enum options: `API_KEY_CURVE_P256`, `API_KEY_CURVE_SECP256K1`, `API_KEY_CURVE_ED25519` + + + +Optional window (in seconds) indicating how long the API Key should last. + + + + + + A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body. + + +Human-readable name for an Authenticator. + + +Challenge presented for authentication purposes. + + + attestation field + + +The cbor encoded then base64 url encoded id of the credential. + + +A base64 url encoded payload containing metadata about the signing context and the challenge. + + +A base64 url encoded payload containing authenticator data and any attestation the webauthn provider chooses. + + + The type of authenticator transports. + + +item field + +Enum options: `AUTHENTICATOR_TRANSPORT_BLE`, `AUTHENTICATOR_TRANSPORT_INTERNAL`, `AUTHENTICATOR_TRANSPORT_NFC`, `AUTHENTICATOR_TRANSPORT_USB`, `AUTHENTICATOR_TRANSPORT_HYBRID` + + + + + + + + + + + + + A list of Oauth providers. This field, if not needed, should be an empty array in your request body. + + +Human-readable name to identify a Provider. + + +Base64 encoded OIDC token + + + + + + + + +The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users + + + wallet field + + +Human-readable name for a Wallet. + + + A list of wallet Accounts. This field, if not needed, should be an empty array in your request body. + + +curve field + +Enum options: `CURVE_SECP256K1`, `CURVE_ED25519`, `CURVE_P256` + + + +pathFormat field + +Enum options: `PATH_FORMAT_BIP32` + + + +Path used to generate a wallet Account. + + +addressFormat field + +Enum options: `ADDRESS_FORMAT_UNCOMPRESSED`, `ADDRESS_FORMAT_COMPRESSED`, `ADDRESS_FORMAT_ETHEREUM`, `ADDRESS_FORMAT_SOLANA`, `ADDRESS_FORMAT_COSMOS`, `ADDRESS_FORMAT_TRON`, `ADDRESS_FORMAT_SUI`, `ADDRESS_FORMAT_APTOS`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2PKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2SH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WSH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2TR`, `ADDRESS_FORMAT_SEI`, `ADDRESS_FORMAT_XLM`, `ADDRESS_FORMAT_DOGE_MAINNET`, `ADDRESS_FORMAT_DOGE_TESTNET`, `ADDRESS_FORMAT_TON_V3R2`, `ADDRESS_FORMAT_TON_V4R2`, `ADDRESS_FORMAT_TON_V5R1`, `ADDRESS_FORMAT_XRP`, `ADDRESS_FORMAT_SPARK_MAINNET`, `ADDRESS_FORMAT_SPARK_REGTEST` + + + +Optional human-readable name for the account. + + + + + +Length of mnemonic to generate the Wallet seed. Defaults to 12. Accepted values: 12, 15, 18, 21, 24. + + + + + +Disable email recovery for the sub-organization + + +Disable email auth for the sub-organization + + +Disable OTP SMS auth for the sub-organization + + +Disable OTP email auth for the sub-organization + + +Signed JWT containing a unique id, expiry, verification type, contact + + + clientSignature field + + +The public component of a cryptographic key pair used to create the signature. + + +scheme field + +Enum options: `CLIENT_SIGNATURE_SCHEME_API_P256` + + + +The message that was signed. + + +The cryptographic signature over the message. + + + + + + + + + updateWalletIntent field + + +Unique identifier for a given Wallet. + + +Human-readable name for a Wallet. + + + + + + updatePolicyIntentV2 field + + +Unique identifier for a given Policy. + + +Human-readable name for a Policy. + + +policyEffect field + +Enum options: `EFFECT_ALLOW`, `EFFECT_DENY` + + + +The condition expression that triggers the Effect (optional). + + +The consensus expression that triggers the Effect (optional). + + +Accompanying notes for a Policy (optional). + + +The time expression that triggers the Effect (optional). + + + + + + createUsersIntentV3 field + + + A list of Users. + + +Human-readable name for a User. + + +The user's email address. + + +The user's phone number in E.164 format e.g. +13214567890 + + + A list of API Key parameters. This field, if not needed, should be an empty array in your request body. + + +Human-readable name for an API Key. + + +The public component of a cryptographic key pair used to sign messages and transactions. + + +curveType field + +Enum options: `API_KEY_CURVE_P256`, `API_KEY_CURVE_SECP256K1`, `API_KEY_CURVE_ED25519` + + + +Optional window (in seconds) indicating how long the API Key should last. + + + + + + A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body. + + +Human-readable name for an Authenticator. + + +Challenge presented for authentication purposes. + + + attestation field + + +The cbor encoded then base64 url encoded id of the credential. + + +A base64 url encoded payload containing metadata about the signing context and the challenge. + + +A base64 url encoded payload containing authenticator data and any attestation the webauthn provider chooses. + + + The type of authenticator transports. + + +item field + +Enum options: `AUTHENTICATOR_TRANSPORT_BLE`, `AUTHENTICATOR_TRANSPORT_INTERNAL`, `AUTHENTICATOR_TRANSPORT_NFC`, `AUTHENTICATOR_TRANSPORT_USB`, `AUTHENTICATOR_TRANSPORT_HYBRID` + + + + + + + + + + + + + A list of Oauth providers. This field, if not needed, should be an empty array in your request body. + + +Human-readable name to identify a Provider. + + +Base64 encoded OIDC token + + + + + + A list of User Tag IDs. This field, if not needed, should be an empty array in your request body. + + +item field + + + + + + + + + + + + initOtpAuthIntentV2 field + + +Enum to specify whether to send OTP via SMS or email + + +Email or phone number to send the OTP code to + + +Optional length of the OTP code. Default = 9 + + + emailCustomization field + + +The name of the application. + + +A URL pointing to a logo in PNG format. Note this logo will be resized to fit into 340px x 124px. + + +A template for the URL to be used in a magic link button, e.g. `https://dapp.xyz/%s`. The auth bundle will be interpolated into the `%s`. + + +JSON object containing key/value pairs to be used with custom templates. + + +Unique identifier for a given Email Template. If not specified, the default is the most recent Email Template. + + + + + + smsCustomization field + + +Template containing references to .OtpCode i.e Your OTP is \{\{.OtpCode\}\} + + + + + +Optional client-generated user identifier to enable per-user rate limiting for SMS auth. We recommend using a hash of the client-side IP address. + + +Optional custom email address from which to send the OTP email + + +Optional flag to specify if the OTP code should be alphanumeric (Crockford’s Base32). Default = true + + +Optional custom sender name for use with sendFromEmailAddress; if left empty, will default to 'Notifications' + + +Optional custom email address to use as reply-to + + + + + + initOtpIntent field + + +Whether to send OTP via SMS or email. Possible values: OTP_TYPE_SMS, OTP_TYPE_EMAIL + + +Email or phone number to send the OTP code to + + +Optional length of the OTP code. Default = 9 + + + emailCustomization field + + +The name of the application. + + +A URL pointing to a logo in PNG format. Note this logo will be resized to fit into 340px x 124px. + + +A template for the URL to be used in a magic link button, e.g. `https://dapp.xyz/%s`. The auth bundle will be interpolated into the `%s`. + + +JSON object containing key/value pairs to be used with custom templates. + + +Unique identifier for a given Email Template. If not specified, the default is the most recent Email Template. + + + + + + smsCustomization field + + +Template containing references to .OtpCode i.e Your OTP is \{\{.OtpCode\}\} + + + + + +Optional client-generated user identifier to enable per-user rate limiting for SMS auth. We recommend using a hash of the client-side IP address. + + +Optional custom email address from which to send the OTP email + + +Optional flag to specify if the OTP code should be alphanumeric (Crockford’s Base32). Default = true + + +Optional custom sender name for use with sendFromEmailAddress; if left empty, will default to 'Notifications' + + +Expiration window (in seconds) indicating how long the OTP is valid for. If not provided, a default of 5 minutes will be used. Maximum value is 600 seconds (10 minutes) + + +Optional custom email address to use as reply-to + + + + + + verifyOtpIntent field + + +ID representing the result of an init OTP activity. + + +OTP sent out to a user's contact (email or SMS) + + +Expiration window (in seconds) indicating how long the verification token is valid for. If not provided, a default of 1 hour will be used. Maximum value is 86400 seconds (24 hours) + + +Client-side public key generated by the user, which will be added to the JWT response and verified in subsequent requests via a client proof signature + + + + + + otpLoginIntent field + + +Signed JWT containing a unique id, expiry, verification type, contact + + +Client-side public key generated by the user, which will be conditionally added to org data based on the validity of the verification token + + +Expiration window (in seconds) indicating how long the Session is valid for. If not provided, a default of 15 minutes will be used. + + +Invalidate all other previously generated Login API keys + + + clientSignature field + + +The public component of a cryptographic key pair used to create the signature. + + +scheme field + +Enum options: `CLIENT_SIGNATURE_SCHEME_API_P256` + + + +The message that was signed. + + +The cryptographic signature over the message. + + + + + +Optional session profile ID to specify which Session Profile to use for this login. If not provided, the default read/write session will be used. + + + + + + stampLoginIntent field + + +Client-side public key generated by the user, which will be conditionally added to org data based on the passkey stamp associated with this request + + +Expiration window (in seconds) indicating how long the Session is valid for. If not provided, a default of 15 minutes will be used. + + +Invalidate all other previously generated Login API keys + + +Optional session profile ID to specify which Session Profile to use for this login. If not provided, the default read/write session will be used. + + + + + + oauthLoginIntent field + + +Base64 encoded OIDC token + + +Client-side public key generated by the user, which will be conditionally added to org data based on the validity of the oidc token associated with this request + + +Expiration window (in seconds) indicating how long the Session is valid for. If not provided, a default of 15 minutes will be used. + + +Invalidate all other previously generated Login API keys + + +Optional session profile ID to specify which Session Profile to use for this login. If not provided, the default read/write session will be used. + + + + + + updateUserNameIntent field + + +Unique identifier for a given User. + + +Human-readable name for a User. + + + + + + updateUserEmailIntent field + + +Unique identifier for a given User. + + +The user's email address. Setting this to an empty string will remove the user's email. + + +Signed JWT containing a unique id, expiry, verification type, contact + + + + + + updateUserPhoneNumberIntent field + + +Unique identifier for a given User. + + +The user's phone number in E.164 format e.g. +13214567890. Setting this to an empty string will remove the user's phone number. + + +Signed JWT containing a unique id, expiry, verification type, contact + + + + + + initFiatOnRampIntent field + + +onrampProvider field + +Enum options: `FIAT_ON_RAMP_PROVIDER_COINBASE`, `FIAT_ON_RAMP_PROVIDER_MOONPAY` + + + +Destination wallet address for the buy transaction. + + +network field + +Enum options: `FIAT_ON_RAMP_BLOCKCHAIN_NETWORK_BITCOIN`, `FIAT_ON_RAMP_BLOCKCHAIN_NETWORK_ETHEREUM`, `FIAT_ON_RAMP_BLOCKCHAIN_NETWORK_SOLANA`, `FIAT_ON_RAMP_BLOCKCHAIN_NETWORK_BASE` + + + +cryptoCurrencyCode field + +Enum options: `FIAT_ON_RAMP_CRYPTO_CURRENCY_BTC`, `FIAT_ON_RAMP_CRYPTO_CURRENCY_ETH`, `FIAT_ON_RAMP_CRYPTO_CURRENCY_SOL`, `FIAT_ON_RAMP_CRYPTO_CURRENCY_USDC` + + + +fiatCurrencyCode field + +Enum options: `FIAT_ON_RAMP_CURRENCY_AUD`, `FIAT_ON_RAMP_CURRENCY_BGN`, `FIAT_ON_RAMP_CURRENCY_BRL`, `FIAT_ON_RAMP_CURRENCY_CAD`, `FIAT_ON_RAMP_CURRENCY_CHF`, `FIAT_ON_RAMP_CURRENCY_COP`, `FIAT_ON_RAMP_CURRENCY_CZK`, `FIAT_ON_RAMP_CURRENCY_DKK`, `FIAT_ON_RAMP_CURRENCY_DOP`, `FIAT_ON_RAMP_CURRENCY_EGP`, `FIAT_ON_RAMP_CURRENCY_EUR`, `FIAT_ON_RAMP_CURRENCY_GBP`, `FIAT_ON_RAMP_CURRENCY_HKD`, `FIAT_ON_RAMP_CURRENCY_IDR`, `FIAT_ON_RAMP_CURRENCY_ILS`, `FIAT_ON_RAMP_CURRENCY_JOD`, `FIAT_ON_RAMP_CURRENCY_KES`, `FIAT_ON_RAMP_CURRENCY_KWD`, `FIAT_ON_RAMP_CURRENCY_LKR`, `FIAT_ON_RAMP_CURRENCY_MXN`, `FIAT_ON_RAMP_CURRENCY_NGN`, `FIAT_ON_RAMP_CURRENCY_NOK`, `FIAT_ON_RAMP_CURRENCY_NZD`, `FIAT_ON_RAMP_CURRENCY_OMR`, `FIAT_ON_RAMP_CURRENCY_PEN`, `FIAT_ON_RAMP_CURRENCY_PLN`, `FIAT_ON_RAMP_CURRENCY_RON`, `FIAT_ON_RAMP_CURRENCY_SEK`, `FIAT_ON_RAMP_CURRENCY_THB`, `FIAT_ON_RAMP_CURRENCY_TRY`, `FIAT_ON_RAMP_CURRENCY_TWD`, `FIAT_ON_RAMP_CURRENCY_USD`, `FIAT_ON_RAMP_CURRENCY_VND`, `FIAT_ON_RAMP_CURRENCY_ZAR` + + + +Specifies a preset fiat amount for the transaction, e.g., '100'. Must be greater than '20'. If not provided, the user will be prompted to enter an amount. + + +paymentMethod field + +Enum options: `FIAT_ON_RAMP_PAYMENT_METHOD_CREDIT_DEBIT_CARD`, `FIAT_ON_RAMP_PAYMENT_METHOD_APPLE_PAY`, `FIAT_ON_RAMP_PAYMENT_METHOD_GBP_BANK_TRANSFER`, `FIAT_ON_RAMP_PAYMENT_METHOD_GBP_OPEN_BANKING_PAYMENT`, `FIAT_ON_RAMP_PAYMENT_METHOD_GOOGLE_PAY`, `FIAT_ON_RAMP_PAYMENT_METHOD_SEPA_BANK_TRANSFER`, `FIAT_ON_RAMP_PAYMENT_METHOD_PIX_INSTANT_PAYMENT`, `FIAT_ON_RAMP_PAYMENT_METHOD_PAYPAL`, `FIAT_ON_RAMP_PAYMENT_METHOD_VENMO`, `FIAT_ON_RAMP_PAYMENT_METHOD_MOONPAY_BALANCE`, `FIAT_ON_RAMP_PAYMENT_METHOD_CRYPTO_ACCOUNT`, `FIAT_ON_RAMP_PAYMENT_METHOD_FIAT_WALLET`, `FIAT_ON_RAMP_PAYMENT_METHOD_ACH_BANK_ACCOUNT` + + + +ISO 3166-1 two-digit country code for Coinbase representing the purchasing user’s country of residence, e.g., US, GB. + + +ISO 3166-2 two-digit country subdivision code for Coinbase representing the purchasing user’s subdivision of residence within their country, e.g. NY. Required if country_code=US. + + +Optional flag to indicate whether to use the sandbox mode to simulate transactions for the on-ramp provider. Default is false. + + +Optional MoonPay Widget URL to sign when using MoonPay client SDKs with URL Signing enabled. + + + + + + createSmartContractInterfaceIntent field + + +Corresponding contract address or program ID + + +ABI/IDL as a JSON string. Limited to 400kb + + +type field + +Enum options: `SMART_CONTRACT_INTERFACE_TYPE_ETHEREUM`, `SMART_CONTRACT_INTERFACE_TYPE_SOLANA` + + + +Human-readable name for a Smart Contract Interface. + + +Notes for a Smart Contract Interface. + + + + + + deleteSmartContractInterfaceIntent field + + +The ID of a Smart Contract Interface intended for deletion. + + + + + +enableAuthProxyIntent field + + +disableAuthProxyIntent field + + + updateAuthProxyConfigIntent field + + + Updated list of allowed origins for CORS. + + +item field + + + + + + Updated list of allowed proxy authentication methods. + + +item field + + + + + +Custom 'from' address for auth-related emails. + + +Custom reply-to address for auth-related emails. + + +Template ID for email-auth messages. + + +Template ID for OTP SMS messages. + + + emailCustomizationParams field + + +The name of the application. + + +A URL pointing to a logo in PNG format. Note this logo will be resized to fit into 340px x 124px. + + +A template for the URL to be used in a magic link button, e.g. `https://dapp.xyz/%s`. The auth bundle will be interpolated into the `%s`. + + +JSON object containing key/value pairs to be used with custom templates. + + +Unique identifier for a given Email Template. If not specified, the default is the most recent Email Template. + + + + + + smsCustomizationParams field + + +Template containing references to .OtpCode i.e Your OTP is \{\{.OtpCode\}\} + + + + + + walletKitSettings field + + + List of enabled social login providers (e.g., 'apple', 'google', 'facebook') + + +item field + + + + + +Mapping of social login providers to their Oauth client IDs. + + +Oauth redirect URL to be used for social login flows. + + + + + +OTP code lifetime in seconds. + + +Verification-token lifetime in seconds. + + +Session lifetime in seconds. + + +Enable alphanumeric OTP codes. + + +Desired OTP code length (6–9). + + +Custom 'from' email sender for auth-related emails. + + +Verification token required for get account with PII (email/phone number). Default false. + + + Whitelisted OAuth client IDs for social account linking. When a user authenticates via a social provider with an email matching an existing account, the accounts will be linked if the client ID is in this list and the issuer is considered a trusted provider. + + +item field + + + + + +Whether captcha verification is required on sign up & otp init. + + + + + + createOauth2CredentialIntent field + + +provider field + +Enum options: `OAUTH2_PROVIDER_X`, `OAUTH2_PROVIDER_DISCORD` + + + +The Client ID issued by the OAuth 2.0 provider + + +The client secret issued by the OAuth 2.0 provider encrypted to the TLS Fetcher quorum key + + + + + + updateOauth2CredentialIntent field + + +The ID of the OAuth 2.0 credential to update + + +provider field + +Enum options: `OAUTH2_PROVIDER_X`, `OAUTH2_PROVIDER_DISCORD` + + + +The Client ID issued by the OAuth 2.0 provider + + +The client secret issued by the OAuth 2.0 provider encrypted to the TLS Fetcher quorum key + + + + + + deleteOauth2CredentialIntent field + + +The ID of the OAuth 2.0 credential to delete + + + + + + oauth2AuthenticateIntent field + + +The OAuth 2.0 credential id whose client_id and client_secret will be used in the OAuth 2.0 flow + + +The auth_code provided by the OAuth 2.0 provider to the end user to be exchanged for a Bearer token in the OAuth 2.0 flow + + +The URI the user is redirected to after they have authenticated with the OAuth 2.0 provider + + +The code verifier used by OAuth 2.0 PKCE providers + + +A nonce value set to sha256(publicKey), used to bind the OIDC token to a specific public key + + +An optional P256 public key to which, if provided, the bearer token will be encrypted and returned via the `encrypted_bearer_token` claim of the OIDC Token + + + + + + deleteWalletAccountsIntent field + + + List of unique identifiers for wallet accounts within an organization + + +item field + + + + + +Optional parameter for deleting the wallet accounts, even if any have not been previously exported. If they have been exported, this field is ignored. + + + + + + deletePoliciesIntent field + + + List of unique identifiers for policies within an organization + + +item field + + + + + + + + + ethSendRawTransactionIntent field + + +The raw, signed transaction to be sent. + + +CAIP-2 chain ID (e.g., 'eip155:1' for Ethereum mainnet). + +Enum options: `eip155:1`, `eip155:11155111`, `eip155:8453`, `eip155:84532`, `eip155:137`, `eip155:80002`, `eip155:56`, `eip155:97`, `eip155:10`, `eip155:11155420`, `eip155:143`, `eip155:10143`, `eip155:42161`, `eip155:4217`, `eip155:42431`, `eip155:421614` + + + + + + + ethSendTransactionIntent field + + +A wallet or private key address to sign with. This does not support private key IDs. + + +Whether to sponsor this transaction via Gas Station. + + +CAIP-2 chain ID (e.g., 'eip155:1' for Ethereum mainnet). + +Enum options: `eip155:1`, `eip155:11155111`, `eip155:8453`, `eip155:84532`, `eip155:137`, `eip155:80002`, `eip155:56`, `eip155:97`, `eip155:10`, `eip155:11155420`, `eip155:143`, `eip155:10143`, `eip155:42161`, `eip155:4217`, `eip155:42431`, `eip155:421614` + + + +Recipient address as a hex string with 0x prefix. + + +Amount of native asset to send in wei. + + +Hex-encoded call data for contract interactions. + + +Transaction nonce, for EIP-1559 and Turnkey Gas Station authorizations. + + +Maximum amount of gas to use for this transaction, for EIP-1559 transactions. + + +Maximum total fee per gas unit (base fee + priority fee) in wei. Required for non-sponsored (EIP-1559) transactions. Not used for sponsored transactions. + + +Maximum priority fee (tip) per gas unit in wei. Required for non-sponsored (EIP-1559) transactions. Not used for sponsored transactions. + + +Unix timestamp in seconds for EIP-712 execution deadline. Only used when sponsor=true. + + +The gas station delegate contract nonce. Only used when sponsor=true. Include this if you want maximal security posture. + + + + + + createFiatOnRampCredentialIntent field + + +onrampProvider field + +Enum options: `FIAT_ON_RAMP_PROVIDER_COINBASE`, `FIAT_ON_RAMP_PROVIDER_MOONPAY` + + + +Project ID for the on-ramp provider. Some providers, like Coinbase, require this additional identifier + + +Publishable API key for the on-ramp provider + + +Secret API key for the on-ramp provider encrypted to our on-ramp encryption public key + + +Private API key for the on-ramp provider encrypted to our on-ramp encryption public key. Some providers, like Coinbase, require this additional key. + + +If the on-ramp credential is a sandbox credential + + + + + + updateFiatOnRampCredentialIntent field + + +The ID of the fiat on-ramp credential to update + + +onrampProvider field + +Enum options: `FIAT_ON_RAMP_PROVIDER_COINBASE`, `FIAT_ON_RAMP_PROVIDER_MOONPAY` + + + +Project ID for the on-ramp provider. Some providers, like Coinbase, require this additional identifier. + + +Publishable API key for the on-ramp provider + + +Secret API key for the on-ramp provider encrypted to our on-ramp encryption public key + + +Private API key for the on-ramp provider encrypted to our on-ramp encryption public key. Some providers, like Coinbase, require this additional key. + + + + + + deleteFiatOnRampCredentialIntent field + + +The ID of the fiat on-ramp credential to delete + + + + + + emailAuthIntentV3 field + + +Email of the authenticating user. + + +Client-side public key generated by the user, to which the email auth bundle (credentials) will be encrypted. + + +Optional human-readable name for an API Key. If none provided, default to Email Auth - <Timestamp> + + +Expiration window (in seconds) indicating how long the API key is valid for. If not provided, a default of 15 minutes will be used. + + + emailCustomization field + + +The name of the application. This field is required and will be used in email notifications if an email template is not provided. + + +A URL pointing to a logo in PNG format. Note this logo will be resized to fit into 340px x 124px. + + +A template for the URL to be used in a magic link button, e.g. `https://dapp.xyz/%s`. The auth bundle will be interpolated into the `%s`. + + +JSON object containing key/value pairs to be used with custom templates. + + +Unique identifier for a given Email Template. If not specified, the default is the most recent Email Template. + + + + + +Invalidate all other previously generated Email Auth API keys + + +Optional custom email address from which to send the email + + +Optional custom sender name for use with sendFromEmailAddress; if left empty, will default to 'Notifications' + + +Optional custom email address to use as reply-to + + + + + + initUserEmailRecoveryIntentV2 field + + +Email of the user starting recovery + + +Client-side public key generated by the user, to which the recovery bundle will be encrypted. + + +Expiration window (in seconds) indicating how long the recovery credential is valid for. If not provided, a default of 15 minutes will be used. + + + emailCustomization field + + +The name of the application. This field is required and will be used in email notifications if an email template is not provided. + + +A URL pointing to a logo in PNG format. Note this logo will be resized to fit into 340px x 124px. + + +A template for the URL to be used in a magic link button, e.g. `https://dapp.xyz/%s`. The auth bundle will be interpolated into the `%s`. + + +JSON object containing key/value pairs to be used with custom templates. + + +Unique identifier for a given Email Template. If not specified, the default is the most recent Email Template. + + + + + +Optional custom email address from which to send the OTP email + + +Optional custom sender name for use with sendFromEmailAddress; if left empty, will default to 'Notifications' + + +Optional custom email address to use as reply-to + + + + + + initOtpIntentV2 field + + +Whether to send OTP via SMS or email. Possible values: OTP_TYPE_SMS, OTP_TYPE_EMAIL + + +Email or phone number to send the OTP code to + + +Optional length of the OTP code. Default = 9 + + +The name of the application. This field is required and will be used in email notifications if an email template is not provided. + + + emailCustomization field + + +A URL pointing to a logo in PNG format. Note this logo will be resized to fit into 340px x 124px. + + +A template for the URL to be used in a magic link button, e.g. `https://dapp.xyz/%s`. The auth bundle will be interpolated into the `%s`. + + +JSON object containing key/value pairs to be used with custom templates. + + +Unique identifier for a given Email Template. If not specified, the default is the most recent Email Template. + + + + + + smsCustomization field + + +Template containing references to .OtpCode i.e Your OTP is \{\{.OtpCode\}\} + + + + + +Optional client-generated user identifier to enable per-user rate limiting for SMS auth. We recommend using a hash of the client-side IP address. + + +Optional custom email address from which to send the OTP email + + +Optional flag to specify if the OTP code should be alphanumeric (Crockford’s Base32). Default = true + + +Optional custom sender name for use with sendFromEmailAddress; if left empty, will default to 'Notifications' + + +Expiration window (in seconds) indicating how long the OTP is valid for. If not provided, a default of 5 minutes will be used. Maximum value is 600 seconds (10 minutes) + + +Optional custom email address to use as reply-to + + + + + + initOtpAuthIntentV3 field + + +Whether to send OTP via SMS or email. Possible values: OTP_TYPE_SMS, OTP_TYPE_EMAIL + + +Email or phone number to send the OTP code to + + +Optional length of the OTP code. Default = 9 + + +The name of the application. This field is required and will be used in email notifications if an email template is not provided. + + + emailCustomization field + + +A URL pointing to a logo in PNG format. Note this logo will be resized to fit into 340px x 124px. + + +A template for the URL to be used in a magic link button, e.g. `https://dapp.xyz/%s`. The auth bundle will be interpolated into the `%s`. + + +JSON object containing key/value pairs to be used with custom templates. + + +Unique identifier for a given Email Template. If not specified, the default is the most recent Email Template. + + + + + + smsCustomization field + + +Template containing references to .OtpCode i.e Your OTP is \{\{.OtpCode\}\} + + + + + +Optional client-generated user identifier to enable per-user rate limiting for SMS auth. We recommend using a hash of the client-side IP address. + + +Optional custom email address from which to send the OTP email + + +Optional flag to specify if the OTP code should be alphanumeric (Crockford’s Base32). Default = true + + +Optional custom sender name for use with sendFromEmailAddress; if left empty, will default to 'Notifications' + + +Expiration window (in seconds) indicating how long the OTP is valid for. If not provided, a default of 5 minutes will be used. Maximum value is 600 seconds (10 minutes) + + +Optional custom email address to use as reply-to + + + + + + upsertGasUsageConfigIntent field + + +Gas sponsorship USD limit for the billing organization window. + + +Gas sponsorship USD limit for sub-organizations under the billing organization. + + +Rolling sponsorship window duration, expressed in minutes. This value can't exceed 30 days (43200 minutes). + + +Whether gas sponsorship is enabled for the organization. + + + solanaConfig field + + +Whether Solana rent prefunding is enabled for the organization. When omitted, the existing rent-prefund state is left unchanged. + + + + + + + + + createTvcAppIntent field + + +The name of the new TVC application + + +Quorum public key to use for this application + + +Unique identifier for an existing TVC operator set to use as the Manifest Set for this TVC application. If left empty, a new Manifest Set configuration is required + + + manifestSetParams field + + +Short description for this new operator set + + + Operators to create as part of this new operator set + + +The name for this new operator + + +Public key for this operator + + + + + + Existing operators to use as part of this new operator set + + +item field + + + + + +The threshold of operators needed to reach consensus in this new Operator Set + + + + + +Unique identifier for an existing TVC operator set to use as the Share Set for this TVC application. If left empty, a new Share Set configuration is required + + + shareSetParams field + + +Short description for this new operator set + + + Operators to create as part of this new operator set + + +The name for this new operator + + +Public key for this operator + + + + + + Existing operators to use as part of this new operator set + + +item field + + + + + +The threshold of operators needed to reach consensus in this new Operator Set + + + + + +Enables network egress for this TVC app. Default if not provided: false. + + +When true, this app may create deployments in debug-mode. Debug-mode deployments expose logs and emit zero'd attestation PCRs, so remote attestation cannot succeed. Cannot be changed after app creation. Setting this true means the app's quorum key is considered permanently insecure, and a new app with a fresh quorum key must be created. Default if not provided: false. + + + + + + createTvcDeploymentIntent field + + +The unique identifier of the to-be-deployed TVC application + + +The QuorumOS version to use to deploy this application + + +URL of the container containing the pivot binary + + +Location of the binary in the pivot container + + + Arguments to pass to the pivot binary at startup. Encoded as a list of strings, for example ["--foo", "bar"] + + +item field + + + + + +Digest of the pivot binary in the pivot container. This value will be inserted in the QOS manifest to ensure application integrity. + + +Optional nonce to ensure uniqueness of the deployment manifest. If not provided, it defaults to the current Unix timestamp in seconds. + + +Optional encrypted pull secret to authorize Turnkey to pull the pivot container image. If your image is public, leave this empty. + + +Optional flag to indicate whether to deploy the TVC app in debug mode, which includes additional logging and debugging tools. Default is false. + + +healthCheckType field + +Enum options: `TVC_HEALTH_CHECK_TYPE_HTTP`, `TVC_HEALTH_CHECK_TYPE_GRPC` + + + +Port to use for health checks. + + +Port to use for public ingress. + + +Optional desired replica count for this deployment. + + + + + + createTvcManifestApprovalsIntent field + + +Unique identifier of the TVC deployment to approve + + + List of manifest approvals + + +Unique identifier of the operator providing this approval + + +Signature from the operator approving the manifest + + + + + + + + + solSendTransactionIntent field + + +Base64-encoded serialized unsigned Solana transaction + + +A wallet or private key address to sign with. This does not support private key IDs. + + +Whether to sponsor this transaction via Gas Station. + + +CAIP-2 chain ID (e.g., 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' for Solana mainnet). Human-readable Solana aliases ('solana:mainnet', 'solana:devnet') are also accepted and normalized to canonical CAIP-2 values. + +Enum options: `solana:mainnet`, `solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp`, `solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d`, `solana:devnet`, `solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1`, `solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1wcaWoxPkrZBG` + + + +user-provided blockhash for replay protection / deadline control. If omitted and sponsor=true, we fetch a fresh blockhash during execution + + + + + + initOtpIntentV3 field + + +Whether to send OTP via SMS or email. Possible values: OTP_TYPE_SMS, OTP_TYPE_EMAIL + + +Email or phone number to send the OTP code to + + +The name of the application. + + +Optional length of the OTP code. Default = 9 + + + emailCustomization field + + +A URL pointing to a logo in PNG format. Note this logo will be resized to fit into 340px x 124px. + + +A template for the URL to be used in a magic link button, e.g. `https://dapp.xyz/%s`. The auth bundle will be interpolated into the `%s`. + + +JSON object containing key/value pairs to be used with custom templates. + + +Unique identifier for a given Email Template. If not specified, the default is the most recent Email Template. + + + + + + smsCustomization field + + +Template containing references to .OtpCode i.e Your OTP is \{\{.OtpCode\}\} + + + + + +Optional client-generated user identifier to enable per-user rate limiting for SMS auth. We recommend using a hash of the client-side IP address. + + +Optional custom email address from which to send the OTP email + + +Optional flag to specify if the OTP code should be alphanumeric (Crockford’s Base32). If set to false, OTP code will only be numeric. Default = true + + +Optional custom sender name for use with sendFromEmailAddress; if left empty, will default to 'Notifications' + + +Expiration window (in seconds) indicating how long the OTP is valid for. If not provided, a default of 5 minutes will be used. Maximum value is 600 seconds (10 minutes) + + +Optional custom email address to use as reply-to + + + + + + verifyOtpIntentV2 field + + +UUID representing an OTP flow. A new UUID is created for each init OTP activity. + + +Encrypted bundle containing the OTP code and a client-generated public key. Turnkey's secure enclaves will decrypt this bundle, verify the OTP code, and issue a new Verification Token. Encrypted using the target encryption key provided in the INIT_OTP activity result. + + +Expiration window (in seconds) indicating how long the verification token is valid for. If not provided, a default of 1 hour will be used. Maximum value is 86400 seconds (24 hours) + + + + + + otpLoginIntentV2 field + + +Signed Verification Token containing a unique id, expiry, verification type, contact + + +Client-side public key generated by the user, used as the session public key upon successful login + + + clientSignature field + + +The public component of a cryptographic key pair used to create the signature. + + +scheme field + +Enum options: `CLIENT_SIGNATURE_SCHEME_API_P256` + + + +The message that was signed. + + +The cryptographic signature over the message. + + + + + +Expiration window (in seconds) indicating how long the Session is valid for. If not provided, a default of 15 minutes will be used. + + +Invalidate all other previously generated Login sessions + + +Optional session profile ID to specify which Session Profile to use for this login. If not provided, the default read/write session will be used. + + + + + + updateOrganizationNameIntent field + + +New name for the Organization. + + + + + + createSubOrganizationIntentV8 field + + +Name for this sub-organization + + + Root users to create within this sub-organization + + +Human-readable name for a User. + + +The user's email address. + + +The user's phone number in E.164 format e.g. +13214567890 + + + A list of API Key parameters. This field, if not needed, should be an empty array in your request body. + + +Human-readable name for an API Key. + + +The public component of a cryptographic key pair used to sign messages and transactions. + + +curveType field + +Enum options: `API_KEY_CURVE_P256`, `API_KEY_CURVE_SECP256K1`, `API_KEY_CURVE_ED25519` + + + +Optional window (in seconds) indicating how long the API Key should last. + + + + + + A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body. + + +Human-readable name for an Authenticator. + + +Challenge presented for authentication purposes. + + + attestation field + + +The cbor encoded then base64 url encoded id of the credential. + + +A base64 url encoded payload containing metadata about the signing context and the challenge. + + +A base64 url encoded payload containing authenticator data and any attestation the webauthn provider chooses. + + + The type of authenticator transports. + + +item field + +Enum options: `AUTHENTICATOR_TRANSPORT_BLE`, `AUTHENTICATOR_TRANSPORT_INTERNAL`, `AUTHENTICATOR_TRANSPORT_NFC`, `AUTHENTICATOR_TRANSPORT_USB`, `AUTHENTICATOR_TRANSPORT_HYBRID` + + + + + + + + + + + + + A list of Oauth providers. This field, if not needed, should be an empty array in your request body. + + +Human-readable name to identify a Provider. + + +Base64 encoded OIDC token + + + oidcClaims field + + +The issuer identifier from the OIDC token (iss claim) + + +The subject identifier from the OIDC token (sub claim) + + +The audience from the OIDC token (aud claim) + + + + + + + + + + + +The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users + + + wallet field + + +Human-readable name for a Wallet. + + + A list of wallet Accounts. This field, if not needed, should be an empty array in your request body. + + +curve field + +Enum options: `CURVE_SECP256K1`, `CURVE_ED25519`, `CURVE_P256` + + + +pathFormat field + +Enum options: `PATH_FORMAT_BIP32` + + + +Path used to generate a wallet Account. + + +addressFormat field + +Enum options: `ADDRESS_FORMAT_UNCOMPRESSED`, `ADDRESS_FORMAT_COMPRESSED`, `ADDRESS_FORMAT_ETHEREUM`, `ADDRESS_FORMAT_SOLANA`, `ADDRESS_FORMAT_COSMOS`, `ADDRESS_FORMAT_TRON`, `ADDRESS_FORMAT_SUI`, `ADDRESS_FORMAT_APTOS`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2PKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2SH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WSH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2TR`, `ADDRESS_FORMAT_SEI`, `ADDRESS_FORMAT_XLM`, `ADDRESS_FORMAT_DOGE_MAINNET`, `ADDRESS_FORMAT_DOGE_TESTNET`, `ADDRESS_FORMAT_TON_V3R2`, `ADDRESS_FORMAT_TON_V4R2`, `ADDRESS_FORMAT_TON_V5R1`, `ADDRESS_FORMAT_XRP`, `ADDRESS_FORMAT_SPARK_MAINNET`, `ADDRESS_FORMAT_SPARK_REGTEST` + + + +Optional human-readable name for the account. + + + + + +Length of mnemonic to generate the Wallet seed. Defaults to 12. Accepted values: 12, 15, 18, 21, 24. + + + + + +Disable email recovery for the sub-organization + + +Disable email auth for the sub-organization + + +Disable OTP SMS auth for the sub-organization + + +Disable OTP email auth for the sub-organization + + +Signed JWT containing a unique id, expiry, verification type, contact + + + clientSignature field + + +The public component of a cryptographic key pair used to create the signature. + + +scheme field + +Enum options: `CLIENT_SIGNATURE_SCHEME_API_P256` + + + +The message that was signed. + + +The cryptographic signature over the message. + + + + + + + + + createOauthProvidersIntentV2 field + + +The ID of the User to add an Oauth provider to + + + A list of Oauth providers. + + +Human-readable name to identify a Provider. + + +Base64 encoded OIDC token + + + oidcClaims field + + +The issuer identifier from the OIDC token (iss claim) + + +The subject identifier from the OIDC token (sub claim) + + +The audience from the OIDC token (aud claim) + + + + + + + + + + + + createUsersIntentV4 field + + + A list of Users. + + +Human-readable name for a User. + + +The user's email address. + + +The user's phone number in E.164 format e.g. +13214567890 + + + A list of API Key parameters. This field, if not needed, should be an empty array in your request body. + + +Human-readable name for an API Key. + + +The public component of a cryptographic key pair used to sign messages and transactions. + + +curveType field + +Enum options: `API_KEY_CURVE_P256`, `API_KEY_CURVE_SECP256K1`, `API_KEY_CURVE_ED25519` + + + +Optional window (in seconds) indicating how long the API Key should last. + + + + + + A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body. + + +Human-readable name for an Authenticator. + + +Challenge presented for authentication purposes. + + + attestation field + + +The cbor encoded then base64 url encoded id of the credential. + + +A base64 url encoded payload containing metadata about the signing context and the challenge. + + +A base64 url encoded payload containing authenticator data and any attestation the webauthn provider chooses. + + + The type of authenticator transports. + + +item field + +Enum options: `AUTHENTICATOR_TRANSPORT_BLE`, `AUTHENTICATOR_TRANSPORT_INTERNAL`, `AUTHENTICATOR_TRANSPORT_NFC`, `AUTHENTICATOR_TRANSPORT_USB`, `AUTHENTICATOR_TRANSPORT_HYBRID` + + + + + + + + + + + + + A list of Oauth providers. This field, if not needed, should be an empty array in your request body. + + +Human-readable name to identify a Provider. + + +Base64 encoded OIDC token + + + oidcClaims field + + +The issuer identifier from the OIDC token (iss claim) + + +The subject identifier from the OIDC token (sub claim) + + +The audience from the OIDC token (aud claim) + + + + + + + + + A list of User Tag IDs. This field, if not needed, should be an empty array in your request body. + + +item field + + + + + + + + + + + + createWebhookEndpointIntent field + + +The destination URL for webhook delivery. + + +Human-readable name for this webhook endpoint. + + + Event subscriptions to create for this endpoint. + + +The event type to subscribe to (for example, ACTIVITY_UPDATES, BALANCE_CONFIRMED_UPDATES, or BALANCE_FINALIZED_UPDATES). + + +JSON-encoded filter criteria for this subscription. + + +Whether this subscription is active. + + + + + + + + + updateWebhookEndpointIntent field + + +Unique identifier of the webhook endpoint to update. + + +Updated destination URL for webhook delivery. + + +Updated human-readable name for this webhook endpoint. + + +Whether this webhook endpoint is active. + + + + + + deleteWebhookEndpointIntent field + + +Unique identifier of the webhook endpoint to delete. + + + + + + setIpAllowlistIntent field + + +The public component of an API key. If null, the IP allowlist applies at the organization level. If set, it applies only to this specific API key. + + +Whether the IP allowlist is enabled. Only meaningful for organization-level allowlists. Omit for API key-level allowlists. + + + List of IP allowlist rules with CIDR blocks and optional labels. + + +CIDR block (e.g., '192.168.1.0/24', '2001:db8::/32'). + + +Optional human-readable label for this rule (e.g., 'Office VPN'). + + + + + +Behavior when an error occurs during IP allowlist evaluation. Valid values: ALLOW, DENY. Defaults to DENY. + + + + + + removeIpAllowlistIntent field + + +The public component of an API key. If null, removes the organization-level IP allowlist. If set, removes the IP allowlist for this specific API key. + + + + + + updateTvcAppLiveDeploymentIntent field + + +The unique identifier of the TVC deployment to set as live for the app. + + + + + + deleteTvcDeploymentIntent field + + +The unique identifier of the TVC deployment to delete. + + + + + + deleteTvcAppAndDeploymentsIntent field + + +The unique identifier of the TVC app to delete. The app and all associated deployments will be removed. + + + + + + restoreTvcDeploymentIntent field + + +The unique identifier of the TVC deployment to restore. + + + + + + sparkSignFrostIntent field + + +A Spark wallet account address identifying the wallet to sign with. + + + Batched sign requests. Each produces a partial signature plus Turnkey's public commitments. + + + derivation field + + +identity field + + + signingLeaf field + + +Unique identifier for the Spark signing leaf. + + + + + +deposit field + + + staticDeposit field + + +Index used to derive the static deposit key. + + + + + +htlcPreimage field + + + + + +Hex-encoded 32-byte sighash to sign. + + +Aggregate group verifying key (hex-encoded compressed secp256k1 point), computed as P_ops + P_user. Bound into the nonce HMAC. + + + Commitments for every non-Turnkey participant. MUST NOT include an entry under Turnkey's identifier. Bound into the nonce HMAC. + + +FROST participant identifier, hex-encoded (32-byte scalar). + + +Hiding commitment D, hex-encoded compressed secp256k1 point. + + +Binding commitment E, hex-encoded compressed secp256k1 point. + + + + + +Optional adaptor point T (hex-encoded 33-byte compressed secp256k1 pubkey). When set, Turnkey produces a Schnorr adaptor pre-signature with the FROST challenge bound to `R+T` (where `R` is the aggregate group nonce commitment from FROST). The party holding the discrete log `t` completes the pre-sig to a valid BIP-340 signature by adding `t` (or `-t`, for parity) to the signature scalar `s`. This is primarily used by Spark leaves-swap and other adaptor-bound flows; absent or empty leads to plain FROST signing (the typical case). + + + + + + + + + sparkPrepareTransferIntent field + + +A Spark wallet account address identifying the wallet. + + + transfer field + + +Spark transfer identifier (UUID). + + + Leaves being transferred. + + +Leaf identifier (UUID). + + + oldLeafDerivation field + + +identity field + + + signingLeaf field + + +Unique identifier for the Spark signing leaf. + + + + + +deposit field + + + staticDeposit field + + +Index used to derive the static deposit key. + + + + + +htlcPreimage field + + + + + + newLeafDerivation field + + +identity field + + + signingLeaf field + + +Unique identifier for the Spark signing leaf. + + + + + +deposit field + + + staticDeposit field + + +Index used to derive the static deposit key. + + + + + +htlcPreimage field + + + + + +Client-produced CPFP refund signature (hex-encoded), passed through verbatim into the per-operator SendLeafKeyTweak. Empty omits the field from the operator package. + + +Client-produced direct refund signature (hex-encoded). Passed through verbatim. + + +Client-produced direct-from-CPFP refund signature (hex-encoded). Passed through verbatim. + + + + + +Feldman VSS threshold for reconstructing the per-leaf tweak scalar. + + + Operators that will receive Feldman shares of the per-leaf tweak. Order must match the operators' numeric IDs in the Spark operator config - share index is the 1-based position in this list. + + +Spark operator identifier (UUID). + + +Operator's ECIES encryption pubkey (hex-encoded compressed secp256k1 point). + + + + + +Recipient's identity pubkey (hex-encoded compressed secp256k1 point). Each leaf's new_priv is ECIES-encrypted to this key and embedded in the per-operator package for claim-time delivery. + + + + + + + + + sparkClaimTransferIntent field + + +A Spark wallet account address identifying the wallet. + + + claim field + + + Leaves being claimed. + + +Leaf identifier (UUID). + + +ECIES ciphertext (hex-encoded) containing the inbound transfer secret. Decrypted inside the enclave using the wallet's Identity key. + + +Hex-encoded 64-byte compact ECDSA signature binding (leaf_id, transfer_id, ciphertext) to the sender's identity key. Verified inside the enclave before decryption. + + + + + +Shamir threshold for reconstructing the per-leaf claim secret. + + + Operators that will receive Shamir shares. + + +Spark operator identifier (UUID). + + +Operator's ECIES encryption pubkey (hex-encoded compressed secp256k1 point). + + + + + +Spark transfer identifier (UUID). Used together with each leaf's sender_signature to verify the sender bound this ciphertext to this transfer. + + +Sender's compressed secp256k1 identity public key (hex-encoded, 33 bytes). Used to verify the per-leaf sender_signature fields. + + + + + + + + + sparkPrepareLightningReceiveIntent field + + +A Spark wallet account address identifying the wallet. + + + lightningReceive field + + +Feldman VSS threshold for reconstructing the preimage. + + + Operators that will receive Feldman shares of the preimage. Order must match the operators' numeric IDs in the Spark operator config - share index is the 1-based position in this list. + + +Spark operator identifier (UUID). + + +Operator's ECIES encryption pubkey (hex-encoded compressed secp256k1 point). + + + + + + + + + + + + postTvcQuorumKeyShareIntent field + + +Unique identifier of the TVC deployment receiving quorum key share + + +Hex-encoded ephemeral public key used to encrypt the quorum key share + + + shareApprovalBundle field + + +Unique identifier of the operator providing this quorum key share + + +Hex-encoded re-encrypted quorum key share + + +Signature from the share set operator approving the manifest + + + + + + + + + ethSendTransactionIntentV2 field + + +A wallet or private key address to sign with. This does not support private key IDs. + + +CAIP-2 chain ID (e.g., 'eip155:1' for Ethereum mainnet). + +Enum options: `eip155:1`, `eip155:11155111`, `eip155:8453`, `eip155:84532`, `eip155:137`, `eip155:80002`, `eip155:56`, `eip155:97`, `eip155:10`, `eip155:11155420`, `eip155:143`, `eip155:10143`, `eip155:42161`, `eip155:4217`, `eip155:42431`, `eip155:421614` + + + +Whether to sponsor this transaction via Gas Station. If false or unset, the EOA pays gas. A single call uses EIP-1559; multiple calls use EIP-7702 batch execution via Gas Station. + + +Outer transaction nonce. Omit to auto-fetch. + + +Maximum amount of gas for the outer transaction. Omit to auto-estimate. + + +Maximum total fee per gas unit (base fee + priority fee) in wei. Omit to auto-estimate. + + +Maximum priority fee (tip) per gas unit in wei. Omit to auto-estimate. + + +Unix timestamp in seconds for EIP-712 execution deadline. Only used when sponsor=true. + + +The gas station delegate contract nonce used in the BatchExecution EIP-712 message. Valid for sponsored transactions and non-sponsored multi-call batches. Omit to auto-fetch. Use the nonces endpoint for replay protection. + + + Ordered list of calls to execute. Must contain between 1 and 50 entries. A single entry with sponsor=false uses EIP-1559; multiple entries use EIP-7702 batch execution via Gas Station. + + +Recipient address as a hex string with 0x prefix. + + +Amount of native asset to send in wei. + + +Hex-encoded call data for contract interactions. + + + + + + + + + createMfaPolicyIntent field + + +The ID of the User to add the MFA Policy to. + + +Human-readable name for a Policy. + + +A condition expression that evaluates to true or false, determining when this MFA policy applies. + + + An ordered list of authentication requirements. Each requirement must be satisfied sequentially to complete MFA. + + + A list of authentication methods for this MFA step. If only one method is provided, it is required. If multiple are provided, the user must satisfy ANY one of them. + + +type field + +Enum options: `AUTHENTICATION_TYPE_EMAIL_OTP`, `AUTHENTICATION_TYPE_SMS_OTP`, `AUTHENTICATION_TYPE_PASSKEY`, `AUTHENTICATION_TYPE_API_KEY`, `AUTHENTICATION_TYPE_OAUTH`, `AUTHENTICATION_TYPE_SESSION` + + + +Optional specific authenticator ID required (e.g., UUID of a passkey authenticator). If not provided, any authenticator of the specified type can be used. + + + + + + + + +The order in which this MFA policy is evaluated, starting from 0, relative to other MFA policies. Lower order values are evaluated first. + + +Notes for an MFA Policy. + + + + + + updateMfaPolicyIntent field + + +The ID of the User to update the MFA Policy for. + + +Unique identifier for a given MFA Policy. + + +Human-readable name for a Policy. + + +A condition expression that evaluates to true or false, determining when this MFA policy applies. + + + An ordered list of authentication requirements. Each requirement must be satisfied sequentially to complete MFA. + + + A list of authentication methods for this MFA step. If only one method is provided, it is required. If multiple are provided, the user must satisfy ANY one of them. + + +type field + +Enum options: `AUTHENTICATION_TYPE_EMAIL_OTP`, `AUTHENTICATION_TYPE_SMS_OTP`, `AUTHENTICATION_TYPE_PASSKEY`, `AUTHENTICATION_TYPE_API_KEY`, `AUTHENTICATION_TYPE_OAUTH`, `AUTHENTICATION_TYPE_SESSION` + + + +Optional specific authenticator ID required (e.g., UUID of a passkey authenticator). If not provided, any authenticator of the specified type can be used. + + + + + + + + +The order in which this MFA policy is evaluated, starting from 0, relative to other MFA policies. Lower order values are evaluated first. + + +Notes for an MFA Policy. + + + + + + deleteMfaPolicyIntent field + + +The ID of the User to delete the MFA Policy from. + + +Unique identifier for a given MFA Policy. + + + + + + createSessionProfileIntent field + + +Human-readable name for a Session Profile. + + +The scope string that defines the permissions for this Session Profile. + + +The duration in seconds for which sessions created with this Session Profile are valid. If not set, expiration will be determined by the value passed in to the intent of login activities. + + +Notes for a Session Profile. + + + + + + earnDeployWrapperIntent field + + +Address of the underlying yield vault to wrap (from the ListEarnVaults catalog). + + +CAIP-2 chain ID the vault lives on (e.g., 'eip155:8453' for Base). + +Enum options: `eip155:1`, `eip155:8453`, `eip155:42161`, `eip155:137`, `eip155:56`, `eip155:4217` + + + +Your fee on gross yield, in basis points (e.g., '2000' for 20%). Maximum is 4000 (40%). + + +The wallet address that receives the client's fee payouts on-chain. Must be a Turnkey-managed wallet address. + + + + + + earnDepositIntent field + + +Address of the deployed Earn wrapper to deposit into, from ListEarnVaults/ListEarnPositions. Must be one of the org's deployed wrappers. + + +A Wallet account address or Private Key address to deposit from and sign with. Must be an on-chain address; Private Key identifiers are not supported. + + +Amount of the underlying asset to deposit, in raw on-chain units (e.g., '1000000' for 1 USDC at 6 decimals). + + +CAIP-2 chain ID the vault lives on (e.g., 'eip155:8453' for Base). + +Enum options: `eip155:1`, `eip155:8453`, `eip155:42161`, `eip155:137`, `eip155:56`, `eip155:4217` + + + +Whether to sponsor this transaction via Gas Station. + + + + + + earnWithdrawIntent field + + +Address of the deployed Earn wrapper holding the position to withdraw from, from ListEarnPositions. Must be one of the org's deployed wrappers. + + +A Wallet account address or Private Key address to withdraw to and sign with. Must be an on-chain address; Private Key identifiers are not supported. + + +CAIP-2 chain ID the vault lives on (e.g., 'eip155:8453' for Base). + +Enum options: `eip155:1`, `eip155:8453`, `eip155:42161`, `eip155:137`, `eip155:56`, `eip155:4217` + + + +Whether to sponsor this transaction via Gas Station. + + +The amount of the underlying asset to withdraw, in raw on-chain units. Pass 'MAX' to withdraw the entire position. + + + + + + executeSwapIntent field + + +CAIP-19 asset ID for the input asset. The chain is derived from this value. + + +CAIP-19 asset ID for the output asset. May be on a different chain than `input_token` for cross-chain swaps. + + +Base-unit amount of the input asset. + + +Wallet account address to sign and submit the swap transaction from. Cross-wallet swaps are not supported. + + +Whether to sponsor the resulting swap transaction via Gas Station when supported by the chain. + + +Maximum allowed slippage in basis points. + + +Swap provider to execute with, as returned by create_swap_quote. When omitted, execution uses the default provider. + + +Minimum acceptable base-unit amount of the output asset. Execution fails if the swap provider's quoted minimum output falls below this floor at execution time. + + + + + + upsertSwapConfigIntent field + + +feeReceiverWalletAddress field + + +Client fee in basis points applied to swaps; used for all pairs unless stable_fee_bps is set. + + +Optional Enterprise-only override applied when both swap assets are stablecoins; falls back to fee_bps when unset. Non-Enterprise orgs may only set fee_bps. + + + + + + createTvcOperatorIntent field + + +Human-readable name for a new wallet created for this TVC operator + + +Unique identifier for an existing wallet to reuse for this TVC operator + + +Base derivation path for creating TVC operator wallet accounts + + +Human-readable name for this new TVC operator + + + + + + createTvcQuorumKeyIntent field + + +The threshold of operators needed to reassemble this TVC quorum key + + + Operator public keys used to encrypt and later approve the generated TVC quorum key shares + + +item field + + + + + + + + + reEncryptTvcQuorumKeyShareIntent field + + +Base64-encoded attestation document for the TVC deployment provisioning enclave + + +Base64-encoded manifest for the TVC deployment + + +Operator encryption public key used to encrypt the hosted TVC quorum key share + + +Operator signing public key used to approve the TVC manifest + + +Unique identifier of the TVC deployment receiving the re-encrypted quorum key share + + +Quorum key for the TVC application + + + + + + initImportSecretsIntent field + + +encryptionSuite field + +Enum options: `TRANSPORT_ENCRYPTION_SUITE_ENCLAVE_ENCRYPT_V1` + + + +The number of secrets the user intends to import. + + + + + + solSendTransactionIntentV2 field + + +Hex-encoded serialized unsigned Solana transaction (full wire format with zeroed signature placeholders) + + + Ordered Solana signer addresses Turnkey signs with. Between 1 and 16 signers. For sponsored transactions this must list every required signer of the transaction in transaction order. + + +item field + + + + + +Whether to sponsor this transaction via Gas Station. + + +CAIP-2 chain ID (e.g., 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' for Solana mainnet). Human-readable Solana aliases ('solana:mainnet', 'solana:devnet') are also accepted and normalized to canonical CAIP-2 values. + +Enum options: `solana:mainnet`, `solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp`, `solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d`, `solana:devnet`, `solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1`, `solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1wcaWoxPkrZBG` + + + +User-provided blockhash for replay protection / deadline control. If provided, it is used as-is, including for sponsored transactions (the transaction is only broadcastable while the blockhash is current). If omitted and sponsor=true, a fresh blockhash is fetched during execution. + + + + + +claimSwapFeesIntent field + + + earnSetWrapperStateIntent field + + +Address of the deployed Earn wrapper to update, from ListEarnVaults/ListEarnPositions. Must be one of the org's deployed wrappers. + + +When true, deposits to this wrapper are rejected; withdrawals are unaffected. Set to false to re-enable deposits. + + + + + + claimEarnFeesIntent field + + +Address of the deployed Earn wrapper to claim fees for. Must be one of the org's deployed wrappers. + + + + + + updateWalletAccountNameIntent field + + +Unique identifier for a given Wallet Account. + + +Human-readable name for this Wallet Account. + + + + + + ethUndelegate7702Intent field + + +A wallet or private key address to undelegate. This does not support private key IDs. + + +CAIP-2 chain ID (e.g., 'eip155:1' for Ethereum mainnet). + +Enum options: `eip155:1`, `eip155:11155111`, `eip155:8453`, `eip155:84532`, `eip155:137`, `eip155:80002`, `eip155:56`, `eip155:97`, `eip155:10`, `eip155:11155420`, `eip155:143`, `eip155:10143`, `eip155:42161`, `eip155:421614` + + + +Outer transaction nonce. Omit to auto-fetch. + + +Maximum amount of gas for the undelegation transaction. Omit to use the fixed undelegation gas limit. + + +Maximum total fee per gas unit (base fee + priority fee) in wei. Omit to auto-estimate. + + +Maximum priority fee (tip) per gas unit in wei. Omit to auto-estimate. + + + + + + executeSwapIntentV2 field + + +Quote identifier returned by create_swap_quote. Execution is bound to this quote; the signer is derived from the quote and must not be resupplied. + + +CAIP-19 asset ID for the input asset. + + +Exact base-unit amount of the input asset committed by the quote. + + +CAIP-19 asset ID for the output asset. + + +Exact quoted base-unit output amount committed by the quote. + + +Exact minimum base-unit output committed by the quote. + + +Whether the quoted transaction is sponsored. + + +Exact EVM sender (EOA account) nonce. Valid only for a non-sponsored EVM swap. Honored for already-delegated (Type-2) batch swaps and single-call swaps; ignored for not-yet-delegated EIP-7702 (Type-4) batches where the outer nonce is derived from the authorization. Prefer gas_station_nonce for batch replay protection and use the nonces endpoint to fetch it. Omit to auto-fetch. + + +Exact Solana recent blockhash. Valid only for a Solana swap, including sponsored swaps. Omit to auto-fetch. + + +Exact gas station delegate contract nonce used in the BatchExecution EIP-712 message. Valid for sponsored EVM swaps and non-sponsored EVM swaps that execute as a multi-call batch (for example ERC-20 approve + swap). This is the replay-protection nonce for gas-station batches; use the nonces endpoint to fetch it. Omit to auto-fetch. + + + + + + createSwapQuoteIntent field + + +Wallet account or Private Key address used to price the executable provider quote. Private Key identifiers are not supported. + + +CAIP-19 asset ID for the input asset. The chain is derived from this value. + + +CAIP-19 asset ID for the output asset. + + +Base-unit amount of the input asset. + + +Provider-neutral maximum allowed slippage in basis points. Turnkey converts this value to each provider's request format. When omitted, each provider applies its default slippage behavior. + + + + + + importSecretsIntent field + + + A list of secrets to import. + + +Optional human-readable name for the secret. Names must be unique within an organization when provided. + + +Encryption suite specific payload containing the secret ciphertext. For enclave encrypt v1 this is a JSON-encoded ClientSendMsg. + + +Targeted transport encryption public key, as returned by InitImportSecrets. + + +encryptionSuite field + +Enum options: `TRANSPORT_ENCRYPTION_SUITE_ENCLAVE_ENCRYPT_V1` + + + + Policy-visible, static properties to permanently bind to the secret. + + +key field + + +value field + + + + + + + + + + + + + + + result field + + + createOrganizationResult field + + +Unique identifier for a given Organization. + + + + + + createAuthenticatorsResult field + + + A list of Authenticator IDs. + + +item field + + + + + + + + + createUsersResult field + + + A list of User IDs. + + +item field + + + + + + + + + createPrivateKeysResult field + + + A list of Private Key IDs. + + +item field + + + + + + + + + createInvitationsResult field + + + A list of Invitation IDs + + +item field + + + + + + + + + acceptInvitationResult field + + +Unique identifier for a given Invitation. + + +Unique identifier for a given User. + + + + + + signRawPayloadResult field + + +Component of an ECSDA signature. + + +Component of an ECSDA signature. + + +Component of an ECSDA signature. + + + + + + createPolicyResult field + + +Unique identifier for a given Policy. + + + + + + disablePrivateKeyResult field + + +Unique identifier for a given Private Key. + + + + + + deleteUsersResult field + + + A list of User IDs. + + +item field + + + + + + + + + deleteAuthenticatorsResult field + + + Unique identifier for a given Authenticator. + + +item field + + + + + + + + + deleteInvitationResult field + + +Unique identifier for a given Invitation. + + + + + + deleteOrganizationResult field + + +Unique identifier for a given Organization. + + + + + + deletePolicyResult field + + +Unique identifier for a given Policy. + + + + + + createUserTagResult field + + +Unique identifier for a given User Tag. + + + A list of User IDs. + + +item field + + + + + + + + + deleteUserTagsResult field + + + A list of User Tag IDs. + + +item field + + + + + + A list of User IDs. + + +item field + + + + + + + + + signTransactionResult field + + +signedTransaction field + + + + + + deleteApiKeysResult field + + + A list of API Key IDs. + + +item field + + + + + + + + + createApiKeysResult field + + + A list of API Key IDs. + + +item field + + + + + + + + + createPrivateKeyTagResult field + + +Unique identifier for a given Private Key Tag. + + + A list of Private Key IDs. + + +item field + + + + + + + + + deletePrivateKeyTagsResult field + + + A list of Private Key Tag IDs. + + +item field + + + + + + A list of Private Key IDs. + + +item field + + + + + + + + + setPaymentMethodResult field + + +The last four digits of the credit card added. + + +The name associated with the payment method. + + +The email address associated with the payment method. + + + + + + activateBillingTierResult field + + +The id of the product being subscribed to. + + + + + + deletePaymentMethodResult field + + +The payment method that was removed. + + + + + + createApiOnlyUsersResult field + + + A list of API-only User IDs. + + +item field + + + + + + + + +updateRootQuorumResult field + + + updateUserTagResult field + + +Unique identifier for a given User Tag. + + + + + + updatePrivateKeyTagResult field + + +Unique identifier for a given Private Key Tag. + + + + + + createSubOrganizationResult field + + +subOrganizationId field + + + rootUserIds field + + +item field + + + + + + + + +updateAllowedOriginsResult field + + + createPrivateKeysResultV2 field + + + A list of Private Key IDs and addresses. + + +privateKeyId field + + + addresses field + + +format field + +Enum options: `ADDRESS_FORMAT_UNCOMPRESSED`, `ADDRESS_FORMAT_COMPRESSED`, `ADDRESS_FORMAT_ETHEREUM`, `ADDRESS_FORMAT_SOLANA`, `ADDRESS_FORMAT_COSMOS`, `ADDRESS_FORMAT_TRON`, `ADDRESS_FORMAT_SUI`, `ADDRESS_FORMAT_APTOS`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2PKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2SH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WSH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2TR`, `ADDRESS_FORMAT_SEI`, `ADDRESS_FORMAT_XLM`, `ADDRESS_FORMAT_DOGE_MAINNET`, `ADDRESS_FORMAT_DOGE_TESTNET`, `ADDRESS_FORMAT_TON_V3R2`, `ADDRESS_FORMAT_TON_V4R2`, `ADDRESS_FORMAT_TON_V5R1`, `ADDRESS_FORMAT_XRP`, `ADDRESS_FORMAT_SPARK_MAINNET`, `ADDRESS_FORMAT_SPARK_REGTEST` + + + +address field + + + + + + + + + + + + updateUserResult field + + +A User ID. + + + + + + updatePolicyResult field + + +Unique identifier for a given Policy. + + + + + + createSubOrganizationResultV3 field + + +subOrganizationId field + + + A list of Private Key IDs and addresses. + + +privateKeyId field + + + addresses field + + +format field + +Enum options: `ADDRESS_FORMAT_UNCOMPRESSED`, `ADDRESS_FORMAT_COMPRESSED`, `ADDRESS_FORMAT_ETHEREUM`, `ADDRESS_FORMAT_SOLANA`, `ADDRESS_FORMAT_COSMOS`, `ADDRESS_FORMAT_TRON`, `ADDRESS_FORMAT_SUI`, `ADDRESS_FORMAT_APTOS`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2PKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2SH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WSH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2TR`, `ADDRESS_FORMAT_SEI`, `ADDRESS_FORMAT_XLM`, `ADDRESS_FORMAT_DOGE_MAINNET`, `ADDRESS_FORMAT_DOGE_TESTNET`, `ADDRESS_FORMAT_TON_V3R2`, `ADDRESS_FORMAT_TON_V4R2`, `ADDRESS_FORMAT_TON_V5R1`, `ADDRESS_FORMAT_XRP`, `ADDRESS_FORMAT_SPARK_MAINNET`, `ADDRESS_FORMAT_SPARK_REGTEST` + + + +address field + + + + + + + + + rootUserIds field + + +item field + + + + + + + + + createWalletResult field + + +Unique identifier for a Wallet. + + + A list of account addresses. + + +item field + + + + + + + + + createWalletAccountsResult field + + + A list of derived addresses. + + +item field + + + + + + + + + initUserEmailRecoveryResult field + + +Unique identifier for the user being recovered. + + + + + + recoverUserResult field + + + ID of the authenticator created. + + +item field + + + + + + + + + setOrganizationFeatureResult field + + + Resulting list of organization features. + + +name field + +Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_SWAP_CONFIG`, `FEATURE_NAME_EARN_CONFIG` + + + +value field + + + + + + + + + removeOrganizationFeatureResult field + + + Resulting list of organization features. + + +name field + +Enum options: `FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY`, `FEATURE_NAME_WEBAUTHN_ORIGINS`, `FEATURE_NAME_EMAIL_AUTH`, `FEATURE_NAME_EMAIL_RECOVERY`, `FEATURE_NAME_WEBHOOK`, `FEATURE_NAME_SMS_AUTH`, `FEATURE_NAME_OTP_EMAIL_AUTH`, `FEATURE_NAME_AUTH_PROXY`, `FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED`, `FEATURE_NAME_SWAP_CONFIG`, `FEATURE_NAME_EARN_CONFIG` + + + +value field + + + + + + + + + exportPrivateKeyResult field + + +Unique identifier for a given Private Key. + + +Export bundle containing a private key encrypted to the client's target public key. + + + + + + exportWalletResult field + + +Unique identifier for a given Wallet. + + +Export bundle containing a wallet mnemonic + optional newline passphrase encrypted by the client's target public key. + + + + + + createSubOrganizationResultV4 field + + +subOrganizationId field + + + wallet field + + +walletId field + + + A list of account addresses. + + +item field + + + + + + + + + rootUserIds field + + +item field + + + + + + + + + emailAuthResult field + + +Unique identifier for the authenticating User. + + +Unique identifier for the created API key. + + + + + + exportWalletAccountResult field + + +Address to identify Wallet Account. + + +Export bundle containing a private key encrypted by the client's target public key. + + + + + + initImportWalletResult field + + +Import bundle containing a public key and signature to use for importing client data. + + + + + + importWalletResult field + + +Unique identifier for a Wallet. + + + A list of account addresses. + + +item field + + + + + + + + + initImportPrivateKeyResult field + + +Import bundle containing a public key and signature to use for importing client data. + + + + + + importPrivateKeyResult field + + +Unique identifier for a Private Key. + + + A list of addresses. + + +format field + +Enum options: `ADDRESS_FORMAT_UNCOMPRESSED`, `ADDRESS_FORMAT_COMPRESSED`, `ADDRESS_FORMAT_ETHEREUM`, `ADDRESS_FORMAT_SOLANA`, `ADDRESS_FORMAT_COSMOS`, `ADDRESS_FORMAT_TRON`, `ADDRESS_FORMAT_SUI`, `ADDRESS_FORMAT_APTOS`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_MAINNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_TESTNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2PKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2SH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2WSH`, `ADDRESS_FORMAT_BITCOIN_SIGNET_P2TR`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2PKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2SH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WPKH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2WSH`, `ADDRESS_FORMAT_BITCOIN_REGTEST_P2TR`, `ADDRESS_FORMAT_SEI`, `ADDRESS_FORMAT_XLM`, `ADDRESS_FORMAT_DOGE_MAINNET`, `ADDRESS_FORMAT_DOGE_TESTNET`, `ADDRESS_FORMAT_TON_V3R2`, `ADDRESS_FORMAT_TON_V4R2`, `ADDRESS_FORMAT_TON_V5R1`, `ADDRESS_FORMAT_XRP`, `ADDRESS_FORMAT_SPARK_MAINNET`, `ADDRESS_FORMAT_SPARK_REGTEST` + + + +address field + + + + + + + + + createPoliciesResult field + + + A list of unique identifiers for the created policies. + + +item field + + + + + + + + + signRawPayloadsResult field + + + signatures field + + +Component of an ECSDA signature. + + +Component of an ECSDA signature. + + +Component of an ECSDA signature. + + + + + + + + + createReadOnlySessionResult field + + +Unique identifier for a given Organization. If the request is being made by a user and their Sub-Organization ID is unknown, this can be the Parent Organization ID. However, using the Sub-Organization ID is preferred due to performance reasons. + + +Human-readable name for an Organization. + + +Unique identifier for a given User. + + +Human-readable name for a User. + + +String representing a read only session + + +UTC timestamp in seconds representing the expiry time for the read only session. + + + + + + createOauthProvidersResult field + + + A list of unique identifiers for Oauth Providers + + +item field + + + + + + + + + deleteOauthProvidersResult field + + + A list of unique identifiers for Oauth Providers + + +item field + + + + + + + + + createSubOrganizationResultV5 field + + +subOrganizationId field + + + wallet field + + +walletId field + + + A list of account addresses. + + +item field + + + + + + + + + rootUserIds field + + +item field + + + + + + + + + oauthResult field + + +Unique identifier for the authenticating User. + + +Unique identifier for the created API key. + + +HPKE encrypted credential bundle + + + + + + createReadWriteSessionResult field + + +Unique identifier for a given Organization. If the request is being made by a user and their Sub-Organization ID is unknown, this can be the Parent Organization ID. However, using the Sub-Organization ID is preferred due to performance reasons. + + +Human-readable name for an Organization. + + +Unique identifier for a given User. + + +Human-readable name for a User. + + +Unique identifier for the created API key. + + +HPKE encrypted credential bundle + + + + + + createSubOrganizationResultV6 field + + +subOrganizationId field + + + wallet field + + +walletId field + + + A list of account addresses. + + +item field + + + + + + + + + rootUserIds field + + +item field + + + + + + + + + deletePrivateKeysResult field + + + A list of private key unique identifiers that were removed + + +item field + + + + + + + + + deleteWalletsResult field + + + A list of wallet unique identifiers that were removed + + +item field + + + + + + + + + createReadWriteSessionResultV2 field + + +Unique identifier for a given Organization. If the request is being made by a user and their Sub-Organization ID is unknown, this can be the Parent Organization ID. However, using the Sub-Organization ID is preferred due to performance reasons. + + +Human-readable name for an Organization. + + +Unique identifier for a given User. + + +Human-readable name for a User. + + +Unique identifier for the created API key. + + +HPKE encrypted credential bundle + + + + + + deleteSubOrganizationResult field + + +Unique identifier of the sub organization that was removed + + + + + + initOtpAuthResult field + + +Unique identifier for an OTP authentication + + + + + + otpAuthResult field + + +Unique identifier for the authenticating User. + + +Unique identifier for the created API key. + + +HPKE encrypted credential bundle + + + + + + createSubOrganizationResultV7 field + + +subOrganizationId field + + + wallet field + + +walletId field + + + A list of account addresses. + + +item field + + + + + + + + + rootUserIds field + + +item field + + + + + + + + + updateWalletResult field + + +A Wallet ID. + + + + + + updatePolicyResultV2 field + + +Unique identifier for a given Policy. + + + + + + initOtpAuthResultV2 field + + +Unique identifier for an OTP authentication + + + + + + initOtpResult field + + +Unique identifier for an OTP authentication + + + + + + verifyOtpResult field + + +Signed JWT containing a unique id, expiry, verification type, contact. Verification status of a user is updated when the token is consumed (in OTP_LOGIN requests) + + + + + + otpLoginResult field + + +Signed JWT containing an expiry, public key, session type, user id, and organization id + + + + + + stampLoginResult field + + +Signed JWT containing an expiry, public key, session type, user id, and organization id + + + + + + oauthLoginResult field + + +Signed JWT containing an expiry, public key, session type, user id, and organization id + + + + + + updateUserNameResult field + + +Unique identifier of the User whose name was updated. + + + + + + updateUserEmailResult field + + +Unique identifier of the User whose email was updated. + + + + + + updateUserPhoneNumberResult field + + +Unique identifier of the User whose phone number was updated. + + + + + + initFiatOnRampResult field + + +Unique URL for a given fiat on-ramp flow. + + +Unique identifier used to retrieve transaction statuses for a given fiat on-ramp flow. + + +Optional signature of the MoonPay Widget URL. The signature is generated if the Init Fiat On Ramp intent includes the urlForSignature field. The signature can be used to initialize the MoonPay SDKs when URL signing is enabled for your project. + + + + + + createSmartContractInterfaceResult field + + +The ID of the created Smart Contract Interface. + + + + + + deleteSmartContractInterfaceResult field + + +The ID of the deleted Smart Contract Interface. + + + + + + enableAuthProxyResult field + + +A User ID with permission to initiate authentication. + + + + + +disableAuthProxyResult field + + + updateAuthProxyConfigResult field + + +Unique identifier for a given User. (representing the turnkey signer user id) + + + + + + createOauth2CredentialResult field + + +Unique identifier of the OAuth 2.0 credential that was created + + + + + + updateOauth2CredentialResult field + + +Unique identifier of the OAuth 2.0 credential that was updated + + + + + + deleteOauth2CredentialResult field + + +Unique identifier of the OAuth 2.0 credential that was deleted + + + + + + oauth2AuthenticateResult field + + +Base64 encoded OIDC token issued by Turnkey to be used with the LoginWithOAuth activity + + + + + + deleteWalletAccountsResult field + + + A list of wallet account unique identifiers that were removed + + +item field + + + + + + + + + deletePoliciesResult field + + + A list of unique identifiers for the deleted policies. + + +item field + + + + + + + + + ethSendRawTransactionResult field + + +The transaction hash of the sent transaction + + + + + + createFiatOnRampCredentialResult field + + +Unique identifier of the Fiat On-Ramp credential that was created + + + + + + updateFiatOnRampCredentialResult field + + +Unique identifier of the Fiat On-Ramp credential that was updated + + + + + + deleteFiatOnRampCredentialResult field + + +Unique identifier of the Fiat On-Ramp credential that was deleted + + + + + + ethSendTransactionResult field + + +The send_transaction_status ID associated with the transaction submission + + + + + + upsertGasUsageConfigResult field + + +Unique identifier for the gas usage configuration that was created or updated. + + + + + + createTvcAppResult field + + +The unique identifier for the TVC application + + +The unique identifier for the TVC manifest set + + + The unique identifier(s) of the manifest set operators + + +item field + + + + + +The required number of approvals for the manifest set + + +The unique identifier for the TVC share set + + + The unique identifiers of the share set operators + + +item field + + + + + +The required number of approvals for the share set + + + + + + createTvcDeploymentResult field + + +The unique identifier for the TVC deployment + + +The unique identifier for the TVC manifest + + + + + + createTvcManifestApprovalsResult field + + + The unique identifier(s) for the manifest approvals + + +item field + + + + + + + + + solSendTransactionResult field + + +The send_transaction_status ID associated with the transaction submission + + + + + + initOtpResultV2 field + + +Unique identifier for an OTP flow + + +Signed bundle containing a target encryption key to use when submitting OTP codes. + + + + + + updateOrganizationNameResult field + + +Unique identifier for the Organization. + + +The updated organization name. + + + + + + createSubOrganizationResultV8 field + + +subOrganizationId field + + + wallet field + + +walletId field + + + A list of account addresses. + + +item field + + + + + + + + + rootUserIds field + + +item field + + + + + + + + + createOauthProvidersResultV2 field + + + A list of unique identifiers for Oauth Providers + + +item field + + + + + + + + + createWebhookEndpointResult field + + +Unique identifier of the created webhook endpoint. + + + webhookEndpoint field + + +Unique identifier of the webhook endpoint. + + +Unique identifier for a given Organization. + + +The destination URL for webhook delivery. + + +Human-readable name for this webhook endpoint. + + +Whether this webhook endpoint is active. + + + Current subscriptions attached to this endpoint. + + +The event type to subscribe to (for example, ACTIVITY_UPDATES, BALANCE_CONFIRMED_UPDATES, or BALANCE_FINALIZED_UPDATES). + + +JSON-encoded filter criteria for this subscription. + + +Whether this subscription is active. + + + + + + + + + + + + updateWebhookEndpointResult field + + +Unique identifier of the updated webhook endpoint. + + + webhookEndpoint field + + +Unique identifier of the webhook endpoint. + + +Unique identifier for a given Organization. + + +The destination URL for webhook delivery. + + +Human-readable name for this webhook endpoint. + + +Whether this webhook endpoint is active. + + + Current subscriptions attached to this endpoint. + + +The event type to subscribe to (for example, ACTIVITY_UPDATES, BALANCE_CONFIRMED_UPDATES, or BALANCE_FINALIZED_UPDATES). + + +JSON-encoded filter criteria for this subscription. + + +Whether this subscription is active. + + + + + + + + + + + + deleteWebhookEndpointResult field + + +Unique identifier of the deleted webhook endpoint. + + + + + +setIpAllowlistResult field + + +removeIpAllowlistResult field + + +updateTvcAppLiveDeploymentResult field + + + deleteTvcDeploymentResult field + + +The unique identifier of the deleted TVC deployment. + + + + + + deleteTvcAppAndDeploymentsResult field + + +The unique identifier of the deleted TVC app. + + + + + + restoreTvcDeploymentResult field + + +The unique identifier of the restored TVC deployment. + + + + + + sparkSignFrostResult field + + + Partial signatures plus Turnkey commitments, one per request, in order. + + +Hex-encoded FROST partial signature. + + +Turnkey's hiding commitment D (hex-encoded compressed secp256k1 point). Forward to the Spark Operator. + + +Turnkey's binding commitment E (hex-encoded compressed secp256k1 point). Forward to the Spark Operator. + + + + + + + + + sparkPrepareTransferResult field + + + Per-operator ECIES-encrypted packages. + + +Spark operator identifier (UUID). + + +ECIES ciphertext (hex-encoded) opaque to Turnkey after emission. + + + + + +Hex-encoded ECDSA-DER signature of the TransferPackage signing payload, signed with the wallet's IDENTITY key. + + + Newly-derived SigningLeaf public keys, one per leaf, in input order. + + +The Spark leaf_id this public key was derived for. + + +Hex-encoded compressed secp256k1 point (33 bytes) for the SigningLeaf derivation at leaf_id. + + + + + + + + + sparkClaimTransferResult field + + + Per-operator ECIES-encrypted packages. + + +Spark operator identifier (UUID). + + +ECIES ciphertext (hex-encoded) opaque to Turnkey after emission. + + + + + + Newly-derived SigningLeaf public keys, one per leaf, in input order. + + +The Spark leaf_id this public key was derived for. + + +Hex-encoded compressed secp256k1 point (33 bytes) for the SigningLeaf derivation at leaf_id. + + + + + + + + + sparkPrepareLightningReceiveResult field + + + Per-operator ECIES-encrypted Feldman share packages. + + +Spark operator identifier (UUID). + + +ECIES ciphertext (hex-encoded) opaque to Turnkey after emission. + + + + + +Hex-encoded SHA256(preimage). Forward to the Lightning node. + + + + + + postTvcQuorumKeyShareResult field + + +The unique identifier for the provisioning quorum key share + + + + + + ethSendTransactionResultV2 field + + +The send_transaction_status ID associated with the transaction submission + + + + + + createMfaPolicyResult field + + +Unique identifier for a given MFA Policy. + + + + + + updateMfaPolicyResult field + + +Unique identifier for a given MFA Policy. + + + + + + deleteMfaPolicyResult field + + +Unique identifier for a given MFA Policy. + + + + + + createSessionProfileResult field + + +Unique identifier for a given Session Profile. + + + + + + earnDeployWrapperResult field + + +Address of the deployed fee wrapper (the deposit target). + + +Address of the deployed fee splitter (PaymentSplitter for Morpho, RevenueSplitterOwner for Aave). + + +Identifier to poll deploy status. + + + + + + earnDepositResult field + + +Identifier to poll deposit status and tx hash via GetEarnDepositStatus. + + + + + + earnWithdrawResult field + + +Identifier to poll withdrawal status and tx hash via GetEarnWithdrawStatus. + + + + + + executeSwapResult field + + +Identifier to poll swap status via GetSwapStatus. + + +Swap provider used to build the transaction. + + +Quote identifier used for execution, if any. + + + + + + upsertSwapConfigResult field + + +feeReceiverWalletAddress field + + +feeBps field + + +stableFeeBps field + + + + + + createTvcOperatorResult field + + +The unique identifier for the wallet containing TVC operator accounts + + +The unique identifier for the TVC operator + + +Public encryption key for this TVC operator + + +Public signing key for this TVC operator + + + + + + createTvcQuorumKeyResult field + + +The unique identifier for the TVC quorum key + + +Public key for the generated TVC quorum key + + + The unique identifier(s) for the generated TVC quorum key shares + + +item field + + + + + + + + + reEncryptTvcQuorumKeyShareResult field + + +The unique identifier for the provisioning quorum key share + + + + + + initImportSecretsResult field + + + Enclave ingress target keys along with metadata specific to the encryption suite. For enclave encrypt v1 this will be ServerTargetMsgV1. + + +item field + + + + + + + + + solSendTransactionResultV2 field + + +The send_transaction_status ID associated with the transaction submission + + + + + + claimSwapFeesResult field + + +Relay claim request ID submitted through the permit endpoint. + + + + + + earnSetWrapperStateResult field + + +Address of the updated Earn wrapper. + + +The wrapper's deposit state after this activity. + + + + + + claimEarnFeesResult field + + +Identifier to poll claim status and tx hash via GetClaimEarnFeesStatus. + + + + + + updateWalletAccountNameResult field + + +Unique identifier for a given Wallet Account. + + + + + + ethUndelegate7702Result field + + +The send_transaction_status ID associated with the undelegation transaction submission + + + + + + createSwapQuoteResult field + + + One or more provider quotes for this request. Today this contains a single Relay quote; pass quotes[i].quoteId to execute_swap_v2 to bind execution. + + +Identifier for this provider quote. Pass this value to execute_swap_v2 to bind execution to this exact quote. The signer is derived from the quote; clients do not resupply sign_with on execute. + + +Swap provider that produced this quote. + + +Estimated base-unit amount of the output asset. + + +Minimum acceptable base-unit amount of the output asset after slippage. + + +Quote expiration as a millisecond epoch string. + + +Provider-neutral maximum allowed slippage in basis points, echoed from the quote request when set. + + +Client fee in basis points applied for this pair. Informational only; already reflected in output_amount and min_output_amount. + + +Provider-estimated completion time in seconds, when available. + + + + + + + + + importSecretsResult field + + + Unique identifier for each imported secret, in the order the params were specified. + + +item field + + + + + + + + + + + + A list of objects representing a particular User's approval or rejection of a Consensus request, including all relevant metadata. + + +Unique identifier for a given Vote object. + + +Unique identifier for a given User. + + + user field + + +Unique identifier for a given User. + + +Human-readable name for a User. + + +The user's email address. + + +The user's phone number in E.164 format e.g. +13214567890 + + + A list of Authenticator parameters. + + + Types of transports that may be used by an Authenticator (e.g., USB, NFC, BLE). + + +item field + +Enum options: `AUTHENTICATOR_TRANSPORT_BLE`, `AUTHENTICATOR_TRANSPORT_INTERNAL`, `AUTHENTICATOR_TRANSPORT_NFC`, `AUTHENTICATOR_TRANSPORT_USB`, `AUTHENTICATOR_TRANSPORT_HYBRID` + + + + + + +attestationType field + + +Identifier indicating the type of the Security Key. + + +Unique identifier for a WebAuthn credential. + + +The type of Authenticator device. + + + credential field + + +The public component of a cryptographic key pair used to sign messages and transactions. + + +type field + +Enum options: `CREDENTIAL_TYPE_WEBAUTHN_AUTHENTICATOR`, `CREDENTIAL_TYPE_API_KEY_P256`, `CREDENTIAL_TYPE_RECOVER_USER_KEY_P256`, `CREDENTIAL_TYPE_API_KEY_SECP256K1`, `CREDENTIAL_TYPE_EMAIL_AUTH_KEY_P256`, `CREDENTIAL_TYPE_API_KEY_ED25519`, `CREDENTIAL_TYPE_OTP_AUTH_KEY_P256`, `CREDENTIAL_TYPE_READ_WRITE_SESSION_KEY_P256`, `CREDENTIAL_TYPE_OAUTH_KEY_P256`, `CREDENTIAL_TYPE_LOGIN` + + + +The session profile associated with this credential, if any. This field is only applicable for credentials of type CREDENTIAL_TYPE_LOGIN. + + + + + +Unique identifier for a given Authenticator. + + +Human-readable name for an Authenticator. + + + createdAt field + + +seconds field + + +nanos field + + + + + + updatedAt field + + +seconds field + + +nanos field + + + + + + + + + A list of API Key parameters. This field, if not needed, should be an empty array in your request body. + + + credential field + + +The public component of a cryptographic key pair used to sign messages and transactions. + + +type field + +Enum options: `CREDENTIAL_TYPE_WEBAUTHN_AUTHENTICATOR`, `CREDENTIAL_TYPE_API_KEY_P256`, `CREDENTIAL_TYPE_RECOVER_USER_KEY_P256`, `CREDENTIAL_TYPE_API_KEY_SECP256K1`, `CREDENTIAL_TYPE_EMAIL_AUTH_KEY_P256`, `CREDENTIAL_TYPE_API_KEY_ED25519`, `CREDENTIAL_TYPE_OTP_AUTH_KEY_P256`, `CREDENTIAL_TYPE_READ_WRITE_SESSION_KEY_P256`, `CREDENTIAL_TYPE_OAUTH_KEY_P256`, `CREDENTIAL_TYPE_LOGIN` + + + +The session profile associated with this credential, if any. This field is only applicable for credentials of type CREDENTIAL_TYPE_LOGIN. + + + + + +Unique identifier for a given API Key. + + +Human-readable name for an API Key. + + + createdAt field + + +seconds field + + +nanos field + + + + + + updatedAt field + + +seconds field + + +nanos field + + + + + +Optional window (in seconds) indicating how long the API Key should last. + + + + + + A list of User Tag IDs. + + +item field + + + + + + A list of Oauth Providers. + + +Unique identifier for an OAuth Provider + + +Human-readable name to identify a Provider. + + +The issuer of the token, typically a URL indicating the authentication server, e.g https://accounts.google.com + + +Expected audience ('aud' attribute of the signed token) which represents the app ID + + +Expected subject ('sub' attribute of the signed token) which represents the user ID + + + createdAt field + + +seconds field + + +nanos field + + + + + + updatedAt field + + +seconds field + + +nanos field + + + + + + + + + createdAt field + + +seconds field + + +nanos field + + + + + + updatedAt field + + +seconds field + + +nanos field + + + + + + A list of MFA Policies that define multi-factor authentication requirements for this user. + + +Unique identifier for a given MFA Policy. + + +Human-readable name for an MFA Policy. + + +A condition expression that evaluates to true or false, determining when this MFA policy applies. + + + An ordered list of authentication requirements. Each requirement must be satisfied sequentially to complete MFA. + + + A list of authentication methods for this MFA step. If only one method is provided, it is required. If multiple are provided, the user must satisfy ANY one of them. + + +type field + +Enum options: `AUTHENTICATION_TYPE_EMAIL_OTP`, `AUTHENTICATION_TYPE_SMS_OTP`, `AUTHENTICATION_TYPE_PASSKEY`, `AUTHENTICATION_TYPE_API_KEY`, `AUTHENTICATION_TYPE_OAUTH`, `AUTHENTICATION_TYPE_SESSION` + + + +Optional specific authenticator ID required (e.g., for requiring a specific session profile id) + + + + + + + + +The order in which this policy is evaluated relative to other MFA policies. + + +Optional human-readable notes added by a User to describe a particular MFA policy. + + + createdAt field + + +seconds field + + +nanos field + + + + + + updatedAt field + + +seconds field + + +nanos field + + + + + + + + + + + +Unique identifier for a given Activity object. + + +selection field + +Enum options: `VOTE_SELECTION_APPROVED`, `VOTE_SELECTION_REJECTED` + + + +The raw message being signed within a Vote. + + +The public component of a cryptographic key pair used to sign messages and transactions. + + +The signature applied to a particular vote. + + +Method used to produce a signature. + + + createdAt field + + +seconds field + + +nanos field + + + + + + + + + A list of App Proofs generated by enclaves during activity execution, providing verifiable attestations of performed operations. + + +scheme field + +Enum options: `SIGNATURE_SCHEME_EPHEMERAL_KEY_P256` + + + +Ephemeral public key. + + +JSON serialized AppProofPayload. + + +Signature over hashed proof_payload. + + + + + +An artifact verifying a User's action. + + +canApprove field + + +canReject field + + + createdAt field + + +seconds field + + +nanos field + + + + + + updatedAt field + + +seconds field + + +nanos field + + + + + + failure field + + +code field + + +message field + + + details field + + +@type field + + + + + + + + + + + + + +```bash title="cURL" +curl --request POST \ + --url https://api.turnkey.com/public/v1/query/list_activities \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header "X-Stamp: (see Authorizations)" \ + --data '{ + "organizationId": "", + "filterByStatus": [ + "" + ], + "paginationOptions": { + "limit": "", + "before": "", + "after": "" + }, + "filterByType": [ + "" + ] +}' +``` + +```javascript title="JavaScript" +import { Turnkey } from "@turnkey/sdk-server"; + +const turnkeyClient = new Turnkey({ + apiBaseUrl: "https://api.turnkey.com", + apiPublicKey: process.env.API_PUBLIC_KEY!, + apiPrivateKey: process.env.API_PRIVATE_KEY!, + defaultOrganizationId: process.env.ORGANIZATION_ID!, +}); + +const response = await turnkeyClient.apiClient().getActivities({ + organizationId: " (Unique identifier for a given organization.)", + filterByStatus: "" // Array of activity statuses filtering which activities will be listed in the response., + paginationOptions: { // paginationOptions field, + limit: " (A limit of the number of object to be returned, between 1 and 100. Defaults to 10.)", + before: " (A pagination cursor. This is an object ID that enables you to fetch all objects before this ID.)", + after: " (A pagination cursor. This is an object ID that enables you to fetch all objects after this ID.)", + }, + filterByType: "" // Array of activity types filtering which activities will be listed in the response. +}); +``` + + + + + +```json 200 +{ + "activities": [ + { + "id": "", + "organizationId": "", + "status": "", + "type": "", + "intent": { + "createOrganizationIntent": { + "organizationName": "", + "rootEmail": "", + "rootAuthenticator": { + "authenticatorName": "", + "userId": "", + "attestation": { + "id": "", + "type": "", + "rawId": "", + "authenticatorAttachment": "", + "response": { + "clientDataJson": "", + "attestationObject": "", + "transports": [ + "" + ], + "authenticatorAttachment": "" + }, + "clientExtensionResults": { + "appid": "", + "appidExclude": "", + "credProps": { + "rk": "" + } + } + }, + "challenge": "" + }, + "rootUserId": "" + }, + "createAuthenticatorsIntent": { + "authenticators": [ + { + "authenticatorName": "", + "userId": "", + "attestation": { + "id": "", + "type": "", + "rawId": "", + "authenticatorAttachment": "", + "response": { + "clientDataJson": "", + "attestationObject": "", + "transports": [ + "" + ], + "authenticatorAttachment": "" + }, + "clientExtensionResults": { + "appid": "", + "appidExclude": "", + "credProps": { + "rk": "" + } + } + }, + "challenge": "" + } + ], + "userId": "" + }, + "createUsersIntent": { + "users": [ + { + "userName": "", + "userEmail": "", + "accessType": "", + "apiKeys": [ + { + "apiKeyName": "", + "publicKey": "", + "expirationSeconds": "" + } + ], + "authenticators": [ + { + "authenticatorName": "", + "userId": "", + "attestation": { + "id": "", + "type": "", + "rawId": "", + "authenticatorAttachment": "", + "response": { + "clientDataJson": "", + "attestationObject": "", + "transports": [ + "" + ], + "authenticatorAttachment": "" + }, + "clientExtensionResults": { + "appid": "", + "appidExclude": "", + "credProps": { + "rk": "" + } + } + }, + "challenge": "" + } + ], + "userTags": [ + "" + ] + } + ] + }, + "createPrivateKeysIntent": { + "privateKeys": [ + { + "privateKeyName": "", + "curve": "", + "privateKeyTags": [ + "" + ], + "addressFormats": [ + "" + ] + } + ] + }, + "signRawPayloadIntent": { + "privateKeyId": "", + "payload": "", + "encoding": "", + "hashFunction": "" + }, + "createInvitationsIntent": { + "invitations": [ + { + "receiverUserName": "", + "receiverUserEmail": "", + "receiverUserTags": [ + "" + ], + "accessType": "", + "senderUserId": "" + } + ] + }, + "acceptInvitationIntent": { + "invitationId": "", + "userId": "", + "authenticator": { + "authenticatorName": "", + "userId": "", + "attestation": { + "id": "", + "type": "", + "rawId": "", + "authenticatorAttachment": "", + "response": { + "clientDataJson": "", + "attestationObject": "", + "transports": [ + "" + ], + "authenticatorAttachment": "" + }, + "clientExtensionResults": { + "appid": "", + "appidExclude": "", + "credProps": { + "rk": "" + } + } + }, + "challenge": "" + } + }, + "createPolicyIntent": { + "policyName": "", + "selectors": [ + { + "subject": "", + "operator": "", + "target": "" + } + ], + "effect": "", + "notes": "" + }, + "disablePrivateKeyIntent": { + "privateKeyId": "" + }, + "deleteUsersIntent": { + "userIds": [ + "" + ] + }, + "deleteAuthenticatorsIntent": { + "userId": "", + "authenticatorIds": [ + "" + ] + }, + "deleteInvitationIntent": { + "invitationId": "" + }, + "deleteOrganizationIntent": { + "organizationId": "" + }, + "deletePolicyIntent": { + "policyId": "" + }, + "createUserTagIntent": { + "userTagName": "", + "userIds": [ + "" + ] + }, + "deleteUserTagsIntent": { + "userTagIds": [ + "" + ] + }, + "signTransactionIntent": { + "privateKeyId": "", + "unsignedTransaction": "", + "type": "" + }, + "createApiKeysIntent": { + "apiKeys": [ + { + "apiKeyName": "", + "publicKey": "", + "expirationSeconds": "" + } + ], + "userId": "" + }, + "deleteApiKeysIntent": { + "userId": "", + "apiKeyIds": [ + "" + ] + }, + "approveActivityIntent": { + "fingerprint": "" + }, + "rejectActivityIntent": { + "fingerprint": "" + }, + "createPrivateKeyTagIntent": { + "privateKeyTagName": "", + "privateKeyIds": [ + "" + ] + }, + "deletePrivateKeyTagsIntent": { + "privateKeyTagIds": [ + "" + ] + }, + "createPolicyIntentV2": { + "policyName": "", + "selectors": [ + { + "subject": "", + "operator": "", + "targets": [ + "" + ] + } + ], + "effect": "", + "notes": "" + }, + "setPaymentMethodIntent": { + "number": "", + "cvv": "", + "expiryMonth": "", + "expiryYear": "", + "cardHolderEmail": "", + "cardHolderName": "" + }, + "activateBillingTierIntent": { + "productId": "", + "orbPlanId": "" + }, + "deletePaymentMethodIntent": { + "paymentMethodId": "" + }, + "createPolicyIntentV3": { + "policyName": "", + "effect": "", + "condition": "", + "consensus": "", + "notes": "", + "time": "" + }, + "createApiOnlyUsersIntent": { + "apiOnlyUsers": [ + { + "userName": "", + "userEmail": "", + "userTags": [ + "" + ], + "apiKeys": [ + { + "apiKeyName": "", + "publicKey": "", + "expirationSeconds": "" + } + ] + } + ] + }, + "updateRootQuorumIntent": { + "threshold": "", + "userIds": [ + "" + ] + }, + "updateUserTagIntent": { + "userTagId": "", + "newUserTagName": "", + "addUserIds": [ + "" + ], + "removeUserIds": [ + "" + ] + }, + "updatePrivateKeyTagIntent": { + "privateKeyTagId": "", + "newPrivateKeyTagName": "", + "addPrivateKeyIds": [ + "" + ], + "removePrivateKeyIds": [ + "" + ] + }, + "createAuthenticatorsIntentV2": { + "authenticators": [ + { + "authenticatorName": "", + "challenge": "", + "attestation": { + "credentialId": "", + "clientDataJson": "", + "attestationObject": "", + "transports": [ + "" + ] + } + } + ], + "userId": "" + }, + "acceptInvitationIntentV2": { + "invitationId": "", + "userId": "", + "authenticator": { + "authenticatorName": "", + "challenge": "", + "attestation": { + "credentialId": "", + "clientDataJson": "", + "attestationObject": "", + "transports": [ + "" + ] + } + } + }, + "createOrganizationIntentV2": { + "organizationName": "", + "rootEmail": "", + "rootAuthenticator": { + "authenticatorName": "", + "challenge": "", + "attestation": { + "credentialId": "", + "clientDataJson": "", + "attestationObject": "", + "transports": [ + "" + ] + } + }, + "rootUserId": "" + }, + "createUsersIntentV2": { + "users": [ + { + "userName": "", + "userEmail": "", + "apiKeys": [ + { + "apiKeyName": "", + "publicKey": "", + "expirationSeconds": "" + } + ], + "authenticators": [ + { + "authenticatorName": "", + "challenge": "", + "attestation": { + "credentialId": "", + "clientDataJson": "", + "attestationObject": "", + "transports": [ + "" + ] + } + } + ], + "userTags": [ + "" + ] + } + ] + }, + "createSubOrganizationIntent": { + "name": "", + "rootAuthenticator": { + "authenticatorName": "", + "challenge": "", + "attestation": { + "credentialId": "", + "clientDataJson": "", + "attestationObject": "", + "transports": [ + "" + ] + } + } + }, + "createSubOrganizationIntentV2": { + "subOrganizationName": "", + "rootUsers": [ + { + "userName": "", + "userEmail": "", + "apiKeys": [ + { + "apiKeyName": "", + "publicKey": "", + "expirationSeconds": "" + } + ], + "authenticators": [ + { + "authenticatorName": "", + "challenge": "", + "attestation": { + "credentialId": "", + "clientDataJson": "", + "attestationObject": "", + "transports": [ + "" + ] + } + } + ] + } + ], + "rootQuorumThreshold": "" + }, + "updateAllowedOriginsIntent": { + "allowedOrigins": [ + "" + ] + }, + "createPrivateKeysIntentV2": { + "privateKeys": [ + { + "privateKeyName": "", + "curve": "", + "privateKeyTags": [ + "" + ], + "addressFormats": [ + "" + ] + } + ] + }, + "updateUserIntent": { + "userId": "", + "userName": "", + "userEmail": "", + "userTagIds": [ + "" + ], + "userPhoneNumber": "" + }, + "updatePolicyIntent": { + "policyId": "", + "policyName": "", + "policyEffect": "", + "policyCondition": "", + "policyConsensus": "", + "policyNotes": "" + }, + "setPaymentMethodIntentV2": { + "paymentMethodId": "", + "cardHolderEmail": "", + "cardHolderName": "" + }, + "createSubOrganizationIntentV3": { + "subOrganizationName": "", + "rootUsers": [ + { + "userName": "", + "userEmail": "", + "apiKeys": [ + { + "apiKeyName": "", + "publicKey": "", + "expirationSeconds": "" + } + ], + "authenticators": [ + { + "authenticatorName": "", + "challenge": "", + "attestation": { + "credentialId": "", + "clientDataJson": "", + "attestationObject": "", + "transports": [ + "" + ] + } + } + ] + } + ], + "rootQuorumThreshold": "", + "privateKeys": [ + { + "privateKeyName": "", + "curve": "", + "privateKeyTags": [ + "" + ], + "addressFormats": [ + "" + ] + } + ] + }, + "createWalletIntent": { + "walletName": "", + "accounts": [ + { + "curve": "", + "pathFormat": "", + "path": "", + "addressFormat": "", + "name": "" + } + ], + "mnemonicLength": "" + }, + "createWalletAccountsIntent": { + "walletId": "", + "accounts": [ + { + "curve": "", + "pathFormat": "", + "path": "", + "addressFormat": "", + "name": "" + } + ], + "persist": "" + }, + "initUserEmailRecoveryIntent": { + "email": "", + "targetPublicKey": "", + "expirationSeconds": "", + "emailCustomization": { + "appName": "", + "logoUrl": "", + "magicLinkTemplate": "", + "templateVariables": "", + "templateId": "" + }, + "sendFromEmailAddress": "", + "sendFromEmailSenderName": "", + "replyToEmailAddress": "" + }, + "recoverUserIntent": { + "authenticator": { + "authenticatorName": "", + "challenge": "", + "attestation": { + "credentialId": "", + "clientDataJson": "", + "attestationObject": "", + "transports": [ + "" + ] + } + }, + "userId": "" + }, + "setOrganizationFeatureIntent": { + "name": "", + "value": "" + }, + "removeOrganizationFeatureIntent": { + "name": "" + }, + "signRawPayloadIntentV2": { + "signWith": "", + "payload": "", + "encoding": "", + "hashFunction": "" + }, + "signTransactionIntentV2": { + "signWith": "", + "unsignedTransaction": "", + "type": "" + }, + "exportPrivateKeyIntent": { + "privateKeyId": "", + "targetPublicKey": "" + }, + "exportWalletIntent": { + "walletId": "", + "targetPublicKey": "", + "language": "" + }, + "createSubOrganizationIntentV4": { + "subOrganizationName": "", + "rootUsers": [ + { + "userName": "", + "userEmail": "", + "apiKeys": [ + { + "apiKeyName": "", + "publicKey": "", + "expirationSeconds": "" + } + ], + "authenticators": [ + { + "authenticatorName": "", + "challenge": "", + "attestation": { + "credentialId": "", + "clientDataJson": "", + "attestationObject": "", + "transports": [ + "" + ] + } + } + ] + } + ], + "rootQuorumThreshold": "", + "wallet": { + "walletName": "", + "accounts": [ + { + "curve": "", + "pathFormat": "", + "path": "", + "addressFormat": "", + "name": "" + } + ], + "mnemonicLength": "" + }, + "disableEmailRecovery": "", + "disableEmailAuth": "" + }, + "emailAuthIntent": { + "email": "", + "targetPublicKey": "", + "apiKeyName": "", + "expirationSeconds": "", + "emailCustomization": { + "appName": "", + "logoUrl": "", + "magicLinkTemplate": "", + "templateVariables": "", + "templateId": "" + }, + "invalidateExisting": "", + "sendFromEmailAddress": "", + "sendFromEmailSenderName": "", + "replyToEmailAddress": "" + }, + "exportWalletAccountIntent": { + "address": "", + "targetPublicKey": "" + }, + "initImportWalletIntent": { + "userId": "" + }, + "importWalletIntent": { + "userId": "", + "walletName": "", + "encryptedBundle": "", + "accounts": [ + { + "curve": "", + "pathFormat": "", + "path": "", + "addressFormat": "", + "name": "" + } + ] + }, + "initImportPrivateKeyIntent": { + "userId": "" + }, + "importPrivateKeyIntent": { + "userId": "", + "privateKeyName": "", + "encryptedBundle": "", + "curve": "", + "addressFormats": [ + "" + ] + }, + "createPoliciesIntent": { + "policies": [ + { + "policyName": "", + "effect": "", + "condition": "", + "consensus": "", + "notes": "", + "time": "" + } + ] + }, + "signRawPayloadsIntent": { + "signWith": "", + "payloads": [ + "" + ], + "encoding": "", + "hashFunction": "" + }, + "createReadOnlySessionIntent": "", + "createOauthProvidersIntent": { + "userId": "", + "oauthProviders": [ + { + "providerName": "", + "oidcToken": "" + } + ] + }, + "deleteOauthProvidersIntent": { + "userId": "", + "providerIds": [ + "" + ] + }, + "createSubOrganizationIntentV5": { + "subOrganizationName": "", + "rootUsers": [ + { + "userName": "", + "userEmail": "", + "apiKeys": [ + { + "apiKeyName": "", + "publicKey": "", + "expirationSeconds": "" + } + ], + "authenticators": [ + { + "authenticatorName": "", + "challenge": "", + "attestation": { + "credentialId": "", + "clientDataJson": "", + "attestationObject": "", + "transports": [ + "" + ] + } + } + ], + "oauthProviders": [ + { + "providerName": "", + "oidcToken": "" + } + ] + } + ], + "rootQuorumThreshold": "", + "wallet": { + "walletName": "", + "accounts": [ + { + "curve": "", + "pathFormat": "", + "path": "", + "addressFormat": "", + "name": "" + } + ], + "mnemonicLength": "" + }, + "disableEmailRecovery": "", + "disableEmailAuth": "" + }, + "oauthIntent": { + "oidcToken": "", + "targetPublicKey": "", + "apiKeyName": "", + "expirationSeconds": "", + "invalidateExisting": "" + }, + "createApiKeysIntentV2": { + "apiKeys": [ + { + "apiKeyName": "", + "publicKey": "", + "curveType": "", + "expirationSeconds": "" + } + ], + "userId": "" + }, + "createReadWriteSessionIntent": { + "targetPublicKey": "", + "email": "", + "apiKeyName": "", + "expirationSeconds": "" + }, + "emailAuthIntentV2": { + "email": "", + "targetPublicKey": "", + "apiKeyName": "", + "expirationSeconds": "", + "emailCustomization": { + "appName": "", + "logoUrl": "", + "magicLinkTemplate": "", + "templateVariables": "", + "templateId": "" + }, + "invalidateExisting": "", + "sendFromEmailAddress": "", + "sendFromEmailSenderName": "", + "replyToEmailAddress": "" + }, + "createSubOrganizationIntentV6": { + "subOrganizationName": "", + "rootUsers": [ + { + "userName": "", + "userEmail": "", + "apiKeys": [ + { + "apiKeyName": "", + "publicKey": "", + "curveType": "", + "expirationSeconds": "" + } + ], + "authenticators": [ + { + "authenticatorName": "", + "challenge": "", + "attestation": { + "credentialId": "", + "clientDataJson": "", + "attestationObject": "", + "transports": [ + "" + ] + } + } + ], + "oauthProviders": [ + { + "providerName": "", + "oidcToken": "" + } + ] + } + ], + "rootQuorumThreshold": "", + "wallet": { + "walletName": "", + "accounts": [ + { + "curve": "", + "pathFormat": "", + "path": "", + "addressFormat": "", + "name": "" + } + ], + "mnemonicLength": "" + }, + "disableEmailRecovery": "", + "disableEmailAuth": "" + }, + "deletePrivateKeysIntent": { + "privateKeyIds": [ + "" + ], + "deleteWithoutExport": "" + }, + "deleteWalletsIntent": { + "walletIds": [ + "" + ], + "deleteWithoutExport": "" + }, + "createReadWriteSessionIntentV2": { + "targetPublicKey": "", + "userId": "", + "apiKeyName": "", + "expirationSeconds": "", + "invalidateExisting": "" + }, + "deleteSubOrganizationIntent": { + "deleteWithoutExport": "" + }, + "initOtpAuthIntent": { + "otpType": "", + "contact": "", + "emailCustomization": { + "appName": "", + "logoUrl": "", + "magicLinkTemplate": "", + "templateVariables": "", + "templateId": "" + }, + "smsCustomization": { + "template": "" + }, + "userIdentifier": "", + "sendFromEmailAddress": "", + "sendFromEmailSenderName": "", + "replyToEmailAddress": "" + }, + "otpAuthIntent": { + "otpId": "", + "otpCode": "", + "targetPublicKey": "", + "apiKeyName": "", + "expirationSeconds": "", + "invalidateExisting": "" + }, + "createSubOrganizationIntentV7": { + "subOrganizationName": "", + "rootUsers": [ + { + "userName": "", + "userEmail": "", + "userPhoneNumber": "", + "apiKeys": [ + { + "apiKeyName": "", + "publicKey": "", + "curveType": "", + "expirationSeconds": "" + } + ], + "authenticators": [ + { + "authenticatorName": "", + "challenge": "", + "attestation": { + "credentialId": "", + "clientDataJson": "", + "attestationObject": "", + "transports": [ + "" + ] + } + } + ], + "oauthProviders": [ + { + "providerName": "", + "oidcToken": "" + } + ] + } + ], + "rootQuorumThreshold": "", + "wallet": { + "walletName": "", + "accounts": [ + { + "curve": "", + "pathFormat": "", + "path": "", + "addressFormat": "", + "name": "" + } + ], + "mnemonicLength": "" + }, + "disableEmailRecovery": "", + "disableEmailAuth": "", + "disableSmsAuth": "", + "disableOtpEmailAuth": "", + "verificationToken": "", + "clientSignature": { + "publicKey": "", + "scheme": "", + "message": "", + "signature": "" + } + }, + "updateWalletIntent": { + "walletId": "", + "walletName": "" + }, + "updatePolicyIntentV2": { + "policyId": "", + "policyName": "", + "policyEffect": "", + "policyCondition": "", + "policyConsensus": "", + "policyNotes": "", + "time": "" + }, + "createUsersIntentV3": { + "users": [ + { + "userName": "", + "userEmail": "", + "userPhoneNumber": "", + "apiKeys": [ + { + "apiKeyName": "", + "publicKey": "", + "curveType": "", + "expirationSeconds": "" + } + ], + "authenticators": [ + { + "authenticatorName": "", + "challenge": "", + "attestation": { + "credentialId": "", + "clientDataJson": "", + "attestationObject": "", + "transports": [ + "" + ] + } + } + ], + "oauthProviders": [ + { + "providerName": "", + "oidcToken": "" + } + ], + "userTags": [ + "" + ] + } + ] + }, + "initOtpAuthIntentV2": { + "otpType": "", + "contact": "", + "otpLength": "", + "emailCustomization": { + "appName": "", + "logoUrl": "", + "magicLinkTemplate": "", + "templateVariables": "", + "templateId": "" + }, + "smsCustomization": { + "template": "" + }, + "userIdentifier": "", + "sendFromEmailAddress": "", + "alphanumeric": "", + "sendFromEmailSenderName": "", + "replyToEmailAddress": "" + }, + "initOtpIntent": { + "otpType": "", + "contact": "", + "otpLength": "", + "emailCustomization": { + "appName": "", + "logoUrl": "", + "magicLinkTemplate": "", + "templateVariables": "", + "templateId": "" + }, + "smsCustomization": { + "template": "" + }, + "userIdentifier": "", + "sendFromEmailAddress": "", + "alphanumeric": "", + "sendFromEmailSenderName": "", + "expirationSeconds": "", + "replyToEmailAddress": "" + }, + "verifyOtpIntent": { + "otpId": "", + "otpCode": "", + "expirationSeconds": "", + "publicKey": "" + }, + "otpLoginIntent": { + "verificationToken": "", + "publicKey": "", + "expirationSeconds": "", + "invalidateExisting": "", + "clientSignature": { + "publicKey": "", + "scheme": "", + "message": "", + "signature": "" + }, + "sessionProfileId": "" + }, + "stampLoginIntent": { + "publicKey": "", + "expirationSeconds": "", + "invalidateExisting": "", + "sessionProfileId": "" + }, + "oauthLoginIntent": { + "oidcToken": "", + "publicKey": "", + "expirationSeconds": "", + "invalidateExisting": "", + "sessionProfileId": "" + }, + "updateUserNameIntent": { + "userId": "", + "userName": "" + }, + "updateUserEmailIntent": { + "userId": "", + "userEmail": "", + "verificationToken": "" + }, + "updateUserPhoneNumberIntent": { + "userId": "", + "userPhoneNumber": "", + "verificationToken": "" + }, + "initFiatOnRampIntent": { + "onrampProvider": "", + "walletAddress": "", + "network": "", + "cryptoCurrencyCode": "", + "fiatCurrencyCode": "", + "fiatCurrencyAmount": "", + "paymentMethod": "", + "countryCode": "", + "countrySubdivisionCode": "", + "sandboxMode": "", + "urlForSignature": "" + }, + "createSmartContractInterfaceIntent": { + "smartContractAddress": "", + "smartContractInterface": "", + "type": "", + "label": "", + "notes": "" + }, + "deleteSmartContractInterfaceIntent": { + "smartContractInterfaceId": "" + }, + "enableAuthProxyIntent": "", + "disableAuthProxyIntent": "", + "updateAuthProxyConfigIntent": { + "allowedOrigins": [ + "" + ], + "allowedAuthMethods": [ + "" + ], + "sendFromEmailAddress": "", + "replyToEmailAddress": "", + "emailAuthTemplateId": "", + "otpTemplateId": "", + "emailCustomizationParams": { + "appName": "", + "logoUrl": "", + "magicLinkTemplate": "", + "templateVariables": "", + "templateId": "" + }, + "smsCustomizationParams": { + "template": "" + }, + "walletKitSettings": { + "enabledSocialProviders": [ + "" + ], + "oauthClientIds": "", + "oauthRedirectUrl": "" + }, + "otpExpirationSeconds": "", + "verificationTokenExpirationSeconds": "", + "sessionExpirationSeconds": "", + "otpAlphanumeric": "", + "otpLength": "", + "sendFromEmailSenderName": "", + "verificationTokenRequiredForGetAccountPii": "", + "socialLinkingClientIds": [ + "" + ], + "captchaEnabled": "" + }, + "createOauth2CredentialIntent": { + "provider": "", + "clientId": "", + "encryptedClientSecret": "" + }, + "updateOauth2CredentialIntent": { + "oauth2CredentialId": "", + "provider": "", + "clientId": "", + "encryptedClientSecret": "" + }, + "deleteOauth2CredentialIntent": { + "oauth2CredentialId": "" + }, + "oauth2AuthenticateIntent": { + "oauth2CredentialId": "", + "authCode": "", + "redirectUri": "", + "codeVerifier": "", + "nonce": "", + "bearerTokenTargetPublicKey": "" + }, + "deleteWalletAccountsIntent": { + "walletAccountIds": [ + "" + ], + "deleteWithoutExport": "" + }, + "deletePoliciesIntent": { + "policyIds": [ + "" + ] + }, + "ethSendRawTransactionIntent": { + "signedTransaction": "", + "caip2": "" + }, + "ethSendTransactionIntent": { + "from": "", + "sponsor": "", + "caip2": "", + "to": "", + "value": "", + "data": "", + "nonce": "", + "gasLimit": "", + "maxFeePerGas": "", + "maxPriorityFeePerGas": "", + "deadline": "", + "gasStationNonce": "" + }, + "createFiatOnRampCredentialIntent": { + "onrampProvider": "", + "projectId": "", + "publishableApiKey": "", + "encryptedSecretApiKey": "", + "encryptedPrivateApiKey": "", + "sandboxMode": "" + }, + "updateFiatOnRampCredentialIntent": { + "fiatOnrampCredentialId": "", + "onrampProvider": "", + "projectId": "", + "publishableApiKey": "", + "encryptedSecretApiKey": "", + "encryptedPrivateApiKey": "" + }, + "deleteFiatOnRampCredentialIntent": { + "fiatOnrampCredentialId": "" + }, + "emailAuthIntentV3": { + "email": "", + "targetPublicKey": "", + "apiKeyName": "", + "expirationSeconds": "", + "emailCustomization": { + "appName": "", + "logoUrl": "", + "magicLinkTemplate": "", + "templateVariables": "", + "templateId": "" + }, + "invalidateExisting": "", + "sendFromEmailAddress": "", + "sendFromEmailSenderName": "", + "replyToEmailAddress": "" + }, + "initUserEmailRecoveryIntentV2": { + "email": "", + "targetPublicKey": "", + "expirationSeconds": "", + "emailCustomization": { + "appName": "", + "logoUrl": "", + "magicLinkTemplate": "", + "templateVariables": "", + "templateId": "" + }, + "sendFromEmailAddress": "", + "sendFromEmailSenderName": "", + "replyToEmailAddress": "" + }, + "initOtpIntentV2": { + "otpType": "", + "contact": "", + "otpLength": "", + "appName": "", + "emailCustomization": { + "logoUrl": "", + "magicLinkTemplate": "", + "templateVariables": "", + "templateId": "" + }, + "smsCustomization": { + "template": "" + }, + "userIdentifier": "", + "sendFromEmailAddress": "", + "alphanumeric": "", + "sendFromEmailSenderName": "", + "expirationSeconds": "", + "replyToEmailAddress": "" + }, + "initOtpAuthIntentV3": { + "otpType": "", + "contact": "", + "otpLength": "", + "appName": "", + "emailCustomization": { + "logoUrl": "", + "magicLinkTemplate": "", + "templateVariables": "", + "templateId": "" + }, + "smsCustomization": { + "template": "" + }, + "userIdentifier": "", + "sendFromEmailAddress": "", + "alphanumeric": "", + "sendFromEmailSenderName": "", + "expirationSeconds": "", + "replyToEmailAddress": "" + }, + "upsertGasUsageConfigIntent": { + "orgWindowLimitUsd": "", + "subOrgWindowLimitUsd": "", + "windowDurationMinutes": "", + "enabled": "", + "solanaConfig": { + "rentPrefundEnabled": "" + } + }, + "createTvcAppIntent": { + "name": "", + "quorumPublicKey": "", + "manifestSetId": "", + "manifestSetParams": { + "name": "", + "newOperators": [ + { + "name": "", + "publicKey": "" + } + ], + "existingOperatorIds": [ + "" + ], + "threshold": "" + }, + "shareSetId": "", + "shareSetParams": { + "name": "", + "newOperators": [ + { + "name": "", + "publicKey": "" + } + ], + "existingOperatorIds": [ + "" + ], + "threshold": "" + }, + "enableEgress": "", + "enableDebugModeDeployments": "" + }, + "createTvcDeploymentIntent": { + "appId": "", + "qosVersion": "", + "pivotContainerImageUrl": "", + "pivotPath": "", + "pivotArgs": [ + "" + ], + "expectedPivotDigest": "", + "nonce": "", + "pivotContainerEncryptedPullSecret": "", + "debugMode": "", + "healthCheckType": "", + "healthCheckPort": "", + "publicIngressPort": "", + "replicas": "" + }, + "createTvcManifestApprovalsIntent": { + "manifestId": "", + "approvals": [ + { + "operatorId": "", + "signature": "" + } + ] + }, + "solSendTransactionIntent": { + "unsignedTransaction": "", + "signWith": "", + "sponsor": "", + "caip2": "", + "recentBlockhash": "" + }, + "initOtpIntentV3": { + "otpType": "", + "contact": "", + "appName": "", + "otpLength": "", + "emailCustomization": { + "logoUrl": "", + "magicLinkTemplate": "", + "templateVariables": "", + "templateId": "" + }, + "smsCustomization": { + "template": "" + }, + "userIdentifier": "", + "sendFromEmailAddress": "", + "alphanumeric": "", + "sendFromEmailSenderName": "", + "expirationSeconds": "", + "replyToEmailAddress": "" + }, + "verifyOtpIntentV2": { + "otpId": "", + "encryptedOtpBundle": "", + "expirationSeconds": "" + }, + "otpLoginIntentV2": { + "verificationToken": "", + "publicKey": "", + "clientSignature": { + "publicKey": "", + "scheme": "", + "message": "", + "signature": "" + }, + "expirationSeconds": "", + "invalidateExisting": "", + "sessionProfileId": "" + }, + "updateOrganizationNameIntent": { + "organizationName": "" + }, + "createSubOrganizationIntentV8": { + "subOrganizationName": "", + "rootUsers": [ + { + "userName": "", + "userEmail": "", + "userPhoneNumber": "", + "apiKeys": [ + { + "apiKeyName": "", + "publicKey": "", + "curveType": "", + "expirationSeconds": "" + } + ], + "authenticators": [ + { + "authenticatorName": "", + "challenge": "", + "attestation": { + "credentialId": "", + "clientDataJson": "", + "attestationObject": "", + "transports": [ + "" + ] + } + } + ], + "oauthProviders": [ + { + "providerName": "", + "oidcToken": "", + "oidcClaims": { + "iss": "", + "sub": "", + "aud": "" + } + } + ] + } + ], + "rootQuorumThreshold": "", + "wallet": { + "walletName": "", + "accounts": [ + { + "curve": "", + "pathFormat": "", + "path": "", + "addressFormat": "", + "name": "" + } + ], + "mnemonicLength": "" + }, + "disableEmailRecovery": "", + "disableEmailAuth": "", + "disableSmsAuth": "", + "disableOtpEmailAuth": "", + "verificationToken": "", + "clientSignature": { + "publicKey": "", + "scheme": "", + "message": "", + "signature": "" + } + }, + "createOauthProvidersIntentV2": { + "userId": "", + "oauthProviders": [ + { + "providerName": "", + "oidcToken": "", + "oidcClaims": { + "iss": "", + "sub": "", + "aud": "" + } + } + ] + }, + "createUsersIntentV4": { + "users": [ + { + "userName": "", + "userEmail": "", + "userPhoneNumber": "", + "apiKeys": [ + { + "apiKeyName": "", + "publicKey": "", + "curveType": "", + "expirationSeconds": "" + } + ], + "authenticators": [ + { + "authenticatorName": "", + "challenge": "", + "attestation": { + "credentialId": "", + "clientDataJson": "", + "attestationObject": "", + "transports": [ + "" + ] + } + } + ], + "oauthProviders": [ + { + "providerName": "", + "oidcToken": "", + "oidcClaims": { + "iss": "", + "sub": "", + "aud": "" + } + } + ], + "userTags": [ + "" + ] + } + ] + }, + "createWebhookEndpointIntent": { + "url": "", + "name": "", + "subscriptions": [ + { + "eventType": "", + "filtersJson": "", + "isActive": "" + } + ] + }, + "updateWebhookEndpointIntent": { + "endpointId": "", + "url": "", + "name": "", + "isActive": "" + }, + "deleteWebhookEndpointIntent": { + "endpointId": "" + }, + "setIpAllowlistIntent": { + "publicKey": "", + "enabled": "", + "rules": [ + { + "cidr": "", + "label": "" + } + ], + "onEvaluationError": "" + }, + "removeIpAllowlistIntent": { + "publicKey": "" + }, + "updateTvcAppLiveDeploymentIntent": { + "deploymentId": "" + }, + "deleteTvcDeploymentIntent": { + "deploymentId": "" + }, + "deleteTvcAppAndDeploymentsIntent": { + "appId": "" + }, + "restoreTvcDeploymentIntent": { + "deploymentId": "" + }, + "sparkSignFrostIntent": { + "signWith": "", + "signatures": [ + { + "derivation": { + "identity": "", + "signingLeaf": { + "leafId": "" + }, + "deposit": "", + "staticDeposit": { + "index": "" + }, + "htlcPreimage": "" + }, + "message": "", + "verifyingKey": "", + "operatorCommitments": [ + { + "id": "", + "hiding": "", + "binding": "" + } + ], + "adaptorPublicKey": "" + } + ] + }, + "sparkPrepareTransferIntent": { + "signWith": "", + "transfer": { + "transferId": "", + "leaves": [ + { + "leafId": "", + "oldLeafDerivation": { + "identity": "", + "signingLeaf": { + "leafId": "" + }, + "deposit": "", + "staticDeposit": { + "index": "" + }, + "htlcPreimage": "" + }, + "newLeafDerivation": { + "identity": "", + "signingLeaf": { + "leafId": "" + }, + "deposit": "", + "staticDeposit": { + "index": "" + }, + "htlcPreimage": "" + }, + "refundSignature": "", + "directRefundSignature": "", + "directFromCpfpRefundSignature": "" + } + ], + "threshold": "", + "operatorRecipients": [ + { + "operatorId": "", + "encryptionPublicKey": "" + } + ], + "receiverPublicKey": "" + } + }, + "sparkClaimTransferIntent": { + "signWith": "", + "claim": { + "leaves": [ + { + "leafId": "", + "ciphertext": "", + "senderSignature": "" + } + ], + "threshold": "", + "operatorRecipients": [ + { + "operatorId": "", + "encryptionPublicKey": "" + } + ], + "transferId": "", + "senderIdentityPublicKey": "" + } + }, + "sparkPrepareLightningReceiveIntent": { + "signWith": "", + "lightningReceive": { + "threshold": "", + "operatorRecipients": [ + { + "operatorId": "", + "encryptionPublicKey": "" + } + ] + } + }, + "postTvcQuorumKeyShareIntent": { + "deploymentId": "", + "ephemeralPublicKeyHex": "", + "shareApprovalBundle": { + "operatorId": "", + "reEncryptedShareHex": "", + "signature": "" + } + }, + "ethSendTransactionIntentV2": { + "from": "", + "caip2": "", + "sponsor": "", + "nonce": "", + "gasLimit": "", + "maxFeePerGas": "", + "maxPriorityFeePerGas": "", + "deadline": "", + "gasStationNonce": "", + "calls": [ + { + "to": "", + "value": "", + "data": "" + } + ] + }, + "createMfaPolicyIntent": { + "userId": "", + "mfaPolicyName": "", + "condition": "", + "requiredAuthenticationMethods": [ + { + "any": [ + { + "type": "", + "id": "" + } + ] + } + ], + "order": "", + "notes": "" + }, + "updateMfaPolicyIntent": { + "userId": "", + "mfaPolicyId": "", + "mfaPolicyName": "", + "condition": "", + "requiredAuthenticationMethods": [ + { + "any": [ + { + "type": "", + "id": "" + } + ] + } + ], + "order": "", + "notes": "" + }, + "deleteMfaPolicyIntent": { + "userId": "", + "mfaPolicyId": "" + }, + "createSessionProfileIntent": { + "sessionProfileName": "", + "scope": "", + "expirationSeconds": "", + "notes": "" + }, + "earnDeployWrapperIntent": { + "vaultAddress": "", + "chainCaip2": "", + "clientFeeBps": "", + "clientFeeWallet": "" + }, + "earnDepositIntent": { + "wrapperAddress": "", + "signWith": "", + "assets": "", + "chainCaip2": "", + "sponsor": "" + }, + "earnWithdrawIntent": { + "wrapperAddress": "", + "signWith": "", + "chainCaip2": "", + "sponsor": "", + "amountValue": "" + }, + "executeSwapIntent": { + "inputToken": "", + "outputToken": "", + "inputAmount": "", + "walletAccount": "", + "sponsor": "", + "slippage": "", + "provider": "", + "minOutputAmount": "" + }, + "upsertSwapConfigIntent": { + "feeReceiverWalletAddress": "", + "feeBps": "", + "stableFeeBps": "" + }, + "createTvcOperatorIntent": { + "walletName": "", + "walletId": "", + "path": "", + "operatorName": "" + }, + "createTvcQuorumKeyIntent": { + "threshold": "", + "operatorEncryptKeys": [ + "" + ] + }, + "reEncryptTvcQuorumKeyShareIntent": { + "attestationDocB64": "", + "manifestB64": "", + "operatorEncryptKey": "", + "operatorSignKey": "", + "deploymentId": "", + "appQuorumKey": "" + }, + "initImportSecretsIntent": { + "encryptionSuite": "", + "numSecrets": "" + }, + "solSendTransactionIntentV2": { + "unsignedTransaction": "", + "signWiths": [ + "" + ], + "sponsor": "", + "caip2": "", + "recentBlockhash": "" + }, + "claimSwapFeesIntent": "", + "earnSetWrapperStateIntent": { + "wrapperAddress": "", + "depositsDisabled": "" + }, + "claimEarnFeesIntent": { + "wrapperAddress": "" + }, + "updateWalletAccountNameIntent": { + "walletAccountId": "", + "name": "" + }, + "ethUndelegate7702Intent": { + "from": "", + "caip2": "", + "nonce": "", + "gasLimit": "", + "maxFeePerGas": "", + "maxPriorityFeePerGas": "" + }, + "executeSwapIntentV2": { + "quoteId": "", + "inputToken": "", + "inputAmount": "", + "outputToken": "", + "quotedOutputAmount": "", + "minOutputAmount": "", + "sponsor": "", + "evmNonce": "", + "recentBlockhash": "", + "gasStationNonce": "" + }, + "createSwapQuoteIntent": { + "signWith": "", + "inputToken": "", + "outputToken": "", + "inputAmount": "", + "slippageBps": "" + }, + "importSecretsIntent": { + "secrets": [ + { + "name": "", + "secretPayload": "", + "targetPublicKey": "", + "encryptionSuite": "", + "staticProperties": [ + { + "key": "", + "value": "" + } + ] + } + ] + } + }, + "result": { + "createOrganizationResult": { + "organizationId": "" + }, + "createAuthenticatorsResult": { + "authenticatorIds": [ + "" + ] + }, + "createUsersResult": { + "userIds": [ + "" + ] + }, + "createPrivateKeysResult": { + "privateKeyIds": [ + "" + ] + }, + "createInvitationsResult": { + "invitationIds": [ + "" + ] + }, + "acceptInvitationResult": { + "invitationId": "", + "userId": "" + }, + "signRawPayloadResult": { + "r": "", + "s": "", + "v": "" + }, + "createPolicyResult": { + "policyId": "" + }, + "disablePrivateKeyResult": { + "privateKeyId": "" + }, + "deleteUsersResult": { + "userIds": [ + "" + ] + }, + "deleteAuthenticatorsResult": { + "authenticatorIds": [ + "" + ] + }, + "deleteInvitationResult": { + "invitationId": "" + }, + "deleteOrganizationResult": { + "organizationId": "" + }, + "deletePolicyResult": { + "policyId": "" + }, + "createUserTagResult": { + "userTagId": "", + "userIds": [ + "" + ] + }, + "deleteUserTagsResult": { + "userTagIds": [ + "" + ], + "userIds": [ + "" + ] + }, + "signTransactionResult": { + "signedTransaction": "" + }, + "deleteApiKeysResult": { + "apiKeyIds": [ + "" + ] + }, + "createApiKeysResult": { + "apiKeyIds": [ + "" + ] + }, + "createPrivateKeyTagResult": { + "privateKeyTagId": "", + "privateKeyIds": [ + "" + ] + }, + "deletePrivateKeyTagsResult": { + "privateKeyTagIds": [ + "" + ], + "privateKeyIds": [ + "" + ] + }, + "setPaymentMethodResult": { + "lastFour": "", + "cardHolderName": "", + "cardHolderEmail": "" + }, + "activateBillingTierResult": { + "productId": "" + }, + "deletePaymentMethodResult": { + "paymentMethodId": "" + }, + "createApiOnlyUsersResult": { + "userIds": [ + "" + ] + }, + "updateRootQuorumResult": "", + "updateUserTagResult": { + "userTagId": "" + }, + "updatePrivateKeyTagResult": { + "privateKeyTagId": "" + }, + "createSubOrganizationResult": { + "subOrganizationId": "", + "rootUserIds": [ + "" + ] + }, + "updateAllowedOriginsResult": "", + "createPrivateKeysResultV2": { + "privateKeys": [ + { + "privateKeyId": "", + "addresses": [ + { + "format": "", + "address": "" + } + ] + } + ] + }, + "updateUserResult": { + "userId": "" + }, + "updatePolicyResult": { + "policyId": "" + }, + "createSubOrganizationResultV3": { + "subOrganizationId": "", + "privateKeys": [ + { + "privateKeyId": "", + "addresses": [ + { + "format": "", + "address": "" + } + ] + } + ], + "rootUserIds": [ + "" + ] + }, + "createWalletResult": { + "walletId": "", + "addresses": [ + "" + ] + }, + "createWalletAccountsResult": { + "addresses": [ + "" + ] + }, + "initUserEmailRecoveryResult": { + "userId": "" + }, + "recoverUserResult": { + "authenticatorId": [ + "" + ] + }, + "setOrganizationFeatureResult": { + "features": [ + { + "name": "", + "value": "" + } + ] + }, + "removeOrganizationFeatureResult": { + "features": [ + { + "name": "", + "value": "" + } + ] + }, + "exportPrivateKeyResult": { + "privateKeyId": "", + "exportBundle": "" + }, + "exportWalletResult": { + "walletId": "", + "exportBundle": "" + }, + "createSubOrganizationResultV4": { + "subOrganizationId": "", + "wallet": { + "walletId": "", + "addresses": [ + "" + ] + }, + "rootUserIds": [ + "" + ] + }, + "emailAuthResult": { + "userId": "", + "apiKeyId": "" + }, + "exportWalletAccountResult": { + "address": "", + "exportBundle": "" + }, + "initImportWalletResult": { + "importBundle": "" + }, + "importWalletResult": { + "walletId": "", + "addresses": [ + "" + ] + }, + "initImportPrivateKeyResult": { + "importBundle": "" + }, + "importPrivateKeyResult": { + "privateKeyId": "", + "addresses": [ + { + "format": "", + "address": "" + } + ] + }, + "createPoliciesResult": { + "policyIds": [ + "" + ] + }, + "signRawPayloadsResult": { + "signatures": [ + { + "r": "", + "s": "", + "v": "" + } + ] + }, + "createReadOnlySessionResult": { + "organizationId": "", + "organizationName": "", + "userId": "", + "username": "", + "session": "", + "sessionExpiry": "" + }, + "createOauthProvidersResult": { + "providerIds": [ + "" + ] + }, + "deleteOauthProvidersResult": { + "providerIds": [ + "" + ] + }, + "createSubOrganizationResultV5": { + "subOrganizationId": "", + "wallet": { + "walletId": "", + "addresses": [ + "" + ] + }, + "rootUserIds": [ + "" + ] + }, + "oauthResult": { + "userId": "", + "apiKeyId": "", + "credentialBundle": "" + }, + "createReadWriteSessionResult": { + "organizationId": "", + "organizationName": "", + "userId": "", + "username": "", + "apiKeyId": "", + "credentialBundle": "" + }, + "createSubOrganizationResultV6": { + "subOrganizationId": "", + "wallet": { + "walletId": "", + "addresses": [ + "" + ] + }, + "rootUserIds": [ + "" + ] + }, + "deletePrivateKeysResult": { + "privateKeyIds": [ + "" + ] + }, + "deleteWalletsResult": { + "walletIds": [ + "" + ] + }, + "createReadWriteSessionResultV2": { + "organizationId": "", + "organizationName": "", + "userId": "", + "username": "", + "apiKeyId": "", + "credentialBundle": "" + }, + "deleteSubOrganizationResult": { + "subOrganizationUuid": "" + }, + "initOtpAuthResult": { + "otpId": "" + }, + "otpAuthResult": { + "userId": "", + "apiKeyId": "", + "credentialBundle": "" + }, + "createSubOrganizationResultV7": { + "subOrganizationId": "", + "wallet": { + "walletId": "", + "addresses": [ + "" + ] + }, + "rootUserIds": [ + "" + ] + }, + "updateWalletResult": { + "walletId": "" + }, + "updatePolicyResultV2": { + "policyId": "" + }, + "initOtpAuthResultV2": { + "otpId": "" + }, + "initOtpResult": { + "otpId": "" + }, + "verifyOtpResult": { + "verificationToken": "" + }, + "otpLoginResult": { + "session": "" + }, + "stampLoginResult": { + "session": "" + }, + "oauthLoginResult": { + "session": "" + }, + "updateUserNameResult": { + "userId": "" + }, + "updateUserEmailResult": { + "userId": "" + }, + "updateUserPhoneNumberResult": { + "userId": "" + }, + "initFiatOnRampResult": { + "onRampUrl": "", + "onRampTransactionId": "", + "onRampUrlSignature": "" + }, + "createSmartContractInterfaceResult": { + "smartContractInterfaceId": "" + }, + "deleteSmartContractInterfaceResult": { + "smartContractInterfaceId": "" + }, + "enableAuthProxyResult": { + "userId": "" + }, + "disableAuthProxyResult": "", + "updateAuthProxyConfigResult": { + "configId": "" + }, + "createOauth2CredentialResult": { + "oauth2CredentialId": "" + }, + "updateOauth2CredentialResult": { + "oauth2CredentialId": "" + }, + "deleteOauth2CredentialResult": { + "oauth2CredentialId": "" + }, + "oauth2AuthenticateResult": { + "oidcToken": "" + }, + "deleteWalletAccountsResult": { + "walletAccountIds": [ + "" + ] + }, + "deletePoliciesResult": { + "policyIds": [ + "" + ] + }, + "ethSendRawTransactionResult": { + "transactionHash": "" + }, + "createFiatOnRampCredentialResult": { + "fiatOnRampCredentialId": "" + }, + "updateFiatOnRampCredentialResult": { + "fiatOnRampCredentialId": "" + }, + "deleteFiatOnRampCredentialResult": { + "fiatOnRampCredentialId": "" + }, + "ethSendTransactionResult": { + "sendTransactionStatusId": "" + }, + "upsertGasUsageConfigResult": { + "gasUsageConfigId": "" + }, + "createTvcAppResult": { + "appId": "", + "manifestSetId": "", + "manifestSetOperatorIds": [ + "" + ], + "manifestSetThreshold": "", + "shareSetId": "", + "shareSetOperatorIds": [ + "" + ], + "shareSetThreshold": "" + }, + "createTvcDeploymentResult": { + "deploymentId": "", + "manifestId": "" + }, + "createTvcManifestApprovalsResult": { + "approvalIds": [ + "" + ] + }, + "solSendTransactionResult": { + "sendTransactionStatusId": "" + }, + "initOtpResultV2": { + "otpId": "", + "otpEncryptionTargetBundle": "" + }, + "updateOrganizationNameResult": { + "organizationId": "", + "organizationName": "" + }, + "createSubOrganizationResultV8": { + "subOrganizationId": "", + "wallet": { + "walletId": "", + "addresses": [ + "" + ] + }, + "rootUserIds": [ + "" + ] + }, + "createOauthProvidersResultV2": { + "providerIds": [ + "" + ] + }, + "createWebhookEndpointResult": { + "endpointId": "", + "webhookEndpoint": { + "endpointId": "", + "organizationId": "", + "url": "", + "name": "", + "isActive": "", + "subscriptions": [ + { + "eventType": "", + "filtersJson": "", + "isActive": "" + } + ] + } + }, + "updateWebhookEndpointResult": { + "endpointId": "", + "webhookEndpoint": { + "endpointId": "", + "organizationId": "", + "url": "", + "name": "", + "isActive": "", + "subscriptions": [ + { + "eventType": "", + "filtersJson": "", + "isActive": "" + } + ] + } + }, + "deleteWebhookEndpointResult": { + "endpointId": "" + }, + "setIpAllowlistResult": "", + "removeIpAllowlistResult": "", + "updateTvcAppLiveDeploymentResult": "", + "deleteTvcDeploymentResult": { + "deploymentId": "" + }, + "deleteTvcAppAndDeploymentsResult": { + "appId": "" + }, + "restoreTvcDeploymentResult": { + "deploymentId": "" + }, + "sparkSignFrostResult": { + "signatures": [ + { + "signatureShare": "", + "hiding": "", + "binding": "" + } + ] + }, + "sparkPrepareTransferResult": { + "operatorPackages": [ + { + "operatorId": "", + "encryptedPackage": "" + } + ], + "transferUserSignature": "", + "newLeafPublicKeys": [ + { + "leafId": "", + "publicKey": "" + } + ] + }, + "sparkClaimTransferResult": { + "operatorPackages": [ + { + "operatorId": "", + "encryptedPackage": "" + } + ], + "newLeafPublicKeys": [ + { + "leafId": "", + "publicKey": "" + } + ] + }, + "sparkPrepareLightningReceiveResult": { + "operatorPackages": [ + { + "operatorId": "", + "encryptedPackage": "" + } + ], + "paymentHash": "" + }, + "postTvcQuorumKeyShareResult": { + "provisioningShareId": "" + }, + "ethSendTransactionResultV2": { + "sendTransactionStatusId": "" + }, + "createMfaPolicyResult": { + "mfaPolicyId": "" + }, + "updateMfaPolicyResult": { + "mfaPolicyId": "" + }, + "deleteMfaPolicyResult": { + "mfaPolicyId": "" + }, + "createSessionProfileResult": { + "sessionProfileId": "" + }, + "earnDeployWrapperResult": { + "wrapperAddress": "", + "splitterAddress": "", + "deployRequestId": "" + }, + "earnDepositResult": { + "depositRequestId": "" + }, + "earnWithdrawResult": { + "withdrawRequestId": "" + }, + "executeSwapResult": { + "swapRequestId": "", + "provider": "", + "quoteId": "" + }, + "upsertSwapConfigResult": { + "feeReceiverWalletAddress": "", + "feeBps": "", + "stableFeeBps": "" + }, + "createTvcOperatorResult": { + "walletId": "", + "operatorId": "", + "encryptPublicKey": "", + "signPublicKey": "" + }, + "createTvcQuorumKeyResult": { + "quorumKeyId": "", + "quorumPublicKey": "", + "shareIds": [ + "" + ] + }, + "reEncryptTvcQuorumKeyShareResult": { + "provisioningShareId": "" + }, + "initImportSecretsResult": { + "enclaveTargetMessages": [ + "" + ] + }, + "solSendTransactionResultV2": { + "sendTransactionStatusId": "" + }, + "claimSwapFeesResult": { + "requestId": "" + }, + "earnSetWrapperStateResult": { + "wrapperAddress": "", + "depositsDisabled": "" + }, + "claimEarnFeesResult": { + "claimRequestId": "" + }, + "updateWalletAccountNameResult": { + "walletAccountId": "" + }, + "ethUndelegate7702Result": { + "sendTransactionStatusId": "" + }, + "createSwapQuoteResult": { + "quotes": [ + { + "quoteId": "", + "provider": "", + "outputAmount": "", + "minOutputAmount": "", + "expiresAt": "", + "slippageBps": "", + "clientFeeBps": "", + "estimatedTimeSeconds": "" + } + ] + }, + "importSecretsResult": { + "secretIds": [ + "" + ] + } + }, + "votes": [ + { + "id": "", + "userId": "", + "user": { + "userId": "", + "userName": "", + "userEmail": "", + "userPhoneNumber": "", + "authenticators": [ + { + "transports": [ + "" + ], + "attestationType": "", + "aaguid": "", + "credentialId": "", + "model": "", + "credential": { + "publicKey": "", + "type": "", + "sessionProfileId": "" + }, + "authenticatorId": "", + "authenticatorName": "", + "createdAt": { + "seconds": "", + "nanos": "" + }, + "updatedAt": { + "seconds": "", + "nanos": "" + } + } + ], + "apiKeys": [ + { + "credential": { + "publicKey": "", + "type": "", + "sessionProfileId": "" + }, + "apiKeyId": "", + "apiKeyName": "", + "createdAt": { + "seconds": "", + "nanos": "" + }, + "updatedAt": { + "seconds": "", + "nanos": "" + }, + "expirationSeconds": "" + } + ], + "userTags": [ + "" + ], + "oauthProviders": [ + { + "providerId": "", + "providerName": "", + "issuer": "", + "audience": "", + "subject": "", + "createdAt": { + "seconds": "", + "nanos": "" + }, + "updatedAt": { + "seconds": "", + "nanos": "" + } + } + ], + "createdAt": { + "seconds": "", + "nanos": "" + }, + "updatedAt": { + "seconds": "", + "nanos": "" + }, + "mfaPolicies": [ + { + "mfaPolicyId": "", + "mfaPolicyName": "", + "condition": "", + "requiredAuthenticationMethods": [ + { + "any": [ + { + "type": "", + "id": "" + } + ] + } + ], + "order": "", + "notes": "", + "createdAt": { + "seconds": "", + "nanos": "" + }, + "updatedAt": { + "seconds": "", + "nanos": "" + } + } + ] + }, + "activityId": "", + "selection": "", + "message": "", + "publicKey": "", + "signature": "", + "scheme": "", + "createdAt": { + "seconds": "", + "nanos": "" + } + } + ], + "appProofs": [ + { + "scheme": "", + "publicKey": "", + "proofPayload": "", + "signature": "" + } + ], + "fingerprint": "", + "canApprove": "", + "canReject": "", + "createdAt": { + "seconds": "", + "nanos": "" + }, + "updatedAt": { + "seconds": "", + "nanos": "" + }, + "failure": { + "code": "", + "message": "", + "details": [ + { + "@type": "" + } + ] + } + } + ] +} +``` + + diff --git a/public_api.swagger.json b/public_api.swagger.json index e69de29b..89c4218a 100644 --- a/public_api.swagger.json +++ b/public_api.swagger.json @@ -0,0 +1,20543 @@ +{ + "swagger": "2.0", + "info": { + "title": "API Reference", + "description": "Review our [API Introduction](../api-introduction) to get started.", + "version": "1.0", + "contact": {} + }, + "tags": [ + { + "name": "Organizations", + "description": "An Organization is the highest level of hierarchy in Turnkey. It can contain many Users, Private Keys, and Policies managed by a Root Quorum. The Root Quorum consists of a set of Users with a consensus threshold. This consensus threshold must be reached by Quorum members in order for any actions to take place.\n\nSee [Root Quorum](../concepts/users/root-quorum) for more information" + }, + { + "name": "Invitations", + "description": "Invitations allow you to invite Users into your Organization via email. Alternatively, Users can be added directly without an Invitation if their ApiKey or Authenticator credentials are known ahead of time.\n\nSee [Users](./api#tag/Users) for more information" + }, + { + "name": "Policies", + "description": "Policies allow for deep customization of the security of your Organization. They can be used to grant permissions or restrict usage of Users and Private Keys. The Policy Engine analyzes all of your Policies on each request to determine whether an Activity is allowed.\n\nSee [Policy Overview](../managing-policies/overview) for more information" + }, + { + "name": "Wallets", + "description": "Wallets contain collections of deterministically generated cryptographic public / private key pairs that share a common seed. Turnkey securely holds the common seed, but only you can access it. In most cases, Wallets should be preferred over Private Keys since they can be represented by a mnemonic phrase, used across a variety of cryptographic curves, and can derive many addresses.\n\nDerived addresses can be used to create digital signatures using the corresponding underlying private key. See [Signing](./api#tag/Signing) for more information" + }, + { + "name": "Signing", + "description": "Signers allow you to create digital signatures. Signatures are used to validate the authenticity and integrity of a digital message. Turnkey makes it easy to produce signatures by allowing you to sign with an address. If Turnkey doesn't yet support an address format you need, you can generate and sign with the public key instead by using the address format `ADDRESS_FORMAT_COMPRESSED`." + }, + { + "name": "Private Keys", + "description": "Private Keys are cryptographic public / private key pairs that can be used for cryptocurrency needs or more generalized encryption. Turnkey securely holds all private key materials for you, but only you can access them.\n\nThe Private Key ID or any derived address can be used to create digital signatures. See [Signing](./api#tag/Signing) for more information" + }, + { + "name": "Private Key Tags", + "description": "Private Key Tags allow you to easily group and permission Private Keys through Policies." + }, + { + "name": "Users", + "description": "Users are responsible for any action taken within an Organization. They can have ApiKey or Authenticator credentials, allowing you to onboard teammates to the Organization, or create API-only Users to run as part of your infrastructure." + }, + { + "name": "User Tags", + "description": "User Key Tags allow you to easily group and permission Users through Policies." + }, + { + "name": "Authenticators", + "description": "Authenticators are WebAuthN hardware devices, such as a Macbook TouchID or Yubikey, that can be used to authenticate requests." + }, + { + "name": "API Keys", + "description": "API Keys are used to authenticate requests\n\nSee our [CLI](https://github.com/tkhq/tkcli) for instructions on generating API Keys" + }, + { + "name": "Activities", + "description": "Activities encapsulate all the possible actions that can be taken with Turnkey. Some examples include adding a new user, creating a private key, and signing a transaction.\n\nActivities that modify your Organization are processed asynchronously. To confirm processing is complete and retrieve the Activity results, these activities must be polled until that status has been updated to a finalized state: `COMPLETED` when the activity is successful or `FAILED` when the activity has failed" + }, + { + "name": "Consensus", + "description": "Policies can enforce consensus requirements for Activities. For example, adding a new user requires two admins to approve the request.\n\nActivities that have been proposed, but don't yet meet the Consensus requirements will have the status: `REQUIRES_CONSENSUS`. Activities in this state can be approved or rejected using the unique fingerprint generated when an Activity is created." + }, + { + "name": "IP Allowlist", + "description": "IP Allowlists restrict API access to specific CIDR blocks. They can be configured at the organization level (applying to all API keys) or at the individual API key level (overriding organization-level allowlists).\n\nWhen no IP allowlist is configured, all IP addresses are allowed. Organization-level allowlists can be enabled or disabled, while API key-level allowlists are always enforced when present." + } + ], + "host": "api.turnkey.com", + "schemes": ["https"], + "consumes": ["application/json"], + "produces": ["application/json"], + "paths": { + "/public/v1/query/get_activity": { + "post": { + "summary": "Get activity", + "description": "Get details about an activity.", + "operationId": "GetActivity", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetActivityRequest" + } + } + ], + "tags": ["Activities"] + } + }, + "/public/v1/query/get_api_key": { + "post": { + "summary": "Get API key", + "description": "Get details about an API key.", + "operationId": "GetApiKey", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetApiKeyResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetApiKeyRequest" + } + } + ], + "tags": ["API keys"] + } + }, + "/public/v1/query/get_api_keys": { + "post": { + "summary": "Get API keys", + "description": "Get details about API keys for a user.", + "operationId": "GetApiKeys", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetApiKeysResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetApiKeysRequest" + } + } + ], + "tags": ["API keys"] + } + }, + "/public/v1/query/get_app_status": { + "post": { + "summary": "Get TVC App status", + "description": "Get live runtime status for a TVC App from the cluster.", + "operationId": "GetAppStatus", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetAppStatusResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetAppStatusRequest" + } + } + ], + "tags": ["TVC"] + } + }, + "/public/v1/query/get_authenticator": { + "post": { + "summary": "Get authenticator", + "description": "Get details about an authenticator.", + "operationId": "GetAuthenticator", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetAuthenticatorResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetAuthenticatorRequest" + } + } + ], + "tags": ["Authenticators"] + } + }, + "/public/v1/query/get_authenticators": { + "post": { + "summary": "Get authenticators", + "description": "Get details about authenticators for a user.", + "operationId": "GetAuthenticators", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetAuthenticatorsResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetAuthenticatorsRequest" + } + } + ], + "tags": ["Authenticators"] + } + }, + "/public/v1/query/get_boot_proof": { + "post": { + "summary": "Get a specific boot proof", + "description": "Get the boot proof for a given ephemeral key.", + "operationId": "GetBootProof", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/BootProofResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetBootProofRequest" + } + } + ], + "tags": ["Boot Proof"] + } + }, + "/public/v1/query/get_claim_earn_fees_status": { + "post": { + "summary": "Get Earn claim fees status", + "description": "Poll the status of a fee claim by its claim_request_id.", + "operationId": "GetClaimEarnFeesStatus", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetClaimEarnFeesStatusResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetClaimEarnFeesStatusRequest" + } + } + ], + "tags": ["Earn"] + } + }, + "/public/v1/query/get_earn_deploy_status": { + "post": { + "summary": "Get Earn deploy status", + "description": "Poll the status of a wrapper deployment by its deploy_request_id.", + "operationId": "GetEarnDeployStatus", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetEarnDeployStatusResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetEarnDeployStatusRequest" + } + } + ], + "tags": ["Earn"] + } + }, + "/public/v1/query/get_earn_deposit_status": { + "post": { + "summary": "Get Earn deposit status", + "description": "Poll the status of a deposit by its deposit_request_id (for the async/sponsored deposit path).", + "operationId": "GetEarnDepositStatus", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetEarnDepositStatusResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetEarnDepositStatusRequest" + } + } + ], + "tags": ["Earn"] + } + }, + "/public/v1/query/get_earn_withdraw_status": { + "post": { + "summary": "Get Earn withdraw status", + "description": "Poll the status of a withdrawal by its withdraw_request_id.", + "operationId": "GetEarnWithdrawStatus", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetEarnWithdrawStatusResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetEarnWithdrawStatusRequest" + } + } + ], + "tags": ["Earn"] + } + }, + "/public/v1/query/get_gas_usage": { + "post": { + "summary": "Get gas usage", + "description": "Get gas usage and gas limits for either the parent organization or a sub-organization.", + "operationId": "GetGasUsage", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetGasUsageResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetGasUsageRequest" + } + } + ], + "tags": ["Broadcasting"] + } + }, + "/public/v1/query/get_ip_allowlist": { + "post": { + "summary": "Get IP Allowlist", + "description": "Get IP allowlist and rules for an organization.", + "operationId": "GetIpAllowlist", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetIpAllowlistResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetIpAllowlistRequest" + } + } + ], + "tags": ["IP Allowlist"] + } + }, + "/public/v1/query/get_latest_boot_proof": { + "post": { + "summary": "Get the latest boot proof for an app", + "description": "Get the latest boot proof for a given enclave app name.", + "operationId": "GetLatestBootProof", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/BootProofResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetLatestBootProofRequest" + } + } + ], + "tags": ["Boot Proof"] + } + }, + "/public/v1/query/get_mfa_policies": { + "post": { + "summary": "Get MFA policies", + "description": "Get all MFA policies for a user.", + "operationId": "GetMfaPolicies", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetMfaPoliciesResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetMfaPoliciesRequest" + } + } + ], + "tags": ["MFA Policies"] + } + }, + "/public/v1/query/get_mfa_policy": { + "post": { + "summary": "Get MFA policy", + "description": "Get a single MFA policy for a user.", + "operationId": "GetMfaPolicy", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetMfaPolicyResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetMfaPolicyRequest" + } + } + ], + "tags": ["MFA Policies"] + } + }, + "/public/v1/query/get_mfa_status": { + "post": { + "summary": "Get MFA status", + "description": "Get the MFA status of an activity for a specific user or all voting users.", + "operationId": "GetMfaStatus", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetMfaStatusResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetMfaStatusRequest" + } + } + ], + "tags": ["MFA Policies"] + } + }, + "/public/v1/query/get_nonces": { + "post": { + "summary": "Get nonces", + "description": "Get nonce values for an address on a given network. Can fetch the standard on-chain nonce and/or the gas station nonce used for sponsored transactions.", + "operationId": "GetNonces", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetNoncesResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetNoncesRequest" + } + } + ], + "tags": ["Broadcasting"] + } + }, + "/public/v1/query/get_oauth2_credential": { + "post": { + "summary": "Get OAuth 2.0 credential", + "description": "Get details about an OAuth 2.0 credential.", + "operationId": "GetOauth2Credential", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetOauth2CredentialResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetOauth2CredentialRequest" + } + } + ] + } + }, + "/public/v1/query/get_oauth_providers": { + "post": { + "summary": "Get Oauth providers", + "description": "Get details about Oauth providers for a user.", + "operationId": "GetOauthProviders", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetOauthProvidersResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetOauthProvidersRequest" + } + } + ], + "tags": ["User Auth"] + } + }, + "/public/v1/query/get_onramp_transaction_status": { + "post": { + "summary": "Get On Ramp transaction status", + "description": "Get the status of an on ramp transaction.", + "operationId": "GetOnRampTransactionStatus", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetOnRampTransactionStatusResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetOnRampTransactionStatusRequest" + } + } + ], + "tags": ["On Ramp"] + } + }, + "/public/v1/query/get_organization_configs": { + "post": { + "summary": "Get configs", + "description": "Get quorum settings and features for an organization.", + "operationId": "GetOrganizationConfigs", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetOrganizationConfigsResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetOrganizationConfigsRequest" + } + } + ], + "tags": ["Organizations"] + } + }, + "/public/v1/query/get_policy": { + "post": { + "summary": "Get policy", + "description": "Get details about a policy.", + "operationId": "GetPolicy", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetPolicyResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetPolicyRequest" + } + } + ], + "tags": ["Policies"] + } + }, + "/public/v1/query/get_policy_evaluations": { + "post": { + "summary": "Get policy evaluations", + "description": "Get the policy evaluations for an activity.", + "operationId": "GetPolicyEvaluations", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetPolicyEvaluationsResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetPolicyEvaluationsRequest" + } + } + ], + "tags": ["Activities"] + } + }, + "/public/v1/query/get_private_key": { + "post": { + "summary": "Get private key", + "description": "Get details about a private key.", + "operationId": "GetPrivateKey", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetPrivateKeyResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetPrivateKeyRequest" + } + } + ], + "tags": ["Private Keys"] + } + }, + "/public/v1/query/get_send_transaction_status": { + "post": { + "summary": "Get send transaction status", + "description": "Get the status of a send transaction request.", + "operationId": "GetSendTransactionStatus", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetSendTransactionStatusResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetSendTransactionStatusRequest" + } + } + ], + "tags": ["Send Transactions"] + } + }, + "/public/v1/query/get_session_profile": { + "post": { + "summary": "Get session profile", + "description": "Get a single session profile for an organization.", + "operationId": "GetSessionProfile", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetSessionProfileResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetSessionProfileRequest" + } + } + ], + "tags": ["Session Profiles"] + } + }, + "/public/v1/query/get_session_profiles": { + "post": { + "summary": "Get session profiles", + "description": "Get all session profiles for an organization.", + "operationId": "GetSessionProfiles", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetSessionProfilesResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetSessionProfilesRequest" + } + } + ], + "tags": ["Session Profiles"] + } + }, + "/public/v1/query/get_smart_contract_interface": { + "post": { + "summary": "Get smart contract interface", + "description": "Get details about a smart contract interface.", + "operationId": "GetSmartContractInterface", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetSmartContractInterfaceResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetSmartContractInterfaceRequest" + } + } + ], + "tags": ["Policies"] + } + }, + "/public/v1/query/get_swap_status": { + "post": { + "summary": "Get swap status", + "description": "Poll the status of a swap by its swap_request_id. Covers same-chain and cross-chain swaps.", + "operationId": "GetSwapStatus", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetSwapStatusResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetSwapStatusRequest" + } + } + ], + "tags": ["Swaps"] + } + }, + "/public/v1/query/get_tvc_app": { + "post": { + "summary": "Get TVC App", + "description": "Get details about a single TVC App", + "operationId": "GetTvcApp", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetTvcAppResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetTvcAppRequest" + } + } + ], + "tags": ["TVC"] + } + }, + "/public/v1/query/get_tvc_deployment": { + "post": { + "summary": "Get TVC Deployment", + "description": "Get details about a single TVC Deployment", + "operationId": "GetTvcDeployment", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetTvcDeploymentResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetTvcDeploymentRequest" + } + } + ], + "tags": ["TVC"] + } + }, + "/public/v1/query/get_tvc_deployment_debug_logs": { + "post": { + "summary": "Get TVC Deployment debug logs", + "description": "Get a bounded window of application logs from a debug-mode TVC deployment. Returned lines are collected from every running replica and sorted by platform timestamp.", + "operationId": "GetTvcDeploymentDebugLogs", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetTvcDeploymentDebugLogsResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetTvcDeploymentDebugLogsRequest" + } + } + ], + "tags": ["TVC"] + } + }, + "/public/v1/query/get_tvc_qos_versions": { + "post": { + "summary": "Get TVC QOS versions", + "description": "List QOS versions supported for new TVC deployments and the latest recommended QOS version.", + "operationId": "GetTvcQosVersions", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetTvcQosVersionsResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetTvcQosVersionsRequest" + } + } + ], + "tags": ["TVC"] + } + }, + "/public/v1/query/get_user": { + "post": { + "summary": "Get user", + "description": "Get details about a user.", + "operationId": "GetUser", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetUserResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetUserRequest" + } + } + ], + "tags": ["Users"] + } + }, + "/public/v1/query/get_wallet": { + "post": { + "summary": "Get wallet", + "description": "Get details about a wallet.", + "operationId": "GetWallet", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetWalletResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetWalletRequest" + } + } + ], + "tags": ["Wallets"] + } + }, + "/public/v1/query/get_wallet_account": { + "post": { + "summary": "Get wallet account", + "description": "Get a single wallet account.", + "operationId": "GetWalletAccount", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetWalletAccountResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetWalletAccountRequest" + } + } + ], + "tags": ["Wallets"] + } + }, + "/public/v1/query/get_wallet_address_balances": { + "post": { + "summary": "Get balances", + "description": "Get balances of supported assets for an address on the specified network. Only non-zero balances are returned.", + "operationId": "GetWalletAddressBalances", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetWalletAddressBalancesResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetWalletAddressBalancesRequest" + } + } + ], + "tags": ["Wallets"] + } + }, + "/public/v1/query/list_activities": { + "post": { + "summary": "List activities", + "description": "List all activities within an organization.", + "operationId": "GetActivities", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetActivitiesResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetActivitiesRequest" + } + } + ], + "tags": ["Activities"] + } + }, + "/public/v1/query/list_app_proofs": { + "post": { + "summary": "List App Proofs for an activity", + "description": "List the App Proofs for the given activity.", + "operationId": "GetAppProofs", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetAppProofsResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetAppProofsRequest" + } + } + ], + "tags": ["App Proof"] + } + }, + "/public/v1/query/list_earn_enabled_vaults": { + "post": { + "summary": "Get Earn enabled vaults", + "description": "Get the organization's deployed wrappers with on-chain total deposited and live APY. The management view, distinct from per-wallet positions.", + "operationId": "ListEarnEnabledVaults", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ListEarnEnabledVaultsResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/ListEarnEnabledVaultsRequest" + } + } + ], + "tags": ["Earn"] + } + }, + "/public/v1/query/list_earn_positions": { + "post": { + "summary": "Get Earn positions", + "description": "Get the active Earn positions for a specific wallet, including current value, cost basis, yield, and projected fees.", + "operationId": "ListEarnPositions", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ListEarnPositionsResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/ListEarnPositionsRequest" + } + } + ], + "tags": ["Earn"] + } + }, + "/public/v1/query/list_earn_vaults": { + "post": { + "summary": "Get Earn vault catalog", + "description": "Get the catalog of all wrappable yield vaults across supported chains, enriched with live TVL and APY. Annotates which vaults the organization has already enabled.", + "operationId": "ListEarnVaults", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ListEarnVaultsResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/ListEarnVaultsRequest" + } + } + ], + "tags": ["Earn"] + } + }, + "/public/v1/query/list_email_events": { + "post": { + "summary": "List email events", + "description": "List email events for the organization.", + "operationId": "ListEmailEvents", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ListEmailEventsResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/ListEmailEventsRequest" + } + } + ], + "tags": ["Email"] + } + }, + "/public/v1/query/list_eth_transaction_history": { + "post": { + "summary": "List Eth transaction history", + "description": "List Ethereum transaction history for a wallet address on the specified network.", + "operationId": "ListEthTransactionHistory", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ListEthTransactionHistoryResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/ListEthTransactionHistoryRequest" + } + } + ], + "tags": ["Wallets"] + } + }, + "/public/v1/query/list_fiat_on_ramp_credentials": { + "post": { + "summary": "List Fiat On Ramp Credentials", + "description": "List all fiat on ramp provider credentials within an organization.", + "operationId": "ListFiatOnRampCredentials", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ListFiatOnRampCredentialsResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/ListFiatOnRampCredentialsRequest" + } + } + ], + "tags": ["On Ramp"] + } + }, + "/public/v1/query/list_oauth2_credentials": { + "post": { + "summary": "List OAuth 2.0 Credentials", + "description": "List all OAuth 2.0 credentials within an organization.", + "operationId": "ListOauth2Credentials", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ListOauth2CredentialsResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/ListOauth2CredentialsRequest" + } + } + ], + "tags": ["User Auth"] + } + }, + "/public/v1/query/list_policies": { + "post": { + "summary": "List policies", + "description": "List all policies within an organization.", + "operationId": "GetPolicies", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetPoliciesResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetPoliciesRequest" + } + } + ], + "tags": ["Policies"] + } + }, + "/public/v1/query/list_private_key_tags": { + "post": { + "summary": "List private key tags", + "description": "List all private key tags within an organization.", + "operationId": "ListPrivateKeyTags", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ListPrivateKeyTagsResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/ListPrivateKeyTagsRequest" + } + } + ], + "tags": ["Private Key Tags"] + } + }, + "/public/v1/query/list_private_keys": { + "post": { + "summary": "List private keys", + "description": "List all private keys within an organization.", + "operationId": "GetPrivateKeys", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetPrivateKeysResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetPrivateKeysRequest" + } + } + ], + "tags": ["Private Keys"] + } + }, + "/public/v1/query/list_smart_contract_interfaces": { + "post": { + "summary": "List smart contract interfaces", + "description": "List all smart contract interfaces within an organization.", + "operationId": "GetSmartContractInterfaces", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetSmartContractInterfacesResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetSmartContractInterfacesRequest" + } + } + ], + "tags": ["Policies"] + } + }, + "/public/v1/query/list_sol_transaction_history": { + "post": { + "summary": "List Sol transaction history", + "description": "List Solana transaction history for a wallet address on the specified network.", + "operationId": "ListSolTransactionHistory", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ListSolTransactionHistoryResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/ListSolTransactionHistoryRequest" + } + } + ], + "tags": ["Wallets"] + } + }, + "/public/v1/query/list_suborgs": { + "post": { + "summary": "Get sub-organizations", + "description": "Get all suborg IDs associated given a parent org ID and an optional filter.", + "operationId": "GetSubOrgIds", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetSubOrgIdsResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetSubOrgIdsRequest" + } + } + ], + "tags": ["Organizations"] + } + }, + "/public/v1/query/list_supported_assets": { + "post": { + "summary": "List supported assets", + "description": "List supported assets for the specified network.", + "operationId": "ListSupportedAssets", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ListSupportedAssetsResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/ListSupportedAssetsRequest" + } + } + ], + "tags": ["Wallets"] + } + }, + "/public/v1/query/list_tvc_app_deployments": { + "post": { + "summary": "List TVC Deployments", + "description": "List all deployments for a given TVC App", + "operationId": "GetTvcAppDeployments", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetTvcAppDeploymentsResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetTvcAppDeploymentsRequest" + } + } + ], + "tags": ["TVC"] + } + }, + "/public/v1/query/list_tvc_apps": { + "post": { + "summary": "List TVC Apps", + "description": "List all TVC Apps within an organization.", + "operationId": "GetTvcApps", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetTvcAppsResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetTvcAppsRequest" + } + } + ], + "tags": ["TVC"] + } + }, + "/public/v1/query/list_user_tags": { + "post": { + "summary": "List user tags", + "description": "List all user tags within an organization.", + "operationId": "ListUserTags", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ListUserTagsResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/ListUserTagsRequest" + } + } + ], + "tags": ["User Tags"] + } + }, + "/public/v1/query/list_users": { + "post": { + "summary": "List users", + "description": "List all users within an organization.", + "operationId": "GetUsers", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetUsersResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetUsersRequest" + } + } + ], + "tags": ["Users"] + } + }, + "/public/v1/query/list_verified_suborgs": { + "post": { + "summary": "Get verified sub-organizations", + "description": "Get all email or phone verified suborg IDs associated given a parent org ID.", + "operationId": "GetVerifiedSubOrgIds", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetVerifiedSubOrgIdsResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetVerifiedSubOrgIdsRequest" + } + } + ], + "tags": ["Organizations"] + } + }, + "/public/v1/query/list_wallet_accounts": { + "post": { + "summary": "List wallets accounts", + "description": "List all accounts within a wallet.", + "operationId": "GetWalletAccounts", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetWalletAccountsResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetWalletAccountsRequest" + } + } + ], + "tags": ["Wallets"] + } + }, + "/public/v1/query/list_wallets": { + "post": { + "summary": "List wallets", + "description": "List all wallets within an organization.", + "operationId": "GetWallets", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetWalletsResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetWalletsRequest" + } + } + ], + "tags": ["Wallets"] + } + }, + "/public/v1/query/list_webhook_endpoints": { + "post": { + "summary": "List webhook endpoints", + "description": "List webhook endpoints within an organization.", + "operationId": "ListWebhookEndpoints", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ListWebhookEndpointsResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/ListWebhookEndpointsRequest" + } + } + ], + "tags": ["Organizations"] + } + }, + "/public/v1/query/validate_tvc_image": { + "post": { + "summary": "Validate Container Image for TVC", + "description": "Validate a container image URL and pull secret for TVC deployment", + "operationId": "ValidateTvcImage", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ValidateTvcImageResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/ValidateTvcImageRequest" + } + } + ], + "tags": ["TVC"] + } + }, + "/public/v1/query/whoami": { + "post": { + "summary": "Who am I?", + "description": "Get basic information about your current API or WebAuthN user and their organization. Affords sub-organization look ups via parent organization for WebAuthN or API key users.", + "operationId": "GetWhoami", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/GetWhoamiResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/GetWhoamiRequest" + } + } + ], + "tags": ["Sessions"] + } + }, + "/public/v1/submit/approve_activity": { + "post": { + "summary": "Approve activity", + "description": "Approve an activity.", + "operationId": "ApproveActivity", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/ApproveActivityRequest" + } + } + ], + "tags": ["Consensus"] + } + }, + "/public/v1/submit/claim_earn_fees": { + "post": { + "summary": "Claim earn fees", + "description": "Claim earn fees through the activity pipeline.", + "operationId": "ClaimEarnFees", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/ClaimEarnFeesRequest" + } + } + ], + "tags": ["Earn"] + } + }, + "/public/v1/submit/claim_swap_fees": { + "post": { + "summary": "Claim swap fees", + "description": "Claim swap fees through the activity pipeline.", + "operationId": "ClaimSwapFees", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/ClaimSwapFeesRequest" + } + } + ], + "tags": ["Swaps"] + } + }, + "/public/v1/submit/create_api_keys": { + "post": { + "summary": "Create API keys", + "description": "Add API keys to an existing user.", + "operationId": "CreateApiKeys", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateApiKeysRequest" + } + } + ], + "tags": ["API Keys"] + } + }, + "/public/v1/submit/create_authenticators": { + "post": { + "summary": "Create authenticators", + "description": "Create authenticators to authenticate requests to Turnkey.", + "operationId": "CreateAuthenticators", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateAuthenticatorsRequest" + } + } + ], + "tags": ["Authenticators"] + } + }, + "/public/v1/submit/create_fiat_on_ramp_credential": { + "post": { + "summary": "Create a Fiat On Ramp Credential", + "description": "Create a fiat on ramp provider credential", + "operationId": "CreateFiatOnRampCredential", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateFiatOnRampCredentialRequest" + } + } + ], + "tags": ["On Ramp"] + } + }, + "/public/v1/submit/create_invitations": { + "post": { + "summary": "Create invitations", + "description": "Create invitations to join an existing organization.", + "operationId": "CreateInvitations", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateInvitationsRequest" + } + } + ], + "tags": ["Invitations"] + } + }, + "/public/v1/submit/create_mfa_policy": { + "post": { + "summary": "Create MFA policy", + "description": "Create a new MFA policy for a user.", + "operationId": "CreateMfaPolicy", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateMfaPolicyRequest" + } + } + ], + "tags": ["MFA Policies"] + } + }, + "/public/v1/submit/create_oauth2_credential": { + "post": { + "summary": "Create an OAuth 2.0 Credential", + "description": "Enable authentication for end users with an OAuth 2.0 provider", + "operationId": "CreateOauth2Credential", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateOauth2CredentialRequest" + } + } + ], + "tags": ["User Auth"] + } + }, + "/public/v1/submit/create_oauth_providers": { + "post": { + "summary": "Create Oauth providers", + "description": "Create Oauth providers for a specified user.", + "operationId": "CreateOauthProviders", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateOauthProvidersRequest" + } + } + ], + "tags": ["User Auth"] + } + }, + "/public/v1/submit/create_policies": { + "post": { + "summary": "Create policies", + "description": "Create new policies.", + "operationId": "CreatePolicies", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreatePoliciesRequest" + } + } + ], + "tags": ["Policies"] + } + }, + "/public/v1/submit/create_policy": { + "post": { + "summary": "Create policy", + "description": "Create a new policy.", + "operationId": "CreatePolicy", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreatePolicyRequest" + } + } + ], + "tags": ["Policies"] + } + }, + "/public/v1/submit/create_private_key_tag": { + "post": { + "summary": "Create private key tag", + "description": "Create a private key tag and add it to private keys.", + "operationId": "CreatePrivateKeyTag", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreatePrivateKeyTagRequest" + } + } + ], + "tags": ["Private Key Tags"] + } + }, + "/public/v1/submit/create_private_keys": { + "post": { + "summary": "Create private keys", + "description": "Create new private keys.", + "operationId": "CreatePrivateKeys", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreatePrivateKeysRequest" + } + } + ], + "tags": ["Private Keys"] + } + }, + "/public/v1/submit/create_read_only_session": { + "post": { + "summary": "Create read only session", + "description": "Create a read only session for a user (valid for 1 hour).", + "operationId": "CreateReadOnlySession", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateReadOnlySessionRequest" + } + } + ], + "tags": ["Sessions"] + } + }, + "/public/v1/submit/create_read_write_session": { + "post": { + "summary": "Create read write session", + "description": "Create a read write session for a user.", + "operationId": "CreateReadWriteSession", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateReadWriteSessionRequest" + } + } + ], + "tags": ["Sessions"] + } + }, + "/public/v1/submit/create_session_profile": { + "post": { + "summary": "Create session profile", + "description": "Create a new session profile for an organization.", + "operationId": "CreateSessionProfile", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateSessionProfileRequest" + } + } + ], + "tags": ["Session Profiles"] + } + }, + "/public/v1/submit/create_smart_contract_interface": { + "post": { + "summary": "Create smart contract interface", + "description": "Create an ABI/IDL in JSON.", + "operationId": "CreateSmartContractInterface", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateSmartContractInterfaceRequest" + } + } + ], + "tags": ["Policies"] + } + }, + "/public/v1/submit/create_sub_organization": { + "post": { + "summary": "Create sub-organization", + "description": "Create a new sub-organization. Each root user must have at least one valid credential: an API key, an authenticator, an OAuth provider, or an email or phone number with a login method enabled on the sub-organization (email, email OTP, or SMS).", + "operationId": "CreateSubOrganization", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateSubOrganizationRequest" + } + } + ], + "tags": ["Organizations"] + } + }, + "/public/v1/submit/create_tvc_app": { + "post": { + "summary": "Create a TVC App", + "description": "Create a new TVC application", + "operationId": "CreateTvcApp", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateTvcAppRequest" + } + } + ], + "tags": ["TVC"] + } + }, + "/public/v1/submit/create_tvc_deployment": { + "post": { + "summary": "Create a TVC Deployment", + "description": "Create a new TVC Deployment", + "operationId": "CreateTvcDeployment", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateTvcDeploymentRequest" + } + } + ], + "tags": ["TVC"] + } + }, + "/public/v1/submit/create_tvc_manifest_approvals": { + "post": { + "summary": "Create TVC Manifest Approvals", + "description": "Post one or more manifest approvals for a TVC Manifest", + "operationId": "CreateTvcManifestApprovals", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateTvcManifestApprovalsRequest" + } + } + ], + "tags": ["TVC"] + } + }, + "/public/v1/submit/create_user_tag": { + "post": { + "summary": "Create user tag", + "description": "Create a user tag and add it to users.", + "operationId": "CreateUserTag", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateUserTagRequest" + } + } + ], + "tags": ["User Tags"] + } + }, + "/public/v1/submit/create_users": { + "post": { + "summary": "Create users", + "description": "Create users in an existing organization. Each user must have at least one valid credential: an API key, an authenticator, an OAuth provider, or an email or phone number with a login method enabled on the organization (email, email OTP, or SMS).", + "operationId": "CreateUsers", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateUsersRequest" + } + } + ], + "tags": ["Users"] + } + }, + "/public/v1/submit/create_wallet": { + "post": { + "summary": "Create wallet", + "description": "Create a wallet and derive addresses.", + "operationId": "CreateWallet", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateWalletRequest" + } + } + ], + "tags": ["Wallets"] + } + }, + "/public/v1/submit/create_wallet_accounts": { + "post": { + "summary": "Create wallet accounts", + "description": "Derive additional addresses using an existing wallet.", + "operationId": "CreateWalletAccounts", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateWalletAccountsRequest" + } + } + ], + "tags": ["Wallets"] + } + }, + "/public/v1/submit/create_webhook_endpoint": { + "post": { + "summary": "Create webhook endpoint", + "description": "Create a webhook endpoint for an organization.", + "operationId": "CreateWebhookEndpoint", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateWebhookEndpointRequest" + } + } + ], + "tags": ["Organizations"] + } + }, + "/public/v1/submit/delete_api_keys": { + "post": { + "summary": "Delete API keys", + "description": "Remove api keys from a user.", + "operationId": "DeleteApiKeys", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/DeleteApiKeysRequest" + } + } + ], + "tags": ["API Keys"] + } + }, + "/public/v1/submit/delete_authenticators": { + "post": { + "summary": "Delete authenticators", + "description": "Remove authenticators from a user.", + "operationId": "DeleteAuthenticators", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/DeleteAuthenticatorsRequest" + } + } + ], + "tags": ["Authenticators"] + } + }, + "/public/v1/submit/delete_fiat_on_ramp_credential": { + "post": { + "summary": "Delete a Fiat On Ramp Credential", + "description": "Delete a fiat on ramp provider credential", + "operationId": "DeleteFiatOnRampCredential", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/DeleteFiatOnRampCredentialRequest" + } + } + ], + "tags": ["On Ramp"] + } + }, + "/public/v1/submit/delete_invitation": { + "post": { + "summary": "Delete invitation", + "description": "Delete an existing invitation.", + "operationId": "DeleteInvitation", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/DeleteInvitationRequest" + } + } + ], + "tags": ["Invitations"] + } + }, + "/public/v1/submit/delete_mfa_policy": { + "post": { + "summary": "Delete MFA policy", + "description": "Delete an MFA policy for a user.", + "operationId": "DeleteMfaPolicy", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/DeleteMfaPolicyRequest" + } + } + ], + "tags": ["MFA Policies"] + } + }, + "/public/v1/submit/delete_oauth2_credential": { + "post": { + "summary": "Delete an OAuth 2.0 Credential", + "description": "Disable authentication for end users with an OAuth 2.0 provider", + "operationId": "DeleteOauth2Credential", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/DeleteOauth2CredentialRequest" + } + } + ], + "tags": ["User Auth"] + } + }, + "/public/v1/submit/delete_oauth_providers": { + "post": { + "summary": "Delete Oauth providers", + "description": "Remove Oauth providers for a specified user.", + "operationId": "DeleteOauthProviders", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/DeleteOauthProvidersRequest" + } + } + ], + "tags": ["User Auth"] + } + }, + "/public/v1/submit/delete_policies": { + "post": { + "summary": "Delete policies", + "description": "Delete existing policies.", + "operationId": "DeletePolicies", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/DeletePoliciesRequest" + } + } + ], + "tags": ["Policies"] + } + }, + "/public/v1/submit/delete_policy": { + "post": { + "summary": "Delete policy", + "description": "Delete an existing policy.", + "operationId": "DeletePolicy", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/DeletePolicyRequest" + } + } + ], + "tags": ["Policies"] + } + }, + "/public/v1/submit/delete_private_key_tags": { + "post": { + "summary": "Delete private key tags", + "description": "Delete private key tags within an organization.", + "operationId": "DeletePrivateKeyTags", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/DeletePrivateKeyTagsRequest" + } + } + ], + "tags": ["Private Key Tags"] + } + }, + "/public/v1/submit/delete_private_keys": { + "post": { + "summary": "Delete private keys", + "description": "Delete private keys for an organization.", + "operationId": "DeletePrivateKeys", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/DeletePrivateKeysRequest" + } + } + ], + "tags": ["Private Keys"] + } + }, + "/public/v1/submit/delete_smart_contract_interface": { + "post": { + "summary": "Delete smart contract interface", + "description": "Delete a smart contract interface.", + "operationId": "DeleteSmartContractInterface", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/DeleteSmartContractInterfaceRequest" + } + } + ], + "tags": ["Policies"] + } + }, + "/public/v1/submit/delete_sub_organization": { + "post": { + "summary": "Delete sub-organization", + "description": "Delete a sub-organization.", + "operationId": "DeleteSubOrganization", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/DeleteSubOrganizationRequest" + } + } + ], + "tags": ["Organizations"] + } + }, + "/public/v1/submit/delete_tvc_app_and_deployments": { + "post": { + "summary": "Delete a TVC App and all of its deployments", + "description": "Delete a TVC App and all of its deployments", + "operationId": "DeleteTvcAppAndDeployments", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/DeleteTvcAppAndDeploymentsRequest" + } + } + ], + "tags": ["TVC"] + } + }, + "/public/v1/submit/delete_tvc_deployment": { + "post": { + "summary": "Delete a TVC Deployment", + "description": "Delete a TVC Deployment", + "operationId": "DeleteTvcDeployment", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/DeleteTvcDeploymentRequest" + } + } + ], + "tags": ["TVC"] + } + }, + "/public/v1/submit/delete_user_tags": { + "post": { + "summary": "Delete user tags", + "description": "Delete user tags within an organization.", + "operationId": "DeleteUserTags", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/DeleteUserTagsRequest" + } + } + ], + "tags": ["User Tags"] + } + }, + "/public/v1/submit/delete_users": { + "post": { + "summary": "Delete users", + "description": "Delete users within an organization.", + "operationId": "DeleteUsers", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/DeleteUsersRequest" + } + } + ], + "tags": ["Users"] + } + }, + "/public/v1/submit/delete_wallet_accounts": { + "post": { + "summary": "Delete wallet accounts", + "description": "Delete wallet accounts for an organization.", + "operationId": "DeleteWalletAccounts", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/DeleteWalletAccountsRequest" + } + } + ], + "tags": ["Wallets"] + } + }, + "/public/v1/submit/delete_wallets": { + "post": { + "summary": "Delete wallets", + "description": "Delete wallets for an organization.", + "operationId": "DeleteWallets", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/DeleteWalletsRequest" + } + } + ], + "tags": ["Wallets"] + } + }, + "/public/v1/submit/delete_webhook_endpoint": { + "post": { + "summary": "Delete webhook endpoint", + "description": "Delete a webhook endpoint for an organization.", + "operationId": "DeleteWebhookEndpoint", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/DeleteWebhookEndpointRequest" + } + } + ], + "tags": ["Organizations"] + } + }, + "/public/v1/submit/earn_deploy_wrapper": { + "post": { + "summary": "Deploy Earn wrapper", + "description": "Enable a yield vault for an organization by deploying its fee wrapper. Must be called before any deposits into the vault.", + "operationId": "EarnDeployWrapper", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/EarnDeployWrapperRequest" + } + } + ], + "tags": ["Earn"] + } + }, + "/public/v1/submit/earn_deposit": { + "post": { + "summary": "Deposit into Earn vault", + "description": "Deposit assets from a wallet into an enabled yield vault.", + "operationId": "EarnDeposit", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/EarnDepositRequest" + } + } + ], + "tags": ["Earn"] + } + }, + "/public/v1/submit/earn_set_wrapper_state": { + "post": { + "summary": "Set Earn wrapper state", + "description": "Enable or disable deposits to a deployed Earn wrapper. Withdrawals are always allowed.", + "operationId": "EarnSetWrapperState", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/EarnSetWrapperStateRequest" + } + } + ], + "tags": ["Earn"] + } + }, + "/public/v1/submit/earn_withdraw": { + "post": { + "summary": "Withdraw from Earn vault", + "description": "Withdraw assets or redeem shares from an enabled yield vault.", + "operationId": "EarnWithdraw", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/EarnWithdrawRequest" + } + } + ], + "tags": ["Earn"] + } + }, + "/public/v1/submit/email_auth": { + "post": { + "summary": "Perform email auth", + "description": "Authenticate a user via email.", + "operationId": "EmailAuth", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/EmailAuthRequest" + } + } + ], + "tags": ["User Auth"] + } + }, + "/public/v1/submit/eth_send_transaction": { + "post": { + "summary": "Broadcast EVM transaction", + "description": "Submit a transaction intent describing an EVM transaction you would like to broadcast.", + "operationId": "EthSendTransaction", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/EthSendTransactionRequest" + } + } + ], + "tags": ["Broadcasting"] + } + }, + "/public/v1/submit/eth_undelegate_7702": { + "post": { + "summary": "Undelegate an EVM account", + "description": "Submit an EIP-7702 undelegation transaction.", + "operationId": "EthUndelegate7702", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/EthUndelegate7702Request" + } + } + ], + "tags": ["Broadcasting"] + } + }, + "/public/v1/submit/export_private_key": { + "post": { + "summary": "Export private key", + "description": "Export a private key.", + "operationId": "ExportPrivateKey", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/ExportPrivateKeyRequest" + } + } + ], + "tags": ["Private Keys"] + } + }, + "/public/v1/submit/export_wallet": { + "post": { + "summary": "Export wallet", + "description": "Export a wallet.", + "operationId": "ExportWallet", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/ExportWalletRequest" + } + } + ], + "tags": ["Wallets"] + } + }, + "/public/v1/submit/export_wallet_account": { + "post": { + "summary": "Export wallet account", + "description": "Export a wallet account.", + "operationId": "ExportWalletAccount", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/ExportWalletAccountRequest" + } + } + ], + "tags": ["Wallets"] + } + }, + "/public/v1/submit/import_private_key": { + "post": { + "summary": "Import private key", + "description": "Import a private key.", + "operationId": "ImportPrivateKey", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/ImportPrivateKeyRequest" + } + } + ], + "tags": ["Private Keys"] + } + }, + "/public/v1/submit/import_secrets": { + "post": { + "summary": "Import secrets", + "description": "Import secrets encrypted to target keys returned from InitImportSecrets.", + "operationId": "ImportSecrets", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/ImportSecretsRequest" + } + } + ], + "tags": ["Secrets"] + } + }, + "/public/v1/submit/import_wallet": { + "post": { + "summary": "Import wallet", + "description": "Import a wallet.", + "operationId": "ImportWallet", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/ImportWalletRequest" + } + } + ], + "tags": ["Wallets"] + } + }, + "/public/v1/submit/init_fiat_on_ramp": { + "post": { + "summary": "Init fiat on ramp", + "description": "Initiate a fiat on ramp flow.", + "operationId": "InitFiatOnRamp", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/InitFiatOnRampRequest" + } + } + ], + "tags": ["On Ramp"] + } + }, + "/public/v1/submit/init_import_private_key": { + "post": { + "summary": "Init import private key", + "description": "Initialize a new private key import.", + "operationId": "InitImportPrivateKey", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/InitImportPrivateKeyRequest" + } + } + ], + "tags": ["Private Keys"] + } + }, + "/public/v1/submit/init_import_wallet": { + "post": { + "summary": "Init import wallet", + "description": "Initialize a new wallet import.", + "operationId": "InitImportWallet", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/InitImportWalletRequest" + } + } + ], + "tags": ["Wallets"] + } + }, + "/public/v1/submit/init_otp": { + "post": { + "summary": "Init generic OTP", + "description": "Initiate a generic OTP activity.", + "operationId": "InitOtp", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/InitOtpRequest" + } + } + ], + "tags": ["User Verification"] + } + }, + "/public/v1/submit/init_otp_auth": { + "post": { + "summary": "Init OTP auth", + "description": "Initiate an OTP auth activity.", + "operationId": "InitOtpAuth", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/InitOtpAuthRequest" + } + } + ], + "tags": ["User Auth"] + } + }, + "/public/v1/submit/init_user_email_recovery": { + "post": { + "summary": "Init email recovery", + "description": "Initialize a new email recovery.", + "operationId": "InitUserEmailRecovery", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/InitUserEmailRecoveryRequest" + } + } + ], + "tags": ["User Recovery"] + } + }, + "/public/v1/submit/oauth": { + "post": { + "summary": "Oauth", + "description": "Authenticate a user with an OIDC token (Oauth).", + "operationId": "Oauth", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/OauthRequest" + } + } + ], + "tags": ["User Auth"] + } + }, + "/public/v1/submit/oauth2_authenticate": { + "post": { + "summary": "OAuth 2.0 authentication", + "description": "Authenticate a user with an OAuth 2.0 provider and receive an OIDC token to use with the LoginWithOAuth or CreateSubOrganization activities", + "operationId": "Oauth2Authenticate", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/Oauth2AuthenticateRequest" + } + } + ], + "tags": ["User Auth"] + } + }, + "/public/v1/submit/oauth_login": { + "post": { + "summary": "Login with Oauth", + "description": "Create an Oauth session for a user.", + "operationId": "OauthLogin", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/OauthLoginRequest" + } + } + ], + "tags": ["Sessions"] + } + }, + "/public/v1/submit/otp_auth": { + "post": { + "summary": "OTP auth", + "description": "Authenticate a user with an OTP code sent via email or SMS.", + "operationId": "OtpAuth", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/OtpAuthRequest" + } + } + ], + "tags": ["User Auth"] + } + }, + "/public/v1/submit/otp_login": { + "post": { + "summary": "Login with OTP", + "description": "Create an OTP session for a user.", + "operationId": "OtpLogin", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/OtpLoginRequest" + } + } + ], + "tags": ["Sessions"] + } + }, + "/public/v1/submit/recover_user": { + "post": { + "summary": "Recover a user", + "description": "Complete the process of recovering a user by adding an authenticator.", + "operationId": "RecoverUser", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/RecoverUserRequest" + } + } + ], + "tags": ["User Recovery"] + } + }, + "/public/v1/submit/reject_activity": { + "post": { + "summary": "Reject activity", + "description": "Reject an activity.", + "operationId": "RejectActivity", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/RejectActivityRequest" + } + } + ], + "tags": ["Consensus"] + } + }, + "/public/v1/submit/remove_ip_allowlist": { + "post": { + "summary": "Remove IP Allowlist", + "description": "Delete IP allowlist and all associated rules for organization or API key. After removal, access will be determined by organization-level allowlist (for API keys) or allowed from all IPs (for organizations).", + "operationId": "RemoveIpAllowlist", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/RemoveIpAllowlistRequest" + } + } + ], + "tags": ["IP Allowlist"] + } + }, + "/public/v1/submit/remove_organization_feature": { + "post": { + "summary": "Remove organization feature", + "description": "Remove an organization feature. This activity must be approved by the current root quorum.", + "operationId": "RemoveOrganizationFeature", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/RemoveOrganizationFeatureRequest" + } + } + ], + "tags": ["Features"] + } + }, + "/public/v1/submit/restore_tvc_deployment": { + "post": { + "summary": "Restore a TVC Deployment", + "description": "Restore a deleted TVC Deployment", + "operationId": "RestoreTvcDeployment", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/RestoreTvcDeploymentRequest" + } + } + ], + "tags": ["TVC"] + } + }, + "/public/v1/submit/set_ip_allowlist": { + "post": { + "summary": "Set IP Allowlist", + "description": "Create or update IP allowlist and rules for organization or API key. The IP allowlist restricts API access to specific CIDR blocks. Organization-level allowlists apply to all API keys unless overridden by a key-specific allowlist.", + "operationId": "SetIpAllowlist", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/SetIpAllowlistRequest" + } + } + ], + "tags": ["IP Allowlist"] + } + }, + "/public/v1/submit/set_organization_feature": { + "post": { + "summary": "Set organization feature", + "description": "Set an organization feature. This activity must be approved by the current root quorum.", + "operationId": "SetOrganizationFeature", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/SetOrganizationFeatureRequest" + } + } + ], + "tags": ["Features"] + } + }, + "/public/v1/submit/set_tvc_app_live_deployment": { + "post": { + "summary": "Set TVC App live deployment", + "description": "Set the live deployment for a TVC App", + "operationId": "UpdateTvcAppLiveDeployment", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/UpdateTvcAppLiveDeploymentRequest" + } + } + ], + "tags": ["TVC"] + } + }, + "/public/v1/submit/sign_raw_payload": { + "post": { + "summary": "Sign raw payload", + "description": "Sign a raw payload.", + "operationId": "SignRawPayload", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/SignRawPayloadRequest" + } + } + ], + "tags": ["Signing"] + } + }, + "/public/v1/submit/sign_raw_payloads": { + "post": { + "summary": "Sign raw payloads", + "description": "Sign multiple raw payloads with the same signing parameters.", + "operationId": "SignRawPayloads", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/SignRawPayloadsRequest" + } + } + ], + "tags": ["Signing"] + } + }, + "/public/v1/submit/sign_transaction": { + "post": { + "summary": "Sign transaction", + "description": "Sign a transaction.", + "operationId": "SignTransaction", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/SignTransactionRequest" + } + } + ], + "tags": ["Signing"] + } + }, + "/public/v1/submit/sol_send_transaction": { + "post": { + "summary": "Broadcast SVM transaction", + "description": "Submit a transaction intent describing an SVM transaction you would like to broadcast. Supports single- and multi-signer intents via activity type versioning.", + "operationId": "SolSendTransaction", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/SolSendTransactionRequest" + } + } + ], + "tags": ["Broadcasting"] + } + }, + "/public/v1/submit/spark_claim_transfer": { + "post": { + "summary": "Claim Spark transfer", + "description": "Construct receiver-side encrypted operator packages to claim a Spark transfer. Does not perform FROST signing.", + "operationId": "SparkClaimTransfer", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/SparkClaimTransferRequest" + } + } + ], + "tags": ["Signing"] + } + }, + "/public/v1/submit/spark_prepare_lightning_receive": { + "post": { + "summary": "Spark prepare Lightning receive", + "description": "Generate a Lightning preimage and distribute Feldman shares to operators for a Spark Lightning receive. Does not perform FROST signing.", + "operationId": "SparkPrepareLightningReceive", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/SparkPrepareLightningReceiveRequest" + } + } + ], + "tags": ["Signing"] + } + }, + "/public/v1/submit/spark_prepare_transfer": { + "post": { + "summary": "Prepare Spark transfer", + "description": "Construct sender-side encrypted operator packages for a Spark BTC transfer. Does not perform FROST signing.", + "operationId": "SparkPrepareTransfer", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/SparkPrepareTransferRequest" + } + } + ], + "tags": ["Signing"] + } + }, + "/public/v1/submit/spark_sign_frost": { + "post": { + "summary": "Sign Frost Spark", + "description": "Perform pure FROST partial signing for a Spark wallet. Produces partial signatures without constructing operator packages.", + "operationId": "SparkSignFrost", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/SparkSignFrostRequest" + } + } + ], + "tags": ["Signing"] + } + }, + "/public/v1/submit/stamp_login": { + "post": { + "summary": "Login with a stamp", + "description": "Create a session for a user through stamping client side (API key, wallet client, or passkey client).", + "operationId": "StampLogin", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/StampLoginRequest" + } + } + ], + "tags": ["Sessions"] + } + }, + "/public/v1/submit/update_fiat_on_ramp_credential": { + "post": { + "summary": "Update a Fiat On Ramp Credential", + "description": "Update a fiat on ramp provider credential", + "operationId": "UpdateFiatOnRampCredential", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/UpdateFiatOnRampCredentialRequest" + } + } + ], + "tags": ["On Ramp"] + } + }, + "/public/v1/submit/update_mfa_policy": { + "post": { + "summary": "Update MFA policy", + "description": "Update an MFA policy for a user.", + "operationId": "UpdateMfaPolicy", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/UpdateMfaPolicyRequest" + } + } + ], + "tags": ["MFA Policies"] + } + }, + "/public/v1/submit/update_oauth2_credential": { + "post": { + "summary": "Update an OAuth 2.0 Credential", + "description": "Update an OAuth 2.0 provider credential", + "operationId": "UpdateOauth2Credential", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/UpdateOauth2CredentialRequest" + } + } + ], + "tags": ["User Auth"] + } + }, + "/public/v1/submit/update_organization_name": { + "post": { + "summary": "Update organization name", + "description": "Update the name of an organization.", + "operationId": "UpdateOrganizationName", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/UpdateOrganizationNameRequest" + } + } + ], + "tags": ["Organizations"] + } + }, + "/public/v1/submit/update_policy": { + "post": { + "summary": "Update policy", + "description": "Update an existing policy.", + "operationId": "UpdatePolicy", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/UpdatePolicyRequest" + } + } + ], + "tags": ["Policies"] + } + }, + "/public/v1/submit/update_private_key_tag": { + "post": { + "summary": "Update private key tag", + "description": "Update human-readable name or associated private keys. Note that this activity is atomic: all of the updates will succeed at once, or all of them will fail.", + "operationId": "UpdatePrivateKeyTag", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/UpdatePrivateKeyTagRequest" + } + } + ], + "tags": ["Private Key Tags"] + } + }, + "/public/v1/submit/update_root_quorum": { + "post": { + "summary": "Update root quorum", + "description": "Set the threshold and members of the root quorum. This activity must be approved by the current root quorum.", + "operationId": "UpdateRootQuorum", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/UpdateRootQuorumRequest" + } + } + ], + "tags": ["Organizations"] + } + }, + "/public/v1/submit/update_user": { + "post": { + "summary": "Update user", + "description": "Update a user in an existing organization.", + "operationId": "UpdateUser", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/UpdateUserRequest" + } + } + ], + "tags": ["Users"] + } + }, + "/public/v1/submit/update_user_email": { + "post": { + "summary": "Update user's email", + "description": "Update a user's email in an existing organization.", + "operationId": "UpdateUserEmail", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/UpdateUserEmailRequest" + } + } + ], + "tags": ["Users"] + } + }, + "/public/v1/submit/update_user_name": { + "post": { + "summary": "Update user's name", + "description": "Update a user's name in an existing organization.", + "operationId": "UpdateUserName", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/UpdateUserNameRequest" + } + } + ], + "tags": ["Users"] + } + }, + "/public/v1/submit/update_user_phone_number": { + "post": { + "summary": "Update user's phone number", + "description": "Update a user's phone number in an existing organization.", + "operationId": "UpdateUserPhoneNumber", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/UpdateUserPhoneNumberRequest" + } + } + ], + "tags": ["Users"] + } + }, + "/public/v1/submit/update_user_tag": { + "post": { + "summary": "Update user tag", + "description": "Update human-readable name or associated users. Note that this activity is atomic: all of the updates will succeed at once, or all of them will fail.", + "operationId": "UpdateUserTag", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/UpdateUserTagRequest" + } + } + ], + "tags": ["User Tags"] + } + }, + "/public/v1/submit/update_wallet": { + "post": { + "summary": "Update wallet", + "description": "Update a wallet for an organization.", + "operationId": "UpdateWallet", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/UpdateWalletRequest" + } + } + ], + "tags": ["Wallets"] + } + }, + "/public/v1/submit/update_webhook_endpoint": { + "post": { + "summary": "Update webhook endpoint", + "description": "Update a webhook endpoint for an organization.", + "operationId": "UpdateWebhookEndpoint", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/UpdateWebhookEndpointRequest" + } + } + ], + "tags": ["Organizations"] + } + }, + "/public/v1/submit/upsert_swap_config": { + "post": { + "summary": "Upsert swap config", + "description": "Enable or disable swap configuration for an organization.", + "operationId": "UpsertSwapConfig", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/UpsertSwapConfigRequest" + } + } + ], + "tags": ["Swaps"] + } + }, + "/public/v1/submit/verify_otp": { + "post": { + "summary": "Verify generic OTP", + "description": "Verify a generic OTP.", + "operationId": "VerifyOtp", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ActivityResponse" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/VerifyOtpRequest" + } + } + ], + "tags": ["User Verification"] + } + }, + "/tkhq/api/v1/noop-codegen-anchor": { + "post": { + "operationId": "NOOPCodegenAnchor", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/NOOPCodegenAnchorResponse" + } + } + } + } + } + }, + "definitions": { + "AcceptInvitationIntent": { + "type": "object", + "properties": { + "invitationId": { + "type": "string", + "description": "Unique identifier for a given Invitation object." + }, + "userId": { + "type": "string", + "description": "Unique identifier for a given User." + }, + "authenticator": { + "$ref": "#/definitions/AuthenticatorParams", + "description": "WebAuthN hardware devices that can be used to log in to the Turnkey web app." + } + }, + "required": ["invitationId", "userId", "authenticator"] + }, + "AcceptInvitationIntentV2": { + "type": "object", + "properties": { + "invitationId": { + "type": "string", + "description": "Unique identifier for a given Invitation object." + }, + "userId": { + "type": "string", + "description": "Unique identifier for a given User." + }, + "authenticator": { + "$ref": "#/definitions/AuthenticatorParamsV2", + "description": "WebAuthN hardware devices that can be used to log in to the Turnkey web app." + } + }, + "required": ["invitationId", "userId", "authenticator"] + }, + "AcceptInvitationResult": { + "type": "object", + "properties": { + "invitationId": { + "type": "string", + "description": "Unique identifier for a given Invitation." + }, + "userId": { + "type": "string", + "description": "Unique identifier for a given User." + } + }, + "required": ["invitationId", "userId"] + }, + "AccessType": { + "type": "string", + "enum": ["ACCESS_TYPE_WEB", "ACCESS_TYPE_API", "ACCESS_TYPE_ALL"] + }, + "ActivateBillingTierIntent": { + "type": "object", + "properties": { + "productId": { + "type": "string", + "description": "The product that the customer wants to subscribe to." + }, + "orbPlanId": { + "type": "string", + "x-nullable": true + } + }, + "required": ["productId"] + }, + "ActivateBillingTierResult": { + "type": "object", + "properties": { + "productId": { + "type": "string", + "description": "The id of the product being subscribed to." + } + }, + "required": ["productId"] + }, + "Activity": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for a given Activity object." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "status": { + "$ref": "#/definitions/ActivityStatus", + "description": "The current processing status of a specified Activity." + }, + "type": { + "$ref": "#/definitions/ActivityType", + "description": "Type of Activity, such as Add User, or Sign Transaction." + }, + "intent": { + "$ref": "#/definitions/Intent", + "description": "Intent object crafted by Turnkey based on the user request, used to assess the permissibility of an action." + }, + "result": { + "$ref": "#/definitions/Result", + "description": "Result of the intended action." + }, + "votes": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/Vote" + }, + "description": "A list of objects representing a particular User's approval or rejection of a Consensus request, including all relevant metadata." + }, + "appProofs": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/AppProof" + }, + "description": "A list of App Proofs generated by enclaves during activity execution, providing verifiable attestations of performed operations." + }, + "fingerprint": { + "type": "string", + "description": "An artifact verifying a User's action." + }, + "canApprove": { + "type": "boolean" + }, + "canReject": { + "type": "boolean" + }, + "createdAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + }, + "failure": { + "$ref": "#/definitions/Status", + "description": "Failure reason of the intended action." + } + }, + "required": [ + "id", + "organizationId", + "status", + "type", + "intent", + "result", + "votes", + "fingerprint", + "canApprove", + "canReject", + "createdAt", + "updatedAt" + ] + }, + "ActivityResponse": { + "type": "object", + "properties": { + "activity": { + "$ref": "#/definitions/Activity", + "description": "An action that can be taken within the Turnkey infrastructure." + } + }, + "required": ["activity"] + }, + "ActivityStatus": { + "type": "string", + "enum": [ + "ACTIVITY_STATUS_CREATED", + "ACTIVITY_STATUS_PENDING", + "ACTIVITY_STATUS_COMPLETED", + "ACTIVITY_STATUS_FAILED", + "ACTIVITY_STATUS_CONSENSUS_NEEDED", + "ACTIVITY_STATUS_REJECTED", + "ACTIVITY_STATUS_AUTHENTICATORS_NEEDED" + ] + }, + "ActivityType": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_CREATE_API_KEYS", + "ACTIVITY_TYPE_CREATE_USERS", + "ACTIVITY_TYPE_CREATE_PRIVATE_KEYS", + "ACTIVITY_TYPE_SIGN_RAW_PAYLOAD", + "ACTIVITY_TYPE_CREATE_INVITATIONS", + "ACTIVITY_TYPE_ACCEPT_INVITATION", + "ACTIVITY_TYPE_CREATE_POLICY", + "ACTIVITY_TYPE_DISABLE_PRIVATE_KEY", + "ACTIVITY_TYPE_DELETE_USERS", + "ACTIVITY_TYPE_DELETE_API_KEYS", + "ACTIVITY_TYPE_DELETE_INVITATION", + "ACTIVITY_TYPE_DELETE_ORGANIZATION", + "ACTIVITY_TYPE_DELETE_POLICY", + "ACTIVITY_TYPE_CREATE_USER_TAG", + "ACTIVITY_TYPE_DELETE_USER_TAGS", + "ACTIVITY_TYPE_CREATE_ORGANIZATION", + "ACTIVITY_TYPE_SIGN_TRANSACTION", + "ACTIVITY_TYPE_APPROVE_ACTIVITY", + "ACTIVITY_TYPE_REJECT_ACTIVITY", + "ACTIVITY_TYPE_DELETE_AUTHENTICATORS", + "ACTIVITY_TYPE_CREATE_AUTHENTICATORS", + "ACTIVITY_TYPE_CREATE_PRIVATE_KEY_TAG", + "ACTIVITY_TYPE_DELETE_PRIVATE_KEY_TAGS", + "ACTIVITY_TYPE_SET_PAYMENT_METHOD", + "ACTIVITY_TYPE_ACTIVATE_BILLING_TIER", + "ACTIVITY_TYPE_DELETE_PAYMENT_METHOD", + "ACTIVITY_TYPE_CREATE_POLICY_V2", + "ACTIVITY_TYPE_CREATE_POLICY_V3", + "ACTIVITY_TYPE_CREATE_API_ONLY_USERS", + "ACTIVITY_TYPE_UPDATE_ROOT_QUORUM", + "ACTIVITY_TYPE_UPDATE_USER_TAG", + "ACTIVITY_TYPE_UPDATE_PRIVATE_KEY_TAG", + "ACTIVITY_TYPE_CREATE_AUTHENTICATORS_V2", + "ACTIVITY_TYPE_CREATE_ORGANIZATION_V2", + "ACTIVITY_TYPE_CREATE_USERS_V2", + "ACTIVITY_TYPE_ACCEPT_INVITATION_V2", + "ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION", + "ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V2", + "ACTIVITY_TYPE_UPDATE_ALLOWED_ORIGINS", + "ACTIVITY_TYPE_CREATE_PRIVATE_KEYS_V2", + "ACTIVITY_TYPE_UPDATE_USER", + "ACTIVITY_TYPE_UPDATE_POLICY", + "ACTIVITY_TYPE_SET_PAYMENT_METHOD_V2", + "ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V3", + "ACTIVITY_TYPE_CREATE_WALLET", + "ACTIVITY_TYPE_CREATE_WALLET_ACCOUNTS", + "ACTIVITY_TYPE_INIT_USER_EMAIL_RECOVERY", + "ACTIVITY_TYPE_RECOVER_USER", + "ACTIVITY_TYPE_SET_ORGANIZATION_FEATURE", + "ACTIVITY_TYPE_REMOVE_ORGANIZATION_FEATURE", + "ACTIVITY_TYPE_SIGN_RAW_PAYLOAD_V2", + "ACTIVITY_TYPE_SIGN_TRANSACTION_V2", + "ACTIVITY_TYPE_EXPORT_PRIVATE_KEY", + "ACTIVITY_TYPE_EXPORT_WALLET", + "ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V4", + "ACTIVITY_TYPE_EMAIL_AUTH", + "ACTIVITY_TYPE_EXPORT_WALLET_ACCOUNT", + "ACTIVITY_TYPE_INIT_IMPORT_WALLET", + "ACTIVITY_TYPE_IMPORT_WALLET", + "ACTIVITY_TYPE_INIT_IMPORT_PRIVATE_KEY", + "ACTIVITY_TYPE_IMPORT_PRIVATE_KEY", + "ACTIVITY_TYPE_CREATE_POLICIES", + "ACTIVITY_TYPE_SIGN_RAW_PAYLOADS", + "ACTIVITY_TYPE_CREATE_READ_ONLY_SESSION", + "ACTIVITY_TYPE_CREATE_OAUTH_PROVIDERS", + "ACTIVITY_TYPE_DELETE_OAUTH_PROVIDERS", + "ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V5", + "ACTIVITY_TYPE_OAUTH", + "ACTIVITY_TYPE_CREATE_API_KEYS_V2", + "ACTIVITY_TYPE_CREATE_READ_WRITE_SESSION", + "ACTIVITY_TYPE_EMAIL_AUTH_V2", + "ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V6", + "ACTIVITY_TYPE_DELETE_PRIVATE_KEYS", + "ACTIVITY_TYPE_DELETE_WALLETS", + "ACTIVITY_TYPE_CREATE_READ_WRITE_SESSION_V2", + "ACTIVITY_TYPE_DELETE_SUB_ORGANIZATION", + "ACTIVITY_TYPE_INIT_OTP_AUTH", + "ACTIVITY_TYPE_OTP_AUTH", + "ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V7", + "ACTIVITY_TYPE_UPDATE_WALLET", + "ACTIVITY_TYPE_UPDATE_POLICY_V2", + "ACTIVITY_TYPE_CREATE_USERS_V3", + "ACTIVITY_TYPE_INIT_OTP_AUTH_V2", + "ACTIVITY_TYPE_INIT_OTP", + "ACTIVITY_TYPE_VERIFY_OTP", + "ACTIVITY_TYPE_OTP_LOGIN", + "ACTIVITY_TYPE_STAMP_LOGIN", + "ACTIVITY_TYPE_OAUTH_LOGIN", + "ACTIVITY_TYPE_UPDATE_USER_NAME", + "ACTIVITY_TYPE_UPDATE_USER_EMAIL", + "ACTIVITY_TYPE_UPDATE_USER_PHONE_NUMBER", + "ACTIVITY_TYPE_INIT_FIAT_ON_RAMP", + "ACTIVITY_TYPE_CREATE_SMART_CONTRACT_INTERFACE", + "ACTIVITY_TYPE_DELETE_SMART_CONTRACT_INTERFACE", + "ACTIVITY_TYPE_ENABLE_AUTH_PROXY", + "ACTIVITY_TYPE_DISABLE_AUTH_PROXY", + "ACTIVITY_TYPE_UPDATE_AUTH_PROXY_CONFIG", + "ACTIVITY_TYPE_CREATE_OAUTH2_CREDENTIAL", + "ACTIVITY_TYPE_UPDATE_OAUTH2_CREDENTIAL", + "ACTIVITY_TYPE_DELETE_OAUTH2_CREDENTIAL", + "ACTIVITY_TYPE_OAUTH2_AUTHENTICATE", + "ACTIVITY_TYPE_DELETE_WALLET_ACCOUNTS", + "ACTIVITY_TYPE_DELETE_POLICIES", + "ACTIVITY_TYPE_ETH_SEND_RAW_TRANSACTION", + "ACTIVITY_TYPE_ETH_SEND_TRANSACTION", + "ACTIVITY_TYPE_CREATE_FIAT_ON_RAMP_CREDENTIAL", + "ACTIVITY_TYPE_UPDATE_FIAT_ON_RAMP_CREDENTIAL", + "ACTIVITY_TYPE_DELETE_FIAT_ON_RAMP_CREDENTIAL", + "ACTIVITY_TYPE_EMAIL_AUTH_V3", + "ACTIVITY_TYPE_INIT_USER_EMAIL_RECOVERY_V2", + "ACTIVITY_TYPE_INIT_OTP_AUTH_V3", + "ACTIVITY_TYPE_INIT_OTP_V2", + "ACTIVITY_TYPE_UPSERT_GAS_USAGE_CONFIG", + "ACTIVITY_TYPE_CREATE_TVC_APP", + "ACTIVITY_TYPE_CREATE_TVC_DEPLOYMENT", + "ACTIVITY_TYPE_CREATE_TVC_MANIFEST_APPROVALS", + "ACTIVITY_TYPE_SOL_SEND_TRANSACTION", + "ACTIVITY_TYPE_INIT_OTP_V3", + "ACTIVITY_TYPE_VERIFY_OTP_V2", + "ACTIVITY_TYPE_OTP_LOGIN_V2", + "ACTIVITY_TYPE_UPDATE_ORGANIZATION_NAME", + "ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V8", + "ACTIVITY_TYPE_CREATE_OAUTH_PROVIDERS_V2", + "ACTIVITY_TYPE_CREATE_USERS_V4", + "ACTIVITY_TYPE_CREATE_WEBHOOK_ENDPOINT", + "ACTIVITY_TYPE_UPDATE_WEBHOOK_ENDPOINT", + "ACTIVITY_TYPE_DELETE_WEBHOOK_ENDPOINT", + "ACTIVITY_TYPE_SET_IP_ALLOWLIST", + "ACTIVITY_TYPE_REMOVE_IP_ALLOWLIST", + "ACTIVITY_TYPE_UPDATE_TVC_APP_LIVE_DEPLOYMENT", + "ACTIVITY_TYPE_DELETE_TVC_DEPLOYMENT", + "ACTIVITY_TYPE_DELETE_TVC_APP_AND_DEPLOYMENTS", + "ACTIVITY_TYPE_RESTORE_TVC_DEPLOYMENT", + "ACTIVITY_TYPE_SPARK_SIGN_FROST", + "ACTIVITY_TYPE_SPARK_PREPARE_TRANSFER", + "ACTIVITY_TYPE_SPARK_CLAIM_TRANSFER", + "ACTIVITY_TYPE_SPARK_PREPARE_LIGHTNING_RECEIVE", + "ACTIVITY_TYPE_POST_TVC_QUORUM_KEY_SHARE", + "ACTIVITY_TYPE_ETH_SEND_TRANSACTION_V2", + "ACTIVITY_TYPE_CREATE_MFA_POLICY", + "ACTIVITY_TYPE_UPDATE_MFA_POLICY", + "ACTIVITY_TYPE_DELETE_MFA_POLICY", + "ACTIVITY_TYPE_CREATE_SESSION_PROFILE", + "ACTIVITY_TYPE_EARN_DEPLOY_WRAPPER", + "ACTIVITY_TYPE_EARN_DEPOSIT", + "ACTIVITY_TYPE_EARN_WITHDRAW", + "ACTIVITY_TYPE_EXECUTE_SWAP", + "ACTIVITY_TYPE_UPSERT_SWAP_CONFIG", + "ACTIVITY_TYPE_CREATE_TVC_OPERATOR", + "ACTIVITY_TYPE_CREATE_TVC_QUORUM_KEY", + "ACTIVITY_TYPE_RE_ENCRYPT_TVC_QUORUM_KEY_SHARE", + "ACTIVITY_TYPE_INIT_IMPORT_SECRETS", + "ACTIVITY_TYPE_SOL_SEND_TRANSACTION_V2", + "ACTIVITY_TYPE_CLAIM_SWAP_FEES", + "ACTIVITY_TYPE_EARN_SET_WRAPPER_STATE", + "ACTIVITY_TYPE_CLAIM_EARN_FEES", + "ACTIVITY_TYPE_UPDATE_WALLET_ACCOUNT_NAME", + "ACTIVITY_TYPE_ETH_UNDELEGATE_7702", + "ACTIVITY_TYPE_EXECUTE_SWAP_V2", + "ACTIVITY_TYPE_CREATE_SWAP_QUOTE", + "ACTIVITY_TYPE_IMPORT_SECRETS" + ] + }, + "AddressFormat": { + "type": "string", + "enum": [ + "ADDRESS_FORMAT_UNCOMPRESSED", + "ADDRESS_FORMAT_COMPRESSED", + "ADDRESS_FORMAT_ETHEREUM", + "ADDRESS_FORMAT_SOLANA", + "ADDRESS_FORMAT_COSMOS", + "ADDRESS_FORMAT_TRON", + "ADDRESS_FORMAT_SUI", + "ADDRESS_FORMAT_APTOS", + "ADDRESS_FORMAT_BITCOIN_MAINNET_P2PKH", + "ADDRESS_FORMAT_BITCOIN_MAINNET_P2SH", + "ADDRESS_FORMAT_BITCOIN_MAINNET_P2WPKH", + "ADDRESS_FORMAT_BITCOIN_MAINNET_P2WSH", + "ADDRESS_FORMAT_BITCOIN_MAINNET_P2TR", + "ADDRESS_FORMAT_BITCOIN_TESTNET_P2PKH", + "ADDRESS_FORMAT_BITCOIN_TESTNET_P2SH", + "ADDRESS_FORMAT_BITCOIN_TESTNET_P2WPKH", + "ADDRESS_FORMAT_BITCOIN_TESTNET_P2WSH", + "ADDRESS_FORMAT_BITCOIN_TESTNET_P2TR", + "ADDRESS_FORMAT_BITCOIN_SIGNET_P2PKH", + "ADDRESS_FORMAT_BITCOIN_SIGNET_P2SH", + "ADDRESS_FORMAT_BITCOIN_SIGNET_P2WPKH", + "ADDRESS_FORMAT_BITCOIN_SIGNET_P2WSH", + "ADDRESS_FORMAT_BITCOIN_SIGNET_P2TR", + "ADDRESS_FORMAT_BITCOIN_REGTEST_P2PKH", + "ADDRESS_FORMAT_BITCOIN_REGTEST_P2SH", + "ADDRESS_FORMAT_BITCOIN_REGTEST_P2WPKH", + "ADDRESS_FORMAT_BITCOIN_REGTEST_P2WSH", + "ADDRESS_FORMAT_BITCOIN_REGTEST_P2TR", + "ADDRESS_FORMAT_SEI", + "ADDRESS_FORMAT_XLM", + "ADDRESS_FORMAT_DOGE_MAINNET", + "ADDRESS_FORMAT_DOGE_TESTNET", + "ADDRESS_FORMAT_TON_V3R2", + "ADDRESS_FORMAT_TON_V4R2", + "ADDRESS_FORMAT_TON_V5R1", + "ADDRESS_FORMAT_XRP", + "ADDRESS_FORMAT_SPARK_MAINNET", + "ADDRESS_FORMAT_SPARK_REGTEST" + ] + }, + "Any": { + "type": "object", + "properties": { + "@type": { + "type": "string" + } + }, + "additionalProperties": {} + }, + "ApiKey": { + "type": "object", + "properties": { + "credential": { + "$ref": "#/definitions/external.data.v1.Credential", + "description": "A User credential that can be used to authenticate to Turnkey." + }, + "apiKeyId": { + "type": "string", + "description": "Unique identifier for a given API Key." + }, + "apiKeyName": { + "type": "string", + "description": "Human-readable name for an API Key." + }, + "createdAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + }, + "expirationSeconds": { + "type": "string", + "format": "uint64", + "x-nullable": true, + "description": "Optional window (in seconds) indicating how long the API Key should last." + } + }, + "required": [ + "credential", + "apiKeyId", + "apiKeyName", + "createdAt", + "updatedAt" + ] + }, + "ApiKeyCurve": { + "type": "string", + "enum": [ + "API_KEY_CURVE_P256", + "API_KEY_CURVE_SECP256K1", + "API_KEY_CURVE_ED25519" + ] + }, + "ApiKeyParams": { + "type": "object", + "properties": { + "apiKeyName": { + "type": "string", + "description": "Human-readable name for an API Key." + }, + "publicKey": { + "type": "string", + "description": "The public component of a cryptographic key pair used to sign messages and transactions." + }, + "expirationSeconds": { + "type": "string", + "x-nullable": true, + "description": "Optional window (in seconds) indicating how long the API Key should last." + } + }, + "required": ["apiKeyName", "publicKey"] + }, + "ApiKeyParamsV2": { + "type": "object", + "properties": { + "apiKeyName": { + "type": "string", + "description": "Human-readable name for an API Key." + }, + "publicKey": { + "type": "string", + "description": "The public component of a cryptographic key pair used to sign messages and transactions." + }, + "curveType": { + "$ref": "#/definitions/ApiKeyCurve", + "description": "The curve type to be used for processing API key signatures." + }, + "expirationSeconds": { + "type": "string", + "x-nullable": true, + "description": "Optional window (in seconds) indicating how long the API Key should last." + } + }, + "required": ["apiKeyName", "publicKey", "curveType"] + }, + "ApiOnlyUserParams": { + "type": "object", + "properties": { + "userName": { + "type": "string", + "description": "The name of the new API-only User." + }, + "userEmail": { + "type": "string", + "x-nullable": true, + "description": "The email address for this API-only User (optional)." + }, + "userTags": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of tags assigned to the new API-only User. This field, if not needed, should be an empty array in your request body." + }, + "apiKeys": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/ApiKeyParams" + }, + "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." + } + }, + "required": ["userName", "userTags", "apiKeys"] + }, + "AppProof": { + "type": "object", + "properties": { + "scheme": { + "$ref": "#/definitions/data.v1.SignatureScheme", + "description": "Scheme of signing key." + }, + "publicKey": { + "type": "string", + "description": "Ephemeral public key." + }, + "proofPayload": { + "type": "string", + "description": "JSON serialized AppProofPayload." + }, + "signature": { + "type": "string", + "description": "Signature over hashed proof_payload." + } + }, + "required": ["scheme", "publicKey", "proofPayload", "signature"] + }, + "AppStatus": { + "type": "object", + "properties": { + "appId": { + "type": "string", + "description": "Unique identifier for this TVC App" + }, + "deployments": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/DeploymentStatus" + }, + "description": "List of deployment statuses for this app" + }, + "targetedDeploymentId": { + "type": "string", + "description": "The deployment ID currently serving traffic for this app" + } + }, + "required": ["appId", "deployments", "targetedDeploymentId"] + }, + "ApproveActivityIntent": { + "type": "object", + "properties": { + "fingerprint": { + "type": "string", + "description": "An artifact verifying a User's action." + } + }, + "required": ["fingerprint"] + }, + "ApproveActivityRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_APPROVE_ACTIVITY"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/ApproveActivityIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "AssetBalance": { + "type": "object", + "properties": { + "caip19": { + "type": "string", + "description": "The caip-19 asset identifier" + }, + "symbol": { + "type": "string", + "description": "The asset symbol" + }, + "balance": { + "type": "string", + "description": "The balance in atomic units" + }, + "decimals": { + "type": "integer", + "format": "int32", + "description": "The number of decimals this asset uses" + }, + "display": { + "$ref": "#/definitions/AssetBalanceDisplay", + "description": "Normalized balance values for display purposes only. Do not do any arithmetic or calculations with these, as the results could be imprecise. Use the balance field instead." + }, + "name": { + "type": "string", + "description": "The asset name" + } + } + }, + "AssetBalanceDisplay": { + "type": "object", + "properties": { + "usd": { + "type": "string", + "description": "USD value for display purposes only. Do not do any arithmetic or calculations with these, as the results could be imprecise." + }, + "crypto": { + "type": "string", + "description": "Normalized crypto value for display purposes only. Do not do any arithmetic or calculations with these, as the results could be imprecise." + } + } + }, + "AssetMetadata": { + "type": "object", + "properties": { + "caip19": { + "type": "string", + "description": "The caip-19 asset identifier" + }, + "symbol": { + "type": "string", + "description": "The asset symbol" + }, + "decimals": { + "type": "integer", + "format": "int32", + "description": "The number of decimals this asset uses" + }, + "logoUrl": { + "type": "string", + "description": "The url of the asset logo" + }, + "name": { + "type": "string", + "description": "The asset name" + }, + "stable": { + "type": "boolean", + "description": "Whether this asset is on Turnkey's stablecoin list (used for stablepair swap fee pricing)." + } + } + }, + "Attestation": { + "type": "object", + "properties": { + "credentialId": { + "type": "string", + "description": "The cbor encoded then base64 url encoded id of the credential." + }, + "clientDataJson": { + "type": "string", + "description": "A base64 url encoded payload containing metadata about the signing context and the challenge." + }, + "attestationObject": { + "type": "string", + "description": "A base64 url encoded payload containing authenticator data and any attestation the webauthn provider chooses." + }, + "transports": { + "type": "array", + "items": { + "$ref": "#/definitions/AuthenticatorTransport" + }, + "description": "The type of authenticator transports." + } + }, + "required": [ + "credentialId", + "clientDataJson", + "attestationObject", + "transports" + ] + }, + "AuthenticationMethod": { + "type": "object", + "properties": { + "type": { + "$ref": "#/definitions/AuthenticationType", + "description": "The type of authenticator (e.g., AUTHENTICATION_TYPE_EMAIL, AUTHENTICATION_TYPE_SESSION) required for this MFA step." + }, + "id": { + "type": "string", + "x-nullable": true, + "description": "Optional specific authenticator ID required (e.g., for requiring a specific session profile id)" + } + }, + "required": ["type"] + }, + "AuthenticationMethodParams": { + "type": "object", + "properties": { + "type": { + "$ref": "#/definitions/AuthenticationType", + "description": "The type of authenticator (e.g., AUTHENTICATION_TYPE_PASSKEY for passkey authentication)." + }, + "id": { + "type": "string", + "x-nullable": true, + "description": "Optional specific authenticator ID required (e.g., UUID of a passkey authenticator). If not provided, any authenticator of the specified type can be used." + } + }, + "required": ["type"] + }, + "AuthenticationType": { + "type": "string", + "enum": [ + "AUTHENTICATION_TYPE_EMAIL_OTP", + "AUTHENTICATION_TYPE_SMS_OTP", + "AUTHENTICATION_TYPE_PASSKEY", + "AUTHENTICATION_TYPE_API_KEY", + "AUTHENTICATION_TYPE_OAUTH", + "AUTHENTICATION_TYPE_SESSION" + ] + }, + "Authenticator": { + "type": "object", + "properties": { + "transports": { + "type": "array", + "items": { + "$ref": "#/definitions/AuthenticatorTransport" + }, + "description": "Types of transports that may be used by an Authenticator (e.g., USB, NFC, BLE)." + }, + "attestationType": { + "type": "string" + }, + "aaguid": { + "type": "string", + "description": "Identifier indicating the type of the Security Key." + }, + "credentialId": { + "type": "string", + "description": "Unique identifier for a WebAuthn credential." + }, + "model": { + "type": "string", + "description": "The type of Authenticator device." + }, + "credential": { + "$ref": "#/definitions/external.data.v1.Credential", + "description": "A User credential that can be used to authenticate to Turnkey." + }, + "authenticatorId": { + "type": "string", + "description": "Unique identifier for a given Authenticator." + }, + "authenticatorName": { + "type": "string", + "description": "Human-readable name for an Authenticator." + }, + "createdAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + } + }, + "required": [ + "transports", + "attestationType", + "aaguid", + "credentialId", + "model", + "credential", + "authenticatorId", + "authenticatorName", + "createdAt", + "updatedAt" + ] + }, + "AuthenticatorAttestationResponse": { + "type": "object", + "properties": { + "clientDataJson": { + "type": "string" + }, + "attestationObject": { + "type": "string" + }, + "transports": { + "type": "array", + "items": { + "$ref": "#/definitions/AuthenticatorTransport" + } + }, + "authenticatorAttachment": { + "type": "string", + "enum": ["cross-platform", "platform"], + "x-nullable": true + } + }, + "required": ["clientDataJson", "attestationObject"] + }, + "AuthenticatorParams": { + "type": "object", + "properties": { + "authenticatorName": { + "type": "string", + "description": "Human-readable name for an Authenticator." + }, + "userId": { + "type": "string", + "description": "Unique identifier for a given User." + }, + "attestation": { + "$ref": "#/definitions/PublicKeyCredentialWithAttestation" + }, + "challenge": { + "type": "string", + "description": "Challenge presented for authentication purposes." + } + }, + "required": ["authenticatorName", "userId", "attestation", "challenge"] + }, + "AuthenticatorParamsV2": { + "type": "object", + "properties": { + "authenticatorName": { + "type": "string", + "description": "Human-readable name for an Authenticator." + }, + "challenge": { + "type": "string", + "description": "Challenge presented for authentication purposes." + }, + "attestation": { + "$ref": "#/definitions/Attestation", + "description": "The attestation that proves custody of the authenticator and provides metadata about it." + } + }, + "required": ["authenticatorName", "challenge", "attestation"] + }, + "AuthenticatorTransport": { + "type": "string", + "enum": [ + "AUTHENTICATOR_TRANSPORT_BLE", + "AUTHENTICATOR_TRANSPORT_INTERNAL", + "AUTHENTICATOR_TRANSPORT_NFC", + "AUTHENTICATOR_TRANSPORT_USB", + "AUTHENTICATOR_TRANSPORT_HYBRID" + ] + }, + "BootProof": { + "type": "object", + "properties": { + "ephemeralPublicKeyHex": { + "type": "string", + "description": "The hex encoded Ephemeral Public Key." + }, + "awsAttestationDocB64": { + "type": "string", + "description": "The DER encoded COSE Sign1 struct Attestation doc." + }, + "qosManifestB64": { + "type": "string", + "description": "The base64 encoded QOS manifest. Encoding depends on qos_manifest_version." + }, + "qosManifestEnvelopeB64": { + "type": "string", + "description": "The base64 encoded QOS manifest envelope. Encoding depends on qos_manifest_version." + }, + "deploymentLabel": { + "type": "string", + "description": "The label under which the enclave app was deployed." + }, + "enclaveApp": { + "type": "string", + "description": "Name of the enclave app" + }, + "owner": { + "type": "string", + "description": "Owner of the app i.e. 'tkhq'" + }, + "createdAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + }, + "qosManifestVersion": { + "type": "string", + "x-nullable": true, + "description": "QOS manifest schema version." + } + }, + "required": [ + "ephemeralPublicKeyHex", + "awsAttestationDocB64", + "qosManifestB64", + "qosManifestEnvelopeB64", + "deploymentLabel", + "enclaveApp", + "owner", + "createdAt" + ] + }, + "BootProofResponse": { + "type": "object", + "properties": { + "bootProof": { + "$ref": "#/definitions/BootProof" + } + }, + "required": ["bootProof"] + }, + "ClaimEarnFeesIntent": { + "type": "object", + "properties": { + "wrapperAddress": { + "type": "string", + "description": "Address of the deployed Earn wrapper to claim fees for. Must be one of the org's deployed wrappers." + } + }, + "required": ["wrapperAddress"] + }, + "ClaimEarnFeesRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_CLAIM_EARN_FEES"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/ClaimEarnFeesIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "ClaimEarnFeesResult": { + "type": "object", + "properties": { + "claimRequestId": { + "type": "string", + "description": "Identifier to poll claim status and tx hash via GetClaimEarnFeesStatus." + } + }, + "required": ["claimRequestId"] + }, + "ClaimSwapFeesIntent": { + "type": "object" + }, + "ClaimSwapFeesRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_CLAIM_SWAP_FEES"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/ClaimSwapFeesIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "ClaimSwapFeesResult": { + "type": "object", + "properties": { + "requestId": { + "type": "string", + "description": "Relay claim request ID submitted through the permit endpoint." + } + }, + "required": ["requestId"] + }, + "ClientSignature": { + "type": "object", + "properties": { + "publicKey": { + "type": "string", + "description": "The public component of a cryptographic key pair used to create the signature." + }, + "scheme": { + "$ref": "#/definitions/ClientSignatureScheme", + "description": "The signature scheme used to generate the client signature." + }, + "message": { + "type": "string", + "description": "The message that was signed." + }, + "signature": { + "type": "string", + "description": "The cryptographic signature over the message." + } + }, + "required": ["publicKey", "scheme", "message", "signature"] + }, + "ClientSignatureScheme": { + "type": "string", + "enum": ["CLIENT_SIGNATURE_SCHEME_API_P256"] + }, + "Config": { + "type": "object", + "properties": { + "features": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/Feature" + } + }, + "quorum": { + "$ref": "#/definitions/external.data.v1.Quorum" + } + } + }, + "CreateApiKeysIntent": { + "type": "object", + "properties": { + "apiKeys": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/ApiKeyParams" + }, + "description": "A list of API Keys." + }, + "userId": { + "type": "string", + "description": "Unique identifier for a given User." + } + }, + "required": ["apiKeys", "userId"] + }, + "CreateApiKeysIntentV2": { + "type": "object", + "properties": { + "apiKeys": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/ApiKeyParamsV2" + }, + "description": "A list of API Keys." + }, + "userId": { + "type": "string", + "description": "Unique identifier for a given User." + } + }, + "required": ["apiKeys", "userId"] + }, + "CreateApiKeysRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_CREATE_API_KEYS_V2"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/CreateApiKeysIntentV2" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "CreateApiKeysResult": { + "type": "object", + "properties": { + "apiKeyIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of API Key IDs." + } + }, + "required": ["apiKeyIds"] + }, + "CreateApiOnlyUsersIntent": { + "type": "object", + "properties": { + "apiOnlyUsers": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/ApiOnlyUserParams" + }, + "description": "A list of API-only Users to create." + } + }, + "required": ["apiOnlyUsers"] + }, + "CreateApiOnlyUsersResult": { + "type": "object", + "properties": { + "userIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of API-only User IDs." + } + }, + "required": ["userIds"] + }, + "CreateAuthenticatorsIntent": { + "type": "object", + "properties": { + "authenticators": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/AuthenticatorParams" + }, + "description": "A list of Authenticators." + }, + "userId": { + "type": "string", + "description": "Unique identifier for a given User." + } + }, + "required": ["authenticators", "userId"] + }, + "CreateAuthenticatorsIntentV2": { + "type": "object", + "properties": { + "authenticators": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/AuthenticatorParamsV2" + }, + "description": "A list of Authenticators." + }, + "userId": { + "type": "string", + "description": "Unique identifier for a given User." + } + }, + "required": ["authenticators", "userId"] + }, + "CreateAuthenticatorsRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_CREATE_AUTHENTICATORS_V2"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/CreateAuthenticatorsIntentV2" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "CreateAuthenticatorsResult": { + "type": "object", + "properties": { + "authenticatorIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of Authenticator IDs." + } + }, + "required": ["authenticatorIds"] + }, + "CreateFiatOnRampCredentialIntent": { + "type": "object", + "properties": { + "onrampProvider": { + "$ref": "#/definitions/FiatOnRampProvider", + "description": "The fiat on-ramp provider" + }, + "projectId": { + "type": "string", + "x-nullable": true, + "description": "Project ID for the on-ramp provider. Some providers, like Coinbase, require this additional identifier" + }, + "publishableApiKey": { + "type": "string", + "description": "Publishable API key for the on-ramp provider" + }, + "encryptedSecretApiKey": { + "type": "string", + "description": "Secret API key for the on-ramp provider encrypted to our on-ramp encryption public key" + }, + "encryptedPrivateApiKey": { + "type": "string", + "x-nullable": true, + "description": "Private API key for the on-ramp provider encrypted to our on-ramp encryption public key. Some providers, like Coinbase, require this additional key." + }, + "sandboxMode": { + "type": "boolean", + "description": "If the on-ramp credential is a sandbox credential" + } + }, + "required": [ + "onrampProvider", + "publishableApiKey", + "encryptedSecretApiKey" + ] + }, + "CreateFiatOnRampCredentialRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_CREATE_FIAT_ON_RAMP_CREDENTIAL"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/CreateFiatOnRampCredentialIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "CreateFiatOnRampCredentialResult": { + "type": "object", + "properties": { + "fiatOnRampCredentialId": { + "type": "string", + "description": "Unique identifier of the Fiat On-Ramp credential that was created" + } + }, + "required": ["fiatOnRampCredentialId"] + }, + "CreateInvitationsIntent": { + "type": "object", + "properties": { + "invitations": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/InvitationParams" + }, + "description": "A list of Invitations." + } + }, + "required": ["invitations"] + }, + "CreateInvitationsRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_CREATE_INVITATIONS"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/CreateInvitationsIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "CreateInvitationsResult": { + "type": "object", + "properties": { + "invitationIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of Invitation IDs" + } + }, + "required": ["invitationIds"] + }, + "CreateMfaPolicyIntent": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "The ID of the User to add the MFA Policy to." + }, + "mfaPolicyName": { + "type": "string", + "description": "Human-readable name for a Policy." + }, + "condition": { + "type": "string", + "description": "A condition expression that evaluates to true or false, determining when this MFA policy applies." + }, + "requiredAuthenticationMethods": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/RequiredAuthenticationMethodParams" + }, + "description": "An ordered list of authentication requirements. Each requirement must be satisfied sequentially to complete MFA." + }, + "order": { + "type": "integer", + "format": "int64", + "description": "The order in which this MFA policy is evaluated, starting from 0, relative to other MFA policies. Lower order values are evaluated first." + }, + "notes": { + "type": "string", + "x-nullable": true, + "description": "Notes for an MFA Policy." + } + }, + "required": [ + "userId", + "mfaPolicyName", + "condition", + "requiredAuthenticationMethods", + "order" + ] + }, + "CreateMfaPolicyRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_CREATE_MFA_POLICY"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/CreateMfaPolicyIntent" + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "CreateMfaPolicyResult": { + "type": "object", + "properties": { + "mfaPolicyId": { + "type": "string", + "description": "Unique identifier for a given MFA Policy." + } + }, + "required": ["mfaPolicyId"] + }, + "CreateOauth2CredentialIntent": { + "type": "object", + "properties": { + "provider": { + "$ref": "#/definitions/Oauth2Provider", + "description": "The OAuth 2.0 provider" + }, + "clientId": { + "type": "string", + "description": "The Client ID issued by the OAuth 2.0 provider" + }, + "encryptedClientSecret": { + "type": "string", + "description": "The client secret issued by the OAuth 2.0 provider encrypted to the TLS Fetcher quorum key" + } + }, + "required": ["provider", "clientId", "encryptedClientSecret"] + }, + "CreateOauth2CredentialRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_CREATE_OAUTH2_CREDENTIAL"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/CreateOauth2CredentialIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "CreateOauth2CredentialResult": { + "type": "object", + "properties": { + "oauth2CredentialId": { + "type": "string", + "description": "Unique identifier of the OAuth 2.0 credential that was created" + } + }, + "required": ["oauth2CredentialId"] + }, + "CreateOauthProvidersIntent": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "The ID of the User to add an Oauth provider to" + }, + "oauthProviders": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/OauthProviderParams" + }, + "description": "A list of Oauth providers." + } + }, + "required": ["userId", "oauthProviders"] + }, + "CreateOauthProvidersIntentV2": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "The ID of the User to add an Oauth provider to" + }, + "oauthProviders": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/OauthProviderParamsV2" + }, + "description": "A list of Oauth providers." + } + }, + "required": ["userId", "oauthProviders"] + }, + "CreateOauthProvidersRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_CREATE_OAUTH_PROVIDERS_V2"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/CreateOauthProvidersIntentV2" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "CreateOauthProvidersResult": { + "type": "object", + "properties": { + "providerIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of unique identifiers for Oauth Providers" + } + }, + "required": ["providerIds"] + }, + "CreateOauthProvidersResultV2": { + "type": "object", + "properties": { + "providerIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of unique identifiers for Oauth Providers" + } + }, + "required": ["providerIds"] + }, + "CreateOrganizationIntent": { + "type": "object", + "properties": { + "organizationName": { + "type": "string", + "description": "Human-readable name for an Organization." + }, + "rootEmail": { + "type": "string", + "description": "The root user's email address." + }, + "rootAuthenticator": { + "$ref": "#/definitions/AuthenticatorParams", + "description": "The root user's Authenticator." + }, + "rootUserId": { + "type": "string", + "x-nullable": true, + "description": "Unique identifier for the root user object." + } + }, + "required": ["organizationName", "rootEmail", "rootAuthenticator"] + }, + "CreateOrganizationIntentV2": { + "type": "object", + "properties": { + "organizationName": { + "type": "string", + "description": "Human-readable name for an Organization." + }, + "rootEmail": { + "type": "string", + "description": "The root user's email address." + }, + "rootAuthenticator": { + "$ref": "#/definitions/AuthenticatorParamsV2", + "description": "The root user's Authenticator." + }, + "rootUserId": { + "type": "string", + "x-nullable": true, + "description": "Unique identifier for the root user object." + } + }, + "required": ["organizationName", "rootEmail", "rootAuthenticator"] + }, + "CreateOrganizationResult": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + } + }, + "required": ["organizationId"] + }, + "CreatePoliciesIntent": { + "type": "object", + "properties": { + "policies": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/CreatePolicyIntentV3" + }, + "description": "An array of policy intents to be created." + } + }, + "required": ["policies"] + }, + "CreatePoliciesRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_CREATE_POLICIES"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/CreatePoliciesIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "CreatePoliciesResult": { + "type": "object", + "properties": { + "policyIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of unique identifiers for the created policies." + } + }, + "required": ["policyIds"] + }, + "CreatePolicyIntent": { + "type": "object", + "properties": { + "policyName": { + "type": "string", + "description": "Human-readable name for a Policy." + }, + "selectors": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/Selector" + }, + "description": "A list of simple functions each including a subject, target and boolean. See Policy Engine Language section for additional details." + }, + "effect": { + "$ref": "#/definitions/Effect", + "description": "The instruction to DENY or ALLOW a particular activity following policy selector(s)." + }, + "notes": { + "type": "string" + } + }, + "required": ["policyName", "selectors", "effect"] + }, + "CreatePolicyIntentV2": { + "type": "object", + "properties": { + "policyName": { + "type": "string", + "description": "Human-readable name for a Policy." + }, + "selectors": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/SelectorV2" + }, + "description": "A list of simple functions each including a subject, target and boolean. See Policy Engine Language section for additional details." + }, + "effect": { + "$ref": "#/definitions/Effect", + "description": "Whether to ALLOW or DENY requests that match the condition and consensus requirements." + }, + "notes": { + "type": "string" + } + }, + "required": ["policyName", "selectors", "effect"] + }, + "CreatePolicyIntentV3": { + "type": "object", + "properties": { + "policyName": { + "type": "string", + "description": "Human-readable name for a Policy." + }, + "effect": { + "$ref": "#/definitions/Effect", + "description": "The instruction to DENY or ALLOW an activity." + }, + "condition": { + "type": "string", + "x-nullable": true, + "description": "The condition expression that triggers the Effect" + }, + "consensus": { + "type": "string", + "x-nullable": true, + "description": "The consensus expression that triggers the Effect" + }, + "notes": { + "type": "string", + "description": "Notes for a Policy." + }, + "time": { + "type": "string", + "x-nullable": true, + "description": "The time expression that triggers the Effect" + } + }, + "required": ["policyName", "effect", "notes"] + }, + "CreatePolicyRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_CREATE_POLICY_V3"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/CreatePolicyIntentV3" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "CreatePolicyResult": { + "type": "object", + "properties": { + "policyId": { + "type": "string", + "description": "Unique identifier for a given Policy." + } + }, + "required": ["policyId"] + }, + "CreatePrivateKeyTagIntent": { + "type": "object", + "properties": { + "privateKeyTagName": { + "type": "string", + "description": "Human-readable name for a Private Key Tag." + }, + "privateKeyIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of Private Key IDs." + } + }, + "required": ["privateKeyTagName", "privateKeyIds"] + }, + "CreatePrivateKeyTagRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_CREATE_PRIVATE_KEY_TAG"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/CreatePrivateKeyTagIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "CreatePrivateKeyTagResult": { + "type": "object", + "properties": { + "privateKeyTagId": { + "type": "string", + "description": "Unique identifier for a given Private Key Tag." + }, + "privateKeyIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of Private Key IDs." + } + }, + "required": ["privateKeyTagId", "privateKeyIds"] + }, + "CreatePrivateKeysIntent": { + "type": "object", + "properties": { + "privateKeys": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/PrivateKeyParams" + }, + "description": "A list of Private Keys." + } + }, + "required": ["privateKeys"] + }, + "CreatePrivateKeysIntentV2": { + "type": "object", + "properties": { + "privateKeys": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/PrivateKeyParams" + }, + "description": "A list of Private Keys." + } + }, + "required": ["privateKeys"] + }, + "CreatePrivateKeysRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_CREATE_PRIVATE_KEYS_V2"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/CreatePrivateKeysIntentV2" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "CreatePrivateKeysResult": { + "type": "object", + "properties": { + "privateKeyIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of Private Key IDs." + } + }, + "required": ["privateKeyIds"] + }, + "CreatePrivateKeysResultV2": { + "type": "object", + "properties": { + "privateKeys": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/PrivateKeyResult" + }, + "description": "A list of Private Key IDs and addresses." + } + }, + "required": ["privateKeys"] + }, + "CreateReadOnlySessionIntent": { + "type": "object" + }, + "CreateReadOnlySessionRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_CREATE_READ_ONLY_SESSION"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/CreateReadOnlySessionIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "CreateReadOnlySessionResult": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization. If the request is being made by a user and their Sub-Organization ID is unknown, this can be the Parent Organization ID. However, using the Sub-Organization ID is preferred due to performance reasons." + }, + "organizationName": { + "type": "string", + "description": "Human-readable name for an Organization." + }, + "userId": { + "type": "string", + "description": "Unique identifier for a given User." + }, + "username": { + "type": "string", + "description": "Human-readable name for a User." + }, + "session": { + "type": "string", + "description": "String representing a read only session" + }, + "sessionExpiry": { + "type": "string", + "format": "uint64", + "description": "UTC timestamp in seconds representing the expiry time for the read only session." + } + }, + "required": [ + "organizationId", + "organizationName", + "userId", + "username", + "session", + "sessionExpiry" + ] + }, + "CreateReadWriteSessionIntent": { + "type": "object", + "properties": { + "targetPublicKey": { + "type": "string", + "description": "Client-side public key generated by the user, to which the read write session bundle (credentials) will be encrypted." + }, + "email": { + "type": "string", + "description": "Email of the user to create a read write session for" + }, + "apiKeyName": { + "type": "string", + "x-nullable": true, + "description": "Optional human-readable name for an API Key. If none provided, default to Read Write Session - \u003cTimestamp\u003e" + }, + "expirationSeconds": { + "type": "string", + "x-nullable": true, + "description": "Expiration window (in seconds) indicating how long the API key is valid for. If not provided, a default of 15 minutes will be used." + } + }, + "required": ["targetPublicKey", "email"] + }, + "CreateReadWriteSessionIntentV2": { + "type": "object", + "properties": { + "targetPublicKey": { + "type": "string", + "description": "Client-side public key generated by the user, to which the read write session bundle (credentials) will be encrypted." + }, + "userId": { + "type": "string", + "x-nullable": true, + "description": "Optional unique identifier for a given User. If none provided, the read write session will be created for the user who is making the request." + }, + "apiKeyName": { + "type": "string", + "x-nullable": true, + "description": "Optional human-readable name for an API Key. If none provided, default to Read Write Session - \u003cTimestamp\u003e" + }, + "expirationSeconds": { + "type": "string", + "x-nullable": true, + "description": "Expiration window (in seconds) indicating how long the API key is valid for. If not provided, a default of 15 minutes will be used." + }, + "invalidateExisting": { + "type": "boolean", + "x-nullable": true, + "description": "Invalidate all other previously generated ReadWriteSession API keys" + } + }, + "required": ["targetPublicKey"] + }, + "CreateReadWriteSessionRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_CREATE_READ_WRITE_SESSION_V2"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/CreateReadWriteSessionIntentV2" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "CreateReadWriteSessionResult": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization. If the request is being made by a user and their Sub-Organization ID is unknown, this can be the Parent Organization ID. However, using the Sub-Organization ID is preferred due to performance reasons." + }, + "organizationName": { + "type": "string", + "description": "Human-readable name for an Organization." + }, + "userId": { + "type": "string", + "description": "Unique identifier for a given User." + }, + "username": { + "type": "string", + "description": "Human-readable name for a User." + }, + "apiKeyId": { + "type": "string", + "description": "Unique identifier for the created API key." + }, + "credentialBundle": { + "type": "string", + "description": "HPKE encrypted credential bundle" + } + }, + "required": [ + "organizationId", + "organizationName", + "userId", + "username", + "apiKeyId", + "credentialBundle" + ] + }, + "CreateReadWriteSessionResultV2": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization. If the request is being made by a user and their Sub-Organization ID is unknown, this can be the Parent Organization ID. However, using the Sub-Organization ID is preferred due to performance reasons." + }, + "organizationName": { + "type": "string", + "description": "Human-readable name for an Organization." + }, + "userId": { + "type": "string", + "description": "Unique identifier for a given User." + }, + "username": { + "type": "string", + "description": "Human-readable name for a User." + }, + "apiKeyId": { + "type": "string", + "description": "Unique identifier for the created API key." + }, + "credentialBundle": { + "type": "string", + "description": "HPKE encrypted credential bundle" + } + }, + "required": [ + "organizationId", + "organizationName", + "userId", + "username", + "apiKeyId", + "credentialBundle" + ] + }, + "CreateSessionProfileIntent": { + "type": "object", + "properties": { + "sessionProfileName": { + "type": "string", + "description": "Human-readable name for a Session Profile." + }, + "scope": { + "type": "string", + "description": "The scope string that defines the permissions for this Session Profile." + }, + "expirationSeconds": { + "type": "string", + "x-nullable": true, + "description": "The duration in seconds for which sessions created with this Session Profile are valid. If not set, expiration will be determined by the value passed in to the intent of login activities." + }, + "notes": { + "type": "string", + "x-nullable": true, + "description": "Notes for a Session Profile." + } + }, + "required": ["sessionProfileName", "scope"] + }, + "CreateSessionProfileRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_CREATE_SESSION_PROFILE"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/CreateSessionProfileIntent" + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "CreateSessionProfileResult": { + "type": "object", + "properties": { + "sessionProfileId": { + "type": "string", + "description": "Unique identifier for a given Session Profile." + } + }, + "required": ["sessionProfileId"] + }, + "CreateSmartContractInterfaceIntent": { + "type": "object", + "properties": { + "smartContractAddress": { + "type": "string", + "description": "Corresponding contract address or program ID" + }, + "smartContractInterface": { + "type": "string", + "description": "ABI/IDL as a JSON string. Limited to 400kb" + }, + "type": { + "$ref": "#/definitions/SmartContractInterfaceType" + }, + "label": { + "type": "string", + "description": "Human-readable name for a Smart Contract Interface." + }, + "notes": { + "type": "string", + "description": "Notes for a Smart Contract Interface." + } + }, + "required": [ + "smartContractAddress", + "smartContractInterface", + "type", + "label" + ] + }, + "CreateSmartContractInterfaceRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_CREATE_SMART_CONTRACT_INTERFACE"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/CreateSmartContractInterfaceIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "CreateSmartContractInterfaceResult": { + "type": "object", + "properties": { + "smartContractInterfaceId": { + "type": "string", + "description": "The ID of the created Smart Contract Interface." + } + }, + "required": ["smartContractInterfaceId"] + }, + "CreateSubOrganizationIntent": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name for this sub-organization" + }, + "rootAuthenticator": { + "$ref": "#/definitions/AuthenticatorParamsV2", + "description": "Root User authenticator for this new sub-organization" + } + }, + "required": ["name", "rootAuthenticator"] + }, + "CreateSubOrganizationIntentV2": { + "type": "object", + "properties": { + "subOrganizationName": { + "type": "string", + "description": "Name for this sub-organization" + }, + "rootUsers": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/RootUserParams" + }, + "description": "Root users to create within this sub-organization" + }, + "rootQuorumThreshold": { + "type": "integer", + "format": "int32", + "description": "The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users" + } + }, + "required": ["subOrganizationName", "rootUsers", "rootQuorumThreshold"] + }, + "CreateSubOrganizationIntentV3": { + "type": "object", + "properties": { + "subOrganizationName": { + "type": "string", + "description": "Name for this sub-organization" + }, + "rootUsers": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/RootUserParams" + }, + "description": "Root users to create within this sub-organization" + }, + "rootQuorumThreshold": { + "type": "integer", + "format": "int32", + "description": "The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users" + }, + "privateKeys": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/PrivateKeyParams" + }, + "description": "A list of Private Keys." + } + }, + "required": [ + "subOrganizationName", + "rootUsers", + "rootQuorumThreshold", + "privateKeys" + ] + }, + "CreateSubOrganizationIntentV4": { + "type": "object", + "properties": { + "subOrganizationName": { + "type": "string", + "description": "Name for this sub-organization" + }, + "rootUsers": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/RootUserParams" + }, + "description": "Root users to create within this sub-organization" + }, + "rootQuorumThreshold": { + "type": "integer", + "format": "int32", + "description": "The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users" + }, + "wallet": { + "$ref": "#/definitions/WalletParams", + "x-nullable": true, + "description": "The wallet to create for the sub-organization" + }, + "disableEmailRecovery": { + "type": "boolean", + "x-nullable": true, + "description": "Disable email recovery for the sub-organization" + }, + "disableEmailAuth": { + "type": "boolean", + "x-nullable": true, + "description": "Disable email auth for the sub-organization" + } + }, + "required": ["subOrganizationName", "rootUsers", "rootQuorumThreshold"] + }, + "CreateSubOrganizationIntentV5": { + "type": "object", + "properties": { + "subOrganizationName": { + "type": "string", + "description": "Name for this sub-organization" + }, + "rootUsers": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/RootUserParamsV2" + }, + "description": "Root users to create within this sub-organization" + }, + "rootQuorumThreshold": { + "type": "integer", + "format": "int32", + "description": "The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users" + }, + "wallet": { + "$ref": "#/definitions/WalletParams", + "x-nullable": true, + "description": "The wallet to create for the sub-organization" + }, + "disableEmailRecovery": { + "type": "boolean", + "x-nullable": true, + "description": "Disable email recovery for the sub-organization" + }, + "disableEmailAuth": { + "type": "boolean", + "x-nullable": true, + "description": "Disable email auth for the sub-organization" + } + }, + "required": ["subOrganizationName", "rootUsers", "rootQuorumThreshold"] + }, + "CreateSubOrganizationIntentV6": { + "type": "object", + "properties": { + "subOrganizationName": { + "type": "string", + "description": "Name for this sub-organization" + }, + "rootUsers": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/RootUserParamsV3" + }, + "description": "Root users to create within this sub-organization" + }, + "rootQuorumThreshold": { + "type": "integer", + "format": "int32", + "description": "The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users" + }, + "wallet": { + "$ref": "#/definitions/WalletParams", + "x-nullable": true, + "description": "The wallet to create for the sub-organization" + }, + "disableEmailRecovery": { + "type": "boolean", + "x-nullable": true, + "description": "Disable email recovery for the sub-organization" + }, + "disableEmailAuth": { + "type": "boolean", + "x-nullable": true, + "description": "Disable email auth for the sub-organization" + } + }, + "required": ["subOrganizationName", "rootUsers", "rootQuorumThreshold"] + }, + "CreateSubOrganizationIntentV7": { + "type": "object", + "properties": { + "subOrganizationName": { + "type": "string", + "description": "Name for this sub-organization" + }, + "rootUsers": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/RootUserParamsV4" + }, + "description": "Root users to create within this sub-organization" + }, + "rootQuorumThreshold": { + "type": "integer", + "format": "int32", + "description": "The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users" + }, + "wallet": { + "$ref": "#/definitions/WalletParams", + "x-nullable": true, + "description": "The wallet to create for the sub-organization" + }, + "disableEmailRecovery": { + "type": "boolean", + "x-nullable": true, + "description": "Disable email recovery for the sub-organization" + }, + "disableEmailAuth": { + "type": "boolean", + "x-nullable": true, + "description": "Disable email auth for the sub-organization" + }, + "disableSmsAuth": { + "type": "boolean", + "x-nullable": true, + "description": "Disable OTP SMS auth for the sub-organization" + }, + "disableOtpEmailAuth": { + "type": "boolean", + "x-nullable": true, + "description": "Disable OTP email auth for the sub-organization" + }, + "verificationToken": { + "type": "string", + "x-nullable": true, + "description": "Signed JWT containing a unique id, expiry, verification type, contact" + }, + "clientSignature": { + "$ref": "#/definitions/ClientSignature", + "x-nullable": true, + "description": "Optional signature proving authorization for this sub-organization creation. The signature is over the verification token ID and the root user parameters for the root user associated with the verification token. Only required if a public key was provided during the verification step." + } + }, + "required": ["subOrganizationName", "rootUsers", "rootQuorumThreshold"] + }, + "CreateSubOrganizationIntentV8": { + "type": "object", + "properties": { + "subOrganizationName": { + "type": "string", + "description": "Name for this sub-organization" + }, + "rootUsers": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/RootUserParamsV5" + }, + "description": "Root users to create within this sub-organization" + }, + "rootQuorumThreshold": { + "type": "integer", + "format": "int32", + "description": "The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users" + }, + "wallet": { + "$ref": "#/definitions/WalletParams", + "x-nullable": true, + "description": "The wallet to create for the sub-organization" + }, + "disableEmailRecovery": { + "type": "boolean", + "x-nullable": true, + "description": "Disable email recovery for the sub-organization" + }, + "disableEmailAuth": { + "type": "boolean", + "x-nullable": true, + "description": "Disable email auth for the sub-organization" + }, + "disableSmsAuth": { + "type": "boolean", + "x-nullable": true, + "description": "Disable OTP SMS auth for the sub-organization" + }, + "disableOtpEmailAuth": { + "type": "boolean", + "x-nullable": true, + "description": "Disable OTP email auth for the sub-organization" + }, + "verificationToken": { + "type": "string", + "x-nullable": true, + "description": "Signed JWT containing a unique id, expiry, verification type, contact" + }, + "clientSignature": { + "$ref": "#/definitions/ClientSignature", + "x-nullable": true, + "description": "Optional signature proving authorization for this sub-organization creation. The signature is over the verification token ID and the root user parameters for the root user associated with the verification token. Only required if a public key was provided during the verification step." + } + }, + "required": ["subOrganizationName", "rootUsers", "rootQuorumThreshold"] + }, + "CreateSubOrganizationRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V8"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/CreateSubOrganizationIntentV8" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "CreateSubOrganizationResult": { + "type": "object", + "properties": { + "subOrganizationId": { + "type": "string" + }, + "rootUserIds": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": ["subOrganizationId"] + }, + "CreateSubOrganizationResultV3": { + "type": "object", + "properties": { + "subOrganizationId": { + "type": "string" + }, + "privateKeys": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/PrivateKeyResult" + }, + "description": "A list of Private Key IDs and addresses." + }, + "rootUserIds": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": ["subOrganizationId", "privateKeys"] + }, + "CreateSubOrganizationResultV4": { + "type": "object", + "properties": { + "subOrganizationId": { + "type": "string" + }, + "wallet": { + "$ref": "#/definitions/WalletResult", + "x-nullable": true + }, + "rootUserIds": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": ["subOrganizationId"] + }, + "CreateSubOrganizationResultV5": { + "type": "object", + "properties": { + "subOrganizationId": { + "type": "string" + }, + "wallet": { + "$ref": "#/definitions/WalletResult", + "x-nullable": true + }, + "rootUserIds": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": ["subOrganizationId"] + }, + "CreateSubOrganizationResultV6": { + "type": "object", + "properties": { + "subOrganizationId": { + "type": "string" + }, + "wallet": { + "$ref": "#/definitions/WalletResult", + "x-nullable": true + }, + "rootUserIds": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": ["subOrganizationId"] + }, + "CreateSubOrganizationResultV7": { + "type": "object", + "properties": { + "subOrganizationId": { + "type": "string" + }, + "wallet": { + "$ref": "#/definitions/WalletResult", + "x-nullable": true + }, + "rootUserIds": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": ["subOrganizationId"] + }, + "CreateSubOrganizationResultV8": { + "type": "object", + "properties": { + "subOrganizationId": { + "type": "string" + }, + "wallet": { + "$ref": "#/definitions/WalletResult", + "x-nullable": true + }, + "rootUserIds": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": ["subOrganizationId"] + }, + "CreateSwapQuoteIntent": { + "type": "object", + "properties": { + "signWith": { + "type": "string", + "description": "Wallet account or Private Key address used to price the executable provider quote. Private Key identifiers are not supported." + }, + "inputToken": { + "type": "string", + "description": "CAIP-19 asset ID for the input asset. The chain is derived from this value." + }, + "outputToken": { + "type": "string", + "description": "CAIP-19 asset ID for the output asset." + }, + "inputAmount": { + "type": "string", + "description": "Base-unit amount of the input asset." + }, + "slippageBps": { + "type": "string", + "x-nullable": true, + "description": "Provider-neutral maximum allowed slippage in basis points. Turnkey converts this value to each provider's request format. When omitted, each provider applies its default slippage behavior." + } + }, + "required": ["signWith", "inputToken", "outputToken", "inputAmount"] + }, + "CreateSwapQuoteResult": { + "type": "object", + "properties": { + "quotes": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/SwapQuote" + }, + "description": "One or more provider quotes for this request. Today this contains a single Relay quote; pass quotes[i].quoteId to execute_swap_v2 to bind execution." + } + }, + "required": ["quotes"] + }, + "CreateTvcAppIntent": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The name of the new TVC application" + }, + "quorumPublicKey": { + "type": "string", + "description": "Quorum public key to use for this application" + }, + "manifestSetId": { + "type": "string", + "x-nullable": true, + "description": "Unique identifier for an existing TVC operator set to use as the Manifest Set for this TVC application. If left empty, a new Manifest Set configuration is required" + }, + "manifestSetParams": { + "$ref": "#/definitions/TvcOperatorSetParams", + "x-nullable": true, + "description": "Configuration to create a new TVC operator set, used as the Manifest Set for this TVC application. If left empty, a Manifest Set ID is required" + }, + "shareSetId": { + "type": "string", + "x-nullable": true, + "description": "Unique identifier for an existing TVC operator set to use as the Share Set for this TVC application. If left empty, a new Share Set configuration is required" + }, + "shareSetParams": { + "$ref": "#/definitions/TvcOperatorSetParams", + "x-nullable": true, + "description": "Configuration to create a new TVC operator set, used as the Share Set for this TVC application. If left empty, a Share Set ID is required" + }, + "enableEgress": { + "type": "boolean", + "x-nullable": true, + "description": "Enables network egress for this TVC app. Default if not provided: false." + }, + "enableDebugModeDeployments": { + "type": "boolean", + "x-nullable": true, + "description": "When true, this app may create deployments in debug-mode. Debug-mode deployments expose logs and emit zero'd attestation PCRs, so remote attestation cannot succeed. Cannot be changed after app creation. Setting this true means the app's quorum key is considered permanently insecure, and a new app with a fresh quorum key must be created. Default if not provided: false." + } + }, + "required": ["name", "quorumPublicKey"] + }, + "CreateTvcAppRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_CREATE_TVC_APP"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/CreateTvcAppIntent" + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "CreateTvcAppResult": { + "type": "object", + "properties": { + "appId": { + "type": "string", + "description": "The unique identifier for the TVC application" + }, + "manifestSetId": { + "type": "string", + "description": "The unique identifier for the TVC manifest set" + }, + "manifestSetOperatorIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The unique identifier(s) of the manifest set operators" + }, + "manifestSetThreshold": { + "type": "integer", + "format": "int64", + "description": "The required number of approvals for the manifest set" + }, + "shareSetId": { + "type": "string", + "description": "The unique identifier for the TVC share set" + }, + "shareSetOperatorIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The unique identifiers of the share set operators" + }, + "shareSetThreshold": { + "type": "integer", + "format": "int64", + "description": "The required number of approvals for the share set" + } + }, + "required": [ + "appId", + "manifestSetId", + "manifestSetOperatorIds", + "manifestSetThreshold", + "shareSetId", + "shareSetOperatorIds", + "shareSetThreshold" + ] + }, + "CreateTvcDeploymentIntent": { + "type": "object", + "properties": { + "appId": { + "type": "string", + "description": "The unique identifier of the to-be-deployed TVC application" + }, + "qosVersion": { + "type": "string", + "description": "The QuorumOS version to use to deploy this application" + }, + "pivotContainerImageUrl": { + "type": "string", + "description": "URL of the container containing the pivot binary" + }, + "pivotPath": { + "type": "string", + "description": "Location of the binary in the pivot container" + }, + "pivotArgs": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Arguments to pass to the pivot binary at startup. Encoded as a list of strings, for example [\"--foo\", \"bar\"]" + }, + "expectedPivotDigest": { + "type": "string", + "description": "Digest of the pivot binary in the pivot container. This value will be inserted in the QOS manifest to ensure application integrity." + }, + "nonce": { + "type": "integer", + "format": "int64", + "x-nullable": true, + "description": "Optional nonce to ensure uniqueness of the deployment manifest. If not provided, it defaults to the current Unix timestamp in seconds." + }, + "pivotContainerEncryptedPullSecret": { + "type": "string", + "x-nullable": true, + "description": "Optional encrypted pull secret to authorize Turnkey to pull the pivot container image. If your image is public, leave this empty." + }, + "debugMode": { + "type": "boolean", + "x-nullable": true, + "description": "Optional flag to indicate whether to deploy the TVC app in debug mode, which includes additional logging and debugging tools. Default is false." + }, + "healthCheckType": { + "$ref": "#/definitions/TvcHealthCheckType", + "description": "Health check type (TVC_HEALTH_CHECK_TYPE_HTTP or TVC_HEALTH_CHECK_TYPE_GRPC). HTTP health checks are made with a GET request on /health, and gRPC health checks follow the standard gRPC health checking protocol." + }, + "healthCheckPort": { + "type": "integer", + "format": "int64", + "description": "Port to use for health checks." + }, + "publicIngressPort": { + "type": "integer", + "format": "int64", + "description": "Port to use for public ingress." + }, + "replicas": { + "type": "integer", + "format": "int64", + "x-nullable": true, + "description": "Optional desired replica count for this deployment." + } + }, + "required": [ + "appId", + "qosVersion", + "pivotContainerImageUrl", + "pivotPath", + "pivotArgs", + "expectedPivotDigest", + "healthCheckType", + "healthCheckPort", + "publicIngressPort" + ] + }, + "CreateTvcDeploymentRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_CREATE_TVC_DEPLOYMENT"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/CreateTvcDeploymentIntent" + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "CreateTvcDeploymentResult": { + "type": "object", + "properties": { + "deploymentId": { + "type": "string", + "description": "The unique identifier for the TVC deployment" + }, + "manifestId": { + "type": "string", + "description": "The unique identifier for the TVC manifest" + } + }, + "required": ["deploymentId", "manifestId"] + }, + "CreateTvcManifestApprovalsIntent": { + "type": "object", + "properties": { + "manifestId": { + "type": "string", + "description": "Unique identifier of the TVC deployment to approve" + }, + "approvals": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/TvcManifestApproval" + }, + "description": "List of manifest approvals" + } + }, + "required": ["manifestId", "approvals"] + }, + "CreateTvcManifestApprovalsRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_CREATE_TVC_MANIFEST_APPROVALS"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/CreateTvcManifestApprovalsIntent" + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "CreateTvcManifestApprovalsResult": { + "type": "object", + "properties": { + "approvalIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The unique identifier(s) for the manifest approvals" + } + }, + "required": ["approvalIds"] + }, + "CreateTvcOperatorIntent": { + "type": "object", + "properties": { + "walletName": { + "type": "string", + "x-nullable": true, + "description": "Human-readable name for a new wallet created for this TVC operator" + }, + "walletId": { + "type": "string", + "x-nullable": true, + "description": "Unique identifier for an existing wallet to reuse for this TVC operator" + }, + "path": { + "type": "string", + "description": "Base derivation path for creating TVC operator wallet accounts" + }, + "operatorName": { + "type": "string", + "description": "Human-readable name for this new TVC operator" + } + }, + "required": ["path", "operatorName"] + }, + "CreateTvcOperatorResult": { + "type": "object", + "properties": { + "walletId": { + "type": "string", + "description": "The unique identifier for the wallet containing TVC operator accounts" + }, + "operatorId": { + "type": "string", + "description": "The unique identifier for the TVC operator" + }, + "encryptPublicKey": { + "type": "string", + "description": "Public encryption key for this TVC operator" + }, + "signPublicKey": { + "type": "string", + "description": "Public signing key for this TVC operator" + } + }, + "required": [ + "walletId", + "operatorId", + "encryptPublicKey", + "signPublicKey" + ] + }, + "CreateTvcQuorumKeyIntent": { + "type": "object", + "properties": { + "threshold": { + "type": "integer", + "format": "int64", + "description": "The threshold of operators needed to reassemble this TVC quorum key" + }, + "operatorEncryptKeys": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Operator public keys used to encrypt and later approve the generated TVC quorum key shares" + } + }, + "required": ["threshold", "operatorEncryptKeys"] + }, + "CreateTvcQuorumKeyResult": { + "type": "object", + "properties": { + "quorumKeyId": { + "type": "string", + "description": "The unique identifier for the TVC quorum key" + }, + "quorumPublicKey": { + "type": "string", + "description": "Public key for the generated TVC quorum key" + }, + "shareIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The unique identifier(s) for the generated TVC quorum key shares" + } + }, + "required": ["quorumKeyId", "quorumPublicKey", "shareIds"] + }, + "CreateUserTagIntent": { + "type": "object", + "properties": { + "userTagName": { + "type": "string", + "description": "Human-readable name for a User Tag." + }, + "userIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User IDs." + } + }, + "required": ["userTagName", "userIds"] + }, + "CreateUserTagRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_CREATE_USER_TAG"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/CreateUserTagIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "CreateUserTagResult": { + "type": "object", + "properties": { + "userTagId": { + "type": "string", + "description": "Unique identifier for a given User Tag." + }, + "userIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User IDs." + } + }, + "required": ["userTagId", "userIds"] + }, + "CreateUsersIntent": { + "type": "object", + "properties": { + "users": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/UserParams" + }, + "description": "A list of Users." + } + }, + "required": ["users"] + }, + "CreateUsersIntentV2": { + "type": "object", + "properties": { + "users": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/UserParamsV2" + }, + "description": "A list of Users." + } + }, + "required": ["users"] + }, + "CreateUsersIntentV3": { + "type": "object", + "properties": { + "users": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/UserParamsV3" + }, + "description": "A list of Users." + } + }, + "required": ["users"] + }, + "CreateUsersIntentV4": { + "type": "object", + "properties": { + "users": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/UserParamsV4" + }, + "description": "A list of Users." + } + }, + "required": ["users"] + }, + "CreateUsersRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_CREATE_USERS_V4"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/CreateUsersIntentV4" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "CreateUsersResult": { + "type": "object", + "properties": { + "userIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User IDs." + } + }, + "required": ["userIds"] + }, + "CreateWalletAccountsIntent": { + "type": "object", + "properties": { + "walletId": { + "type": "string", + "description": "Unique identifier for a given Wallet." + }, + "accounts": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/WalletAccountParams" + }, + "description": "A list of wallet Accounts." + }, + "persist": { + "type": "boolean", + "x-nullable": true, + "description": "Indicates if the wallet accounts should be persisted. This is helpful if you'd like to see the addresses of different derivation paths without actually creating the accounts. Defaults to true." + } + }, + "required": ["walletId", "accounts"] + }, + "CreateWalletAccountsRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_CREATE_WALLET_ACCOUNTS"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/CreateWalletAccountsIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "CreateWalletAccountsResult": { + "type": "object", + "properties": { + "addresses": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of derived addresses." + } + }, + "required": ["addresses"] + }, + "CreateWalletIntent": { + "type": "object", + "properties": { + "walletName": { + "type": "string", + "description": "Human-readable name for a Wallet." + }, + "accounts": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/WalletAccountParams" + }, + "description": "A list of wallet Accounts. This field, if not needed, should be an empty array in your request body." + }, + "mnemonicLength": { + "type": "integer", + "format": "int32", + "x-nullable": true, + "description": "Length of mnemonic to generate the Wallet seed. Defaults to 12. Accepted values: 12, 15, 18, 21, 24." + } + }, + "required": ["walletName", "accounts"] + }, + "CreateWalletRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_CREATE_WALLET"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/CreateWalletIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "CreateWalletResult": { + "type": "object", + "properties": { + "walletId": { + "type": "string", + "description": "Unique identifier for a Wallet." + }, + "addresses": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of account addresses." + } + }, + "required": ["walletId", "addresses"] + }, + "CreateWebhookEndpointIntent": { + "type": "object", + "properties": { + "url": { + "type": "string", + "description": "The destination URL for webhook delivery." + }, + "name": { + "type": "string", + "description": "Human-readable name for this webhook endpoint." + }, + "subscriptions": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/WebhookSubscriptionParams" + }, + "description": "Event subscriptions to create for this endpoint." + } + }, + "required": ["url", "name"] + }, + "CreateWebhookEndpointRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_CREATE_WEBHOOK_ENDPOINT"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/CreateWebhookEndpointIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "CreateWebhookEndpointResult": { + "type": "object", + "properties": { + "endpointId": { + "type": "string", + "description": "Unique identifier of the created webhook endpoint." + }, + "webhookEndpoint": { + "$ref": "#/definitions/WebhookEndpointData", + "description": "The created webhook endpoint data." + } + }, + "required": ["endpointId", "webhookEndpoint"] + }, + "CredPropsAuthenticationExtensionsClientOutputs": { + "type": "object", + "properties": { + "rk": { + "type": "boolean" + } + }, + "required": ["rk"] + }, + "CredentialType": { + "type": "string", + "enum": [ + "CREDENTIAL_TYPE_WEBAUTHN_AUTHENTICATOR", + "CREDENTIAL_TYPE_API_KEY_P256", + "CREDENTIAL_TYPE_RECOVER_USER_KEY_P256", + "CREDENTIAL_TYPE_API_KEY_SECP256K1", + "CREDENTIAL_TYPE_EMAIL_AUTH_KEY_P256", + "CREDENTIAL_TYPE_API_KEY_ED25519", + "CREDENTIAL_TYPE_OTP_AUTH_KEY_P256", + "CREDENTIAL_TYPE_READ_WRITE_SESSION_KEY_P256", + "CREDENTIAL_TYPE_OAUTH_KEY_P256", + "CREDENTIAL_TYPE_LOGIN" + ] + }, + "Curve": { + "type": "string", + "enum": ["CURVE_SECP256K1", "CURVE_ED25519", "CURVE_P256"] + }, + "CustomRevertError": { + "type": "object", + "properties": { + "errorName": { + "type": "string", + "x-nullable": true, + "description": "The name of the custom error." + }, + "paramsJson": { + "type": "string", + "x-nullable": true, + "description": "The decoded parameters as a JSON object." + } + } + }, + "DeleteApiKeysIntent": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "Unique identifier for a given User." + }, + "apiKeyIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of API Key IDs." + } + }, + "required": ["userId", "apiKeyIds"] + }, + "DeleteApiKeysRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_DELETE_API_KEYS"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/DeleteApiKeysIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "DeleteApiKeysResult": { + "type": "object", + "properties": { + "apiKeyIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of API Key IDs." + } + }, + "required": ["apiKeyIds"] + }, + "DeleteAuthenticatorsIntent": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "Unique identifier for a given User." + }, + "authenticatorIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of Authenticator IDs." + } + }, + "required": ["userId", "authenticatorIds"] + }, + "DeleteAuthenticatorsRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_DELETE_AUTHENTICATORS"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/DeleteAuthenticatorsIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "DeleteAuthenticatorsResult": { + "type": "object", + "properties": { + "authenticatorIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Unique identifier for a given Authenticator." + } + }, + "required": ["authenticatorIds"] + }, + "DeleteFiatOnRampCredentialIntent": { + "type": "object", + "properties": { + "fiatOnrampCredentialId": { + "type": "string", + "description": "The ID of the fiat on-ramp credential to delete" + } + }, + "required": ["fiatOnrampCredentialId"] + }, + "DeleteFiatOnRampCredentialRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_DELETE_FIAT_ON_RAMP_CREDENTIAL"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/DeleteFiatOnRampCredentialIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "DeleteFiatOnRampCredentialResult": { + "type": "object", + "properties": { + "fiatOnRampCredentialId": { + "type": "string", + "description": "Unique identifier of the Fiat On-Ramp credential that was deleted" + } + }, + "required": ["fiatOnRampCredentialId"] + }, + "DeleteInvitationIntent": { + "type": "object", + "properties": { + "invitationId": { + "type": "string", + "description": "Unique identifier for a given Invitation object." + } + }, + "required": ["invitationId"] + }, + "DeleteInvitationRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_DELETE_INVITATION"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/DeleteInvitationIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "DeleteInvitationResult": { + "type": "object", + "properties": { + "invitationId": { + "type": "string", + "description": "Unique identifier for a given Invitation." + } + }, + "required": ["invitationId"] + }, + "DeleteMfaPolicyIntent": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "The ID of the User to delete the MFA Policy from." + }, + "mfaPolicyId": { + "type": "string", + "description": "Unique identifier for a given MFA Policy." + } + }, + "required": ["userId", "mfaPolicyId"] + }, + "DeleteMfaPolicyRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_DELETE_MFA_POLICY"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/DeleteMfaPolicyIntent" + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "DeleteMfaPolicyResult": { + "type": "object", + "properties": { + "mfaPolicyId": { + "type": "string", + "description": "Unique identifier for a given MFA Policy." + } + }, + "required": ["mfaPolicyId"] + }, + "DeleteOauth2CredentialIntent": { + "type": "object", + "properties": { + "oauth2CredentialId": { + "type": "string", + "description": "The ID of the OAuth 2.0 credential to delete" + } + }, + "required": ["oauth2CredentialId"] + }, + "DeleteOauth2CredentialRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_DELETE_OAUTH2_CREDENTIAL"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/DeleteOauth2CredentialIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "DeleteOauth2CredentialResult": { + "type": "object", + "properties": { + "oauth2CredentialId": { + "type": "string", + "description": "Unique identifier of the OAuth 2.0 credential that was deleted" + } + }, + "required": ["oauth2CredentialId"] + }, + "DeleteOauthProvidersIntent": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "The ID of the User to remove an Oauth provider from" + }, + "providerIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Unique identifier for a given Provider." + } + }, + "required": ["userId", "providerIds"] + }, + "DeleteOauthProvidersRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_DELETE_OAUTH_PROVIDERS"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/DeleteOauthProvidersIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "DeleteOauthProvidersResult": { + "type": "object", + "properties": { + "providerIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of unique identifiers for Oauth Providers" + } + }, + "required": ["providerIds"] + }, + "DeleteOrganizationIntent": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + } + }, + "required": ["organizationId"] + }, + "DeleteOrganizationResult": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + } + }, + "required": ["organizationId"] + }, + "DeletePaymentMethodIntent": { + "type": "object", + "properties": { + "paymentMethodId": { + "type": "string", + "x-nullable": true, + "description": "The payment method that the customer wants to remove." + } + }, + "required": ["paymentMethodId"] + }, + "DeletePaymentMethodResult": { + "type": "object", + "properties": { + "paymentMethodId": { + "type": "string", + "description": "The payment method that was removed." + } + }, + "required": ["paymentMethodId"] + }, + "DeletePoliciesIntent": { + "type": "object", + "properties": { + "policyIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of unique identifiers for policies within an organization" + } + }, + "required": ["policyIds"] + }, + "DeletePoliciesRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_DELETE_POLICIES"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/DeletePoliciesIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "DeletePoliciesResult": { + "type": "object", + "properties": { + "policyIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of unique identifiers for the deleted policies." + } + }, + "required": ["policyIds"] + }, + "DeletePolicyIntent": { + "type": "object", + "properties": { + "policyId": { + "type": "string", + "description": "Unique identifier for a given Policy." + } + }, + "required": ["policyId"] + }, + "DeletePolicyRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_DELETE_POLICY"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/DeletePolicyIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "DeletePolicyResult": { + "type": "object", + "properties": { + "policyId": { + "type": "string", + "description": "Unique identifier for a given Policy." + } + }, + "required": ["policyId"] + }, + "DeletePrivateKeyTagsIntent": { + "type": "object", + "properties": { + "privateKeyTagIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of Private Key Tag IDs." + } + }, + "required": ["privateKeyTagIds"] + }, + "DeletePrivateKeyTagsRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_DELETE_PRIVATE_KEY_TAGS"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/DeletePrivateKeyTagsIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "DeletePrivateKeyTagsResult": { + "type": "object", + "properties": { + "privateKeyTagIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of Private Key Tag IDs." + }, + "privateKeyIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of Private Key IDs." + } + }, + "required": ["privateKeyTagIds", "privateKeyIds"] + }, + "DeletePrivateKeysIntent": { + "type": "object", + "properties": { + "privateKeyIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of unique identifiers for private keys within an organization" + }, + "deleteWithoutExport": { + "type": "boolean", + "x-nullable": true, + "description": "Optional parameter for deleting the private keys, even if any have not been previously exported. If they have been exported, this field is ignored." + } + }, + "required": ["privateKeyIds"] + }, + "DeletePrivateKeysRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_DELETE_PRIVATE_KEYS"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/DeletePrivateKeysIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "DeletePrivateKeysResult": { + "type": "object", + "properties": { + "privateKeyIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of private key unique identifiers that were removed" + } + }, + "required": ["privateKeyIds"] + }, + "DeleteSmartContractInterfaceIntent": { + "type": "object", + "properties": { + "smartContractInterfaceId": { + "type": "string", + "description": "The ID of a Smart Contract Interface intended for deletion." + } + }, + "required": ["smartContractInterfaceId"] + }, + "DeleteSmartContractInterfaceRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_DELETE_SMART_CONTRACT_INTERFACE"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/DeleteSmartContractInterfaceIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "DeleteSmartContractInterfaceResult": { + "type": "object", + "properties": { + "smartContractInterfaceId": { + "type": "string", + "description": "The ID of the deleted Smart Contract Interface." + } + }, + "required": ["smartContractInterfaceId"] + }, + "DeleteSubOrganizationIntent": { + "type": "object", + "properties": { + "deleteWithoutExport": { + "type": "boolean", + "x-nullable": true, + "description": "Sub-organization deletion, by default, requires associated wallets and private keys to be exported for security reasons. Set this boolean to true to force sub-organization deletion even if some wallets or private keys within it have not been exported yet. Default: false." + } + } + }, + "DeleteSubOrganizationRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_DELETE_SUB_ORGANIZATION"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/DeleteSubOrganizationIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "DeleteSubOrganizationResult": { + "type": "object", + "properties": { + "subOrganizationUuid": { + "type": "string", + "description": "Unique identifier of the sub organization that was removed" + } + }, + "required": ["subOrganizationUuid"] + }, + "DeleteTvcAppAndDeploymentsIntent": { + "type": "object", + "properties": { + "appId": { + "type": "string", + "description": "The unique identifier of the TVC app to delete. The app and all associated deployments will be removed." + } + }, + "required": ["appId"] + }, + "DeleteTvcAppAndDeploymentsRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_DELETE_TVC_APP_AND_DEPLOYMENTS"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/DeleteTvcAppAndDeploymentsIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "DeleteTvcAppAndDeploymentsResult": { + "type": "object", + "properties": { + "appId": { + "type": "string", + "description": "The unique identifier of the deleted TVC app." + } + }, + "required": ["appId"] + }, + "DeleteTvcDeploymentIntent": { + "type": "object", + "properties": { + "deploymentId": { + "type": "string", + "description": "The unique identifier of the TVC deployment to delete." + } + }, + "required": ["deploymentId"] + }, + "DeleteTvcDeploymentRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_DELETE_TVC_DEPLOYMENT"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/DeleteTvcDeploymentIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "DeleteTvcDeploymentResult": { + "type": "object", + "properties": { + "deploymentId": { + "type": "string", + "description": "The unique identifier of the deleted TVC deployment." + } + }, + "required": ["deploymentId"] + }, + "DeleteUserTagsIntent": { + "type": "object", + "properties": { + "userTagIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User Tag IDs." + } + }, + "required": ["userTagIds"] + }, + "DeleteUserTagsRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_DELETE_USER_TAGS"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/DeleteUserTagsIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "DeleteUserTagsResult": { + "type": "object", + "properties": { + "userTagIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User Tag IDs." + }, + "userIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User IDs." + } + }, + "required": ["userTagIds", "userIds"] + }, + "DeleteUsersIntent": { + "type": "object", + "properties": { + "userIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User IDs." + } + }, + "required": ["userIds"] + }, + "DeleteUsersRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_DELETE_USERS"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/DeleteUsersIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "DeleteUsersResult": { + "type": "object", + "properties": { + "userIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User IDs." + } + }, + "required": ["userIds"] + }, + "DeleteWalletAccountsIntent": { + "type": "object", + "properties": { + "walletAccountIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of unique identifiers for wallet accounts within an organization" + }, + "deleteWithoutExport": { + "type": "boolean", + "x-nullable": true, + "description": "Optional parameter for deleting the wallet accounts, even if any have not been previously exported. If they have been exported, this field is ignored." + } + }, + "required": ["walletAccountIds"] + }, + "DeleteWalletAccountsRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_DELETE_WALLET_ACCOUNTS"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/DeleteWalletAccountsIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "DeleteWalletAccountsResult": { + "type": "object", + "properties": { + "walletAccountIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of wallet account unique identifiers that were removed" + } + }, + "required": ["walletAccountIds"] + }, + "DeleteWalletsIntent": { + "type": "object", + "properties": { + "walletIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of unique identifiers for wallets within an organization" + }, + "deleteWithoutExport": { + "type": "boolean", + "x-nullable": true, + "description": "Optional parameter for deleting the wallets, even if any have not been previously exported. If they have been exported, this field is ignored." + } + }, + "required": ["walletIds"] + }, + "DeleteWalletsRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_DELETE_WALLETS"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/DeleteWalletsIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "DeleteWalletsResult": { + "type": "object", + "properties": { + "walletIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of wallet unique identifiers that were removed" + } + }, + "required": ["walletIds"] + }, + "DeleteWebhookEndpointIntent": { + "type": "object", + "properties": { + "endpointId": { + "type": "string", + "description": "Unique identifier of the webhook endpoint to delete." + } + }, + "required": ["endpointId"] + }, + "DeleteWebhookEndpointRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_DELETE_WEBHOOK_ENDPOINT"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/DeleteWebhookEndpointIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "DeleteWebhookEndpointResult": { + "type": "object", + "properties": { + "endpointId": { + "type": "string", + "description": "Unique identifier of the deleted webhook endpoint." + } + }, + "required": ["endpointId"] + }, + "DeploymentStatus": { + "type": "object", + "properties": { + "deploymentId": { + "type": "string", + "description": "Unique identifier for this deployment (corresponds to k8s deployment label)" + }, + "readyReplicas": { + "type": "integer", + "format": "int32", + "description": "Number of ready replicas" + }, + "desiredReplicas": { + "type": "integer", + "format": "int32", + "description": "Desired number of replicas" + }, + "lastUpdatedTime": { + "$ref": "#/definitions/external.data.v1.Timestamp", + "description": "Last time this deployment was updated" + } + }, + "required": [ + "deploymentId", + "readyReplicas", + "desiredReplicas", + "lastUpdatedTime" + ] + }, + "DisableAuthProxyIntent": { + "type": "object" + }, + "DisableAuthProxyResult": { + "type": "object" + }, + "DisablePrivateKeyIntent": { + "type": "object", + "properties": { + "privateKeyId": { + "type": "string", + "description": "Unique identifier for a given Private Key." + } + }, + "required": ["privateKeyId"] + }, + "DisablePrivateKeyResult": { + "type": "object", + "properties": { + "privateKeyId": { + "type": "string", + "description": "Unique identifier for a given Private Key." + } + }, + "required": ["privateKeyId"] + }, + "EarnDeployWrapperIntent": { + "type": "object", + "properties": { + "vaultAddress": { + "type": "string", + "description": "Address of the underlying yield vault to wrap (from the ListEarnVaults catalog)." + }, + "chainCaip2": { + "type": "string", + "enum": [ + "eip155:1", + "eip155:8453", + "eip155:42161", + "eip155:137", + "eip155:56", + "eip155:4217" + ], + "description": "CAIP-2 chain ID the vault lives on (e.g., 'eip155:8453' for Base)." + }, + "clientFeeBps": { + "type": "string", + "description": "Your fee on gross yield, in basis points (e.g., '2000' for 20%). Maximum is 4000 (40%)." + }, + "clientFeeWallet": { + "type": "string", + "description": "The wallet address that receives the client's fee payouts on-chain. Must be a Turnkey-managed wallet address." + } + }, + "required": [ + "vaultAddress", + "chainCaip2", + "clientFeeBps", + "clientFeeWallet" + ] + }, + "EarnDeployWrapperRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_EARN_DEPLOY_WRAPPER"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/EarnDeployWrapperIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "EarnDeployWrapperResult": { + "type": "object", + "properties": { + "wrapperAddress": { + "type": "string", + "description": "Address of the deployed fee wrapper (the deposit target)." + }, + "splitterAddress": { + "type": "string", + "description": "Address of the deployed fee splitter (PaymentSplitter for Morpho, RevenueSplitterOwner for Aave)." + }, + "deployRequestId": { + "type": "string", + "description": "Identifier to poll deploy status." + } + }, + "required": ["wrapperAddress", "splitterAddress", "deployRequestId"] + }, + "EarnDepositIntent": { + "type": "object", + "properties": { + "wrapperAddress": { + "type": "string", + "description": "Address of the deployed Earn wrapper to deposit into, from ListEarnVaults/ListEarnPositions. Must be one of the org's deployed wrappers." + }, + "signWith": { + "type": "string", + "description": "A Wallet account address or Private Key address to deposit from and sign with. Must be an on-chain address; Private Key identifiers are not supported." + }, + "assets": { + "type": "string", + "description": "Amount of the underlying asset to deposit, in raw on-chain units (e.g., '1000000' for 1 USDC at 6 decimals)." + }, + "chainCaip2": { + "type": "string", + "enum": [ + "eip155:1", + "eip155:8453", + "eip155:42161", + "eip155:137", + "eip155:56", + "eip155:4217" + ], + "description": "CAIP-2 chain ID the vault lives on (e.g., 'eip155:8453' for Base)." + }, + "sponsor": { + "type": "boolean", + "x-nullable": true, + "description": "Whether to sponsor this transaction via Gas Station." + } + }, + "required": ["wrapperAddress", "signWith", "assets", "chainCaip2"] + }, + "EarnDepositRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_EARN_DEPOSIT"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/EarnDepositIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "EarnDepositResult": { + "type": "object", + "properties": { + "depositRequestId": { + "type": "string", + "description": "Identifier to poll deposit status and tx hash via GetEarnDepositStatus." + } + }, + "required": ["depositRequestId"] + }, + "EarnEnabledVault": { + "type": "object", + "properties": { + "vaultAddress": { + "type": "string", + "description": "Address of the underlying yield vault." + }, + "wrapperAddress": { + "type": "string", + "description": "Address of the deployed fee wrapper (the deposit target)." + }, + "provider": { + "$ref": "#/definitions/EarnProvider", + "description": "Yield provider for the vault." + }, + "caip19": { + "type": "string", + "description": "CAIP-19 asset ID of the vault's underlying asset (e.g. 'eip155:8453/erc20:0x833589...'); the chain is encoded in the identifier." + }, + "apyPct": { + "type": "string", + "description": "Gross annual percentage yield, expressed as a decimal fraction (before fees)." + }, + "totalDeposited": { + "type": "string", + "description": "Total deposited through this wrapper (wrapper TVL), in raw on-chain units of the underlying asset." + }, + "display": { + "$ref": "#/definitions/EarnValueDisplay", + "description": "Normalized total-deposited values for display only (usd + crypto). Do not do arithmetic with these; use total_deposited instead." + }, + "netApyPct": { + "type": "string", + "description": "Annual percentage yield net of fees, expressed as a decimal fraction." + }, + "clientFeeBps": { + "type": "string", + "description": "Client fee taken on yield, in basis points." + }, + "depositsDisabled": { + "type": "boolean", + "description": "When true, deposits to this wrapper are rejected; withdrawals are unaffected. Toggled via EarnSetWrapperState." + }, + "name": { + "type": "string", + "description": "Human-readable vault name from the provider (e.g. 'Steakhouse Prime USDC' for Morpho; the reserve symbol for Aave)." + }, + "curator": { + "type": "string", + "description": "Vault curator name(s), comma-separated when a vault has multiple. Empty for providers without curators (e.g. Aave)." + }, + "claimableClientFee": { + "type": "string", + "x-nullable": true, + "description": "The client's claimable fee (releasable now), in raw on-chain units of the underlying asset (the caip19 asset). Turnkey's fee is excluded. Only returned to the parent org; unset when a sub-org queries." + }, + "claimableClientFeeDisplay": { + "$ref": "#/definitions/EarnValueDisplay", + "description": "Normalized claimable_client_fee for display only (usd + crypto). Do not do arithmetic with these; use claimable_client_fee. Unset when a sub-org queries." + }, + "clientFeeWallet": { + "type": "string", + "x-nullable": true, + "description": "The wallet address that receives the client's fee payouts on-chain. Unset when a sub-org queries." + } + } + }, + "EarnPosition": { + "type": "object", + "properties": { + "vaultAddress": { + "type": "string", + "description": "Address of the underlying yield vault." + }, + "wrapperAddress": { + "type": "string", + "description": "Address of the fee wrapper holding the position." + }, + "provider": { + "$ref": "#/definitions/EarnProvider", + "description": "Yield provider for the vault." + }, + "caip19": { + "type": "string", + "description": "CAIP-19 asset ID of the vault's underlying asset (e.g. 'eip155:8453/erc20:0x833589...'); the chain is encoded in the identifier." + }, + "currentValue": { + "type": "string", + "description": "Current value of the position in the underlying asset, in raw on-chain units (already net of the wrapper fee)." + }, + "totalDeposited": { + "type": "string", + "description": "Lifetime total deposited into this position, in raw on-chain units." + }, + "totalWithdrawn": { + "type": "string", + "description": "Lifetime total withdrawn from this position, in raw on-chain units." + }, + "display": { + "$ref": "#/definitions/EarnPositionDisplay", + "description": "USD + crypto renderings for display only. Do not do arithmetic with these." + }, + "depositsDisabled": { + "type": "boolean", + "description": "When true, deposits to this wrapper are rejected; withdrawals are unaffected. Toggled via EarnSetWrapperState." + } + } + }, + "EarnPositionDisplay": { + "type": "object", + "properties": { + "currentValueUsd": { + "type": "string", + "description": "Current value in USD, for display only." + }, + "totalDepositedUsd": { + "type": "string", + "description": "Total deposited in USD, for display only." + }, + "totalWithdrawnUsd": { + "type": "string", + "description": "Total withdrawn in USD, for display only." + }, + "currentValueCrypto": { + "type": "string", + "description": "Current value in the asset's own units, for display only." + }, + "totalDepositedCrypto": { + "type": "string", + "description": "Total deposited in the asset's own units, for display only." + }, + "totalWithdrawnCrypto": { + "type": "string", + "description": "Total withdrawn in the asset's own units, for display only." + } + } + }, + "EarnProvider": { + "type": "string", + "enum": ["EARN_PROVIDER_MORPHO", "EARN_PROVIDER_AAVE"] + }, + "EarnSetWrapperStateIntent": { + "type": "object", + "properties": { + "wrapperAddress": { + "type": "string", + "description": "Address of the deployed Earn wrapper to update, from ListEarnVaults/ListEarnPositions. Must be one of the org's deployed wrappers." + }, + "depositsDisabled": { + "type": "boolean", + "x-nullable": true, + "description": "When true, deposits to this wrapper are rejected; withdrawals are unaffected. Set to false to re-enable deposits." + } + }, + "required": ["wrapperAddress", "depositsDisabled"] + }, + "EarnSetWrapperStateRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_EARN_SET_WRAPPER_STATE"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/EarnSetWrapperStateIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "EarnSetWrapperStateResult": { + "type": "object", + "properties": { + "wrapperAddress": { + "type": "string", + "description": "Address of the updated Earn wrapper." + }, + "depositsDisabled": { + "type": "boolean", + "description": "The wrapper's deposit state after this activity." + } + }, + "required": ["wrapperAddress", "depositsDisabled"] + }, + "EarnValueDisplay": { + "type": "object", + "properties": { + "usd": { + "type": "string", + "description": "USD value, for display only." + }, + "crypto": { + "type": "string", + "description": "Normalized amount in the asset's own units, for display only." + } + } + }, + "EarnVault": { + "type": "object", + "properties": { + "vaultAddress": { + "type": "string", + "description": "Address of the underlying yield vault." + }, + "provider": { + "$ref": "#/definitions/EarnProvider", + "description": "Yield provider for the vault." + }, + "caip19": { + "type": "string", + "description": "CAIP-19 asset ID of the vault's underlying asset (e.g. 'eip155:8453/erc20:0x833589...'); the chain is encoded in the identifier." + }, + "tvl": { + "type": "string", + "description": "Total value locked in the vault, in raw on-chain units of the underlying asset. The catalog is sorted by the USD value of this." + }, + "apyPct": { + "type": "string", + "description": "Current annual percentage yield, expressed as a decimal fraction (e.g., '0.0812' for 8.12%)." + }, + "enabled": { + "type": "boolean", + "description": "Whether the organization has enabled this vault." + }, + "display": { + "$ref": "#/definitions/EarnValueDisplay", + "description": "Normalized TVL values for display purposes only (usd + crypto). Do not do arithmetic with these; use tvl instead." + }, + "name": { + "type": "string", + "description": "Human-readable vault name from the provider (e.g. 'Steakhouse Prime USDC' for Morpho; the reserve symbol for Aave)." + }, + "curator": { + "type": "string", + "description": "Vault curator name(s), comma-separated when a vault has multiple. Empty for providers without curators (e.g. Aave)." + } + } + }, + "EarnWithdrawIntent": { + "type": "object", + "properties": { + "wrapperAddress": { + "type": "string", + "description": "Address of the deployed Earn wrapper holding the position to withdraw from, from ListEarnPositions. Must be one of the org's deployed wrappers." + }, + "signWith": { + "type": "string", + "description": "A Wallet account address or Private Key address to withdraw to and sign with. Must be an on-chain address; Private Key identifiers are not supported." + }, + "chainCaip2": { + "type": "string", + "enum": [ + "eip155:1", + "eip155:8453", + "eip155:42161", + "eip155:137", + "eip155:56", + "eip155:4217" + ], + "description": "CAIP-2 chain ID the vault lives on (e.g., 'eip155:8453' for Base)." + }, + "sponsor": { + "type": "boolean", + "x-nullable": true, + "description": "Whether to sponsor this transaction via Gas Station." + }, + "amountValue": { + "type": "string", + "description": "The amount of the underlying asset to withdraw, in raw on-chain units. Pass 'MAX' to withdraw the entire position." + } + }, + "required": ["wrapperAddress", "signWith", "chainCaip2", "amountValue"] + }, + "EarnWithdrawRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_EARN_WITHDRAW"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/EarnWithdrawIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "EarnWithdrawResult": { + "type": "object", + "properties": { + "withdrawRequestId": { + "type": "string", + "description": "Identifier to poll withdrawal status and tx hash via GetEarnWithdrawStatus." + } + }, + "required": ["withdrawRequestId"] + }, + "Effect": { + "type": "string", + "enum": ["EFFECT_ALLOW", "EFFECT_DENY"] + }, + "EmailAuthCustomizationParams": { + "type": "object", + "properties": { + "appName": { + "type": "string", + "description": "The name of the application. This field is required and will be used in email notifications if an email template is not provided." + }, + "logoUrl": { + "type": "string", + "x-nullable": true, + "description": "A URL pointing to a logo in PNG format. Note this logo will be resized to fit into 340px x 124px." + }, + "magicLinkTemplate": { + "type": "string", + "x-nullable": true, + "description": "A template for the URL to be used in a magic link button, e.g. `https://dapp.xyz/%s`. The auth bundle will be interpolated into the `%s`." + }, + "templateVariables": { + "type": "string", + "x-nullable": true, + "description": "JSON object containing key/value pairs to be used with custom templates." + }, + "templateId": { + "type": "string", + "x-nullable": true, + "description": "Unique identifier for a given Email Template. If not specified, the default is the most recent Email Template." + } + }, + "required": ["appName"] + }, + "EmailAuthIntent": { + "type": "object", + "properties": { + "email": { + "type": "string", + "description": "Email of the authenticating user." + }, + "targetPublicKey": { + "type": "string", + "description": "Client-side public key generated by the user, to which the email auth bundle (credentials) will be encrypted." + }, + "apiKeyName": { + "type": "string", + "x-nullable": true, + "description": "Optional human-readable name for an API Key. If none provided, default to Email Auth - \u003cTimestamp\u003e" + }, + "expirationSeconds": { + "type": "string", + "x-nullable": true, + "description": "Expiration window (in seconds) indicating how long the API key is valid for. If not provided, a default of 15 minutes will be used." + }, + "emailCustomization": { + "$ref": "#/definitions/EmailCustomizationParams", + "x-nullable": true, + "description": "Optional parameters for customizing emails. If not provided, the default email will be used." + }, + "invalidateExisting": { + "type": "boolean", + "x-nullable": true, + "description": "Invalidate all other previously generated Email Auth API keys" + }, + "sendFromEmailAddress": { + "type": "string", + "x-nullable": true, + "description": "Optional custom email address from which to send the email" + }, + "sendFromEmailSenderName": { + "type": "string", + "x-nullable": true, + "description": "Optional custom sender name for use with sendFromEmailAddress; if left empty, will default to 'Notifications'" + }, + "replyToEmailAddress": { + "type": "string", + "x-nullable": true, + "description": "Optional custom email address to use as reply-to" + } + }, + "required": ["email", "targetPublicKey"] + }, + "EmailAuthIntentV2": { + "type": "object", + "properties": { + "email": { + "type": "string", + "description": "Email of the authenticating user." + }, + "targetPublicKey": { + "type": "string", + "description": "Client-side public key generated by the user, to which the email auth bundle (credentials) will be encrypted." + }, + "apiKeyName": { + "type": "string", + "x-nullable": true, + "description": "Optional human-readable name for an API Key. If none provided, default to Email Auth - \u003cTimestamp\u003e" + }, + "expirationSeconds": { + "type": "string", + "x-nullable": true, + "description": "Expiration window (in seconds) indicating how long the API key is valid for. If not provided, a default of 15 minutes will be used." + }, + "emailCustomization": { + "$ref": "#/definitions/EmailCustomizationParams", + "x-nullable": true, + "description": "Optional parameters for customizing emails. If not provided, the default email will be used." + }, + "invalidateExisting": { + "type": "boolean", + "x-nullable": true, + "description": "Invalidate all other previously generated Email Auth API keys" + }, + "sendFromEmailAddress": { + "type": "string", + "x-nullable": true, + "description": "Optional custom email address from which to send the email" + }, + "sendFromEmailSenderName": { + "type": "string", + "x-nullable": true, + "description": "Optional custom sender name for use with sendFromEmailAddress; if left empty, will default to 'Notifications'" + }, + "replyToEmailAddress": { + "type": "string", + "x-nullable": true, + "description": "Optional custom email address to use as reply-to" + } + }, + "required": ["email", "targetPublicKey"] + }, + "EmailAuthIntentV3": { + "type": "object", + "properties": { + "email": { + "type": "string", + "description": "Email of the authenticating user." + }, + "targetPublicKey": { + "type": "string", + "description": "Client-side public key generated by the user, to which the email auth bundle (credentials) will be encrypted." + }, + "apiKeyName": { + "type": "string", + "x-nullable": true, + "description": "Optional human-readable name for an API Key. If none provided, default to Email Auth - \u003cTimestamp\u003e" + }, + "expirationSeconds": { + "type": "string", + "x-nullable": true, + "description": "Expiration window (in seconds) indicating how long the API key is valid for. If not provided, a default of 15 minutes will be used." + }, + "emailCustomization": { + "$ref": "#/definitions/EmailAuthCustomizationParams", + "description": "Parameters for customizing emails. If not provided, the default email will be used. Note that app_name is required." + }, + "invalidateExisting": { + "type": "boolean", + "x-nullable": true, + "description": "Invalidate all other previously generated Email Auth API keys" + }, + "sendFromEmailAddress": { + "type": "string", + "x-nullable": true, + "description": "Optional custom email address from which to send the email" + }, + "sendFromEmailSenderName": { + "type": "string", + "x-nullable": true, + "description": "Optional custom sender name for use with sendFromEmailAddress; if left empty, will default to 'Notifications'" + }, + "replyToEmailAddress": { + "type": "string", + "x-nullable": true, + "description": "Optional custom email address to use as reply-to" + } + }, + "required": ["email", "targetPublicKey", "emailCustomization"] + }, + "EmailAuthRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_EMAIL_AUTH_V3"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/EmailAuthIntentV3" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "EmailAuthResult": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "Unique identifier for the authenticating User." + }, + "apiKeyId": { + "type": "string", + "description": "Unique identifier for the created API key." + } + }, + "required": ["userId", "apiKeyId"] + }, + "EmailCustomizationParams": { + "type": "object", + "properties": { + "appName": { + "type": "string", + "x-nullable": true, + "description": "The name of the application." + }, + "logoUrl": { + "type": "string", + "x-nullable": true, + "description": "A URL pointing to a logo in PNG format. Note this logo will be resized to fit into 340px x 124px." + }, + "magicLinkTemplate": { + "type": "string", + "x-nullable": true, + "description": "A template for the URL to be used in a magic link button, e.g. `https://dapp.xyz/%s`. The auth bundle will be interpolated into the `%s`." + }, + "templateVariables": { + "type": "string", + "x-nullable": true, + "description": "JSON object containing key/value pairs to be used with custom templates." + }, + "templateId": { + "type": "string", + "x-nullable": true, + "description": "Unique identifier for a given Email Template. If not specified, the default is the most recent Email Template." + } + } + }, + "EmailCustomizationParamsV2": { + "type": "object", + "properties": { + "logoUrl": { + "type": "string", + "x-nullable": true, + "description": "A URL pointing to a logo in PNG format. Note this logo will be resized to fit into 340px x 124px." + }, + "magicLinkTemplate": { + "type": "string", + "x-nullable": true, + "description": "A template for the URL to be used in a magic link button, e.g. `https://dapp.xyz/%s`. The auth bundle will be interpolated into the `%s`." + }, + "templateVariables": { + "type": "string", + "x-nullable": true, + "description": "JSON object containing key/value pairs to be used with custom templates." + }, + "templateId": { + "type": "string", + "x-nullable": true, + "description": "Unique identifier for a given Email Template. If not specified, the default is the most recent Email Template." + } + } + }, + "EmailEvent": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the email event" + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for the organization associated with the email event" + }, + "messageId": { + "type": "string", + "description": "Provider message identifier. Multiple events can share the same message ID" + }, + "eventType": { + "type": "string", + "description": "Email event type, such as Send, Delivery, Bounce, or DeliveryDelay" + }, + "fromAddress": { + "type": "string", + "description": "Sender email address" + }, + "toAddress": { + "type": "string", + "description": "Recipient email address" + }, + "senderTenant": { + "type": "string", + "description": "SES tenant that sent the email, when available" + }, + "timestamp": { + "type": "string", + "description": "Event timestamp as millisecond epoch string" + }, + "createdAt": { + "type": "string", + "description": "Creation timestamp as millisecond epoch string" + }, + "details": { + "$ref": "#/definitions/EmailEventDetails", + "description": "Parsed email event details. Fields are populated based on event type and available provider metadata" + } + }, + "required": [ + "id", + "organizationId", + "messageId", + "eventType", + "fromAddress", + "toAddress", + "timestamp", + "createdAt", + "details" + ] + }, + "EmailEventDetails": { + "type": "object", + "properties": { + "bounceType": { + "type": "string", + "description": "Bounce type for Bounce events" + }, + "bounceSubType": { + "type": "string", + "description": "Bounce subtype for Bounce events" + }, + "diagnosticCode": { + "type": "string", + "description": "Diagnostic text for Bounce or DeliveryDelay events" + }, + "deliverySmtpResponse": { + "type": "string", + "description": "SMTP response for Delivery events" + }, + "deliveryProcessingTimeMillis": { + "type": "string", + "format": "uint64", + "description": "Processing time in milliseconds for Delivery events" + }, + "deliveryDelayType": { + "type": "string", + "description": "Delay type for DeliveryDelay events" + }, + "complaintFeedbackType": { + "type": "string", + "description": "Feedback type for Complaint events" + } + } + }, + "EnableAuthProxyIntent": { + "type": "object" + }, + "EnableAuthProxyResult": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "A User ID with permission to initiate authentication." + } + }, + "required": ["userId"] + }, + "EthCallParams": { + "type": "object", + "properties": { + "to": { + "type": "string", + "description": "Recipient address as a hex string with 0x prefix." + }, + "value": { + "type": "string", + "x-nullable": true, + "description": "Amount of native asset to send in wei." + }, + "data": { + "type": "string", + "x-nullable": true, + "description": "Hex-encoded call data for contract interactions." + } + }, + "required": ["to"] + }, + "EthFailureDetails": { + "type": "object", + "properties": { + "revertChain": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/RevertChainEntry" + }, + "description": "Ethereum revert chain, ordered from outermost to innermost." + } + } + }, + "EthSendRawTransactionIntent": { + "type": "object", + "properties": { + "signedTransaction": { + "type": "string", + "description": "The raw, signed transaction to be sent." + }, + "caip2": { + "type": "string", + "enum": [ + "eip155:1", + "eip155:11155111", + "eip155:8453", + "eip155:84532", + "eip155:137", + "eip155:80002", + "eip155:56", + "eip155:97", + "eip155:10", + "eip155:11155420", + "eip155:143", + "eip155:10143", + "eip155:42161", + "eip155:4217", + "eip155:42431", + "eip155:421614" + ], + "description": "CAIP-2 chain ID (e.g., 'eip155:1' for Ethereum mainnet)." + } + }, + "required": ["signedTransaction", "caip2"] + }, + "EthSendRawTransactionResult": { + "type": "object", + "properties": { + "transactionHash": { + "type": "string", + "description": "The transaction hash of the sent transaction" + } + }, + "required": ["transactionHash"] + }, + "EthSendTransactionIntent": { + "type": "object", + "properties": { + "from": { + "type": "string", + "description": "A wallet or private key address to sign with. This does not support private key IDs." + }, + "sponsor": { + "type": "boolean", + "x-nullable": true, + "description": "Whether to sponsor this transaction via Gas Station." + }, + "caip2": { + "type": "string", + "enum": [ + "eip155:1", + "eip155:11155111", + "eip155:8453", + "eip155:84532", + "eip155:137", + "eip155:80002", + "eip155:56", + "eip155:97", + "eip155:10", + "eip155:11155420", + "eip155:143", + "eip155:10143", + "eip155:42161", + "eip155:4217", + "eip155:42431", + "eip155:421614" + ], + "description": "CAIP-2 chain ID (e.g., 'eip155:1' for Ethereum mainnet)." + }, + "to": { + "type": "string", + "description": "Recipient address as a hex string with 0x prefix." + }, + "value": { + "type": "string", + "x-nullable": true, + "description": "Amount of native asset to send in wei." + }, + "data": { + "type": "string", + "x-nullable": true, + "description": "Hex-encoded call data for contract interactions." + }, + "nonce": { + "type": "string", + "x-nullable": true, + "description": "Transaction nonce, for EIP-1559 and Turnkey Gas Station authorizations." + }, + "gasLimit": { + "type": "string", + "x-nullable": true, + "description": "Maximum amount of gas to use for this transaction, for EIP-1559 transactions." + }, + "maxFeePerGas": { + "type": "string", + "x-nullable": true, + "description": "Maximum total fee per gas unit (base fee + priority fee) in wei. Required for non-sponsored (EIP-1559) transactions. Not used for sponsored transactions." + }, + "maxPriorityFeePerGas": { + "type": "string", + "x-nullable": true, + "description": "Maximum priority fee (tip) per gas unit in wei. Required for non-sponsored (EIP-1559) transactions. Not used for sponsored transactions." + }, + "deadline": { + "type": "string", + "x-nullable": true, + "description": "Unix timestamp in seconds for EIP-712 execution deadline. Only used when sponsor=true." + }, + "gasStationNonce": { + "type": "string", + "x-nullable": true, + "description": "The gas station delegate contract nonce. Only used when sponsor=true. Include this if you want maximal security posture." + } + }, + "required": ["from", "caip2", "to"] + }, + "EthSendTransactionIntentV2": { + "type": "object", + "properties": { + "from": { + "type": "string", + "description": "A wallet or private key address to sign with. This does not support private key IDs." + }, + "caip2": { + "type": "string", + "enum": [ + "eip155:1", + "eip155:11155111", + "eip155:8453", + "eip155:84532", + "eip155:137", + "eip155:80002", + "eip155:56", + "eip155:97", + "eip155:10", + "eip155:11155420", + "eip155:143", + "eip155:10143", + "eip155:42161", + "eip155:4217", + "eip155:42431", + "eip155:421614" + ], + "description": "CAIP-2 chain ID (e.g., 'eip155:1' for Ethereum mainnet)." + }, + "sponsor": { + "type": "boolean", + "x-nullable": true, + "description": "Whether to sponsor this transaction via Gas Station. If false or unset, the EOA pays gas. A single call uses EIP-1559; multiple calls use EIP-7702 batch execution via Gas Station." + }, + "nonce": { + "type": "string", + "x-nullable": true, + "description": "Outer transaction nonce. Omit to auto-fetch." + }, + "gasLimit": { + "type": "string", + "x-nullable": true, + "description": "Maximum amount of gas for the outer transaction. Omit to auto-estimate." + }, + "maxFeePerGas": { + "type": "string", + "x-nullable": true, + "description": "Maximum total fee per gas unit (base fee + priority fee) in wei. Omit to auto-estimate." + }, + "maxPriorityFeePerGas": { + "type": "string", + "x-nullable": true, + "description": "Maximum priority fee (tip) per gas unit in wei. Omit to auto-estimate." + }, + "deadline": { + "type": "string", + "x-nullable": true, + "description": "Unix timestamp in seconds for EIP-712 execution deadline. Only used when sponsor=true." + }, + "gasStationNonce": { + "type": "string", + "x-nullable": true, + "description": "The gas station delegate contract nonce used in the BatchExecution EIP-712 message. Valid for sponsored transactions and non-sponsored multi-call batches. Omit to auto-fetch. Use the nonces endpoint for replay protection." + }, + "calls": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/EthCallParams" + }, + "description": "Ordered list of calls to execute. Must contain between 1 and 50 entries. A single entry with sponsor=false uses EIP-1559; multiple entries use EIP-7702 batch execution via Gas Station." + } + }, + "required": ["from", "caip2", "calls"] + }, + "EthSendTransactionRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_ETH_SEND_TRANSACTION_V2"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/EthSendTransactionIntentV2" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "EthSendTransactionResult": { + "type": "object", + "properties": { + "sendTransactionStatusId": { + "type": "string", + "description": "The send_transaction_status ID associated with the transaction submission" + } + }, + "required": ["sendTransactionStatusId"] + }, + "EthSendTransactionResultV2": { + "type": "object", + "properties": { + "sendTransactionStatusId": { + "type": "string", + "description": "The send_transaction_status ID associated with the transaction submission" + } + }, + "required": ["sendTransactionStatusId"] + }, + "EthSendTransactionStatus": { + "type": "object", + "properties": { + "txHash": { + "type": "string", + "x-nullable": true, + "description": "The Ethereum transaction hash, if available." + } + } + }, + "EthTransactionHistoryItem": { + "type": "object", + "properties": { + "transactionHash": { + "type": "string", + "description": "EVM transaction hash." + }, + "block": { + "$ref": "#/definitions/TransactionHistoryBlock", + "description": "Block metadata for the transaction." + }, + "status": { + "type": "string", + "enum": ["CONFIRMED", "FINALIZED"], + "description": "Transaction confirmation status." + }, + "origin": { + "type": "string", + "description": "Origin of the transaction. Examples include TURNKEY." + }, + "from": { + "type": "string", + "description": "EVM sender address for the transaction." + }, + "to": { + "type": "string", + "x-nullable": true, + "description": "EVM transaction destination address, such as the called contract or EVM tx.to. Omitted for contract-creation transactions with no destination. Recipients and payers of value transfers are reflected in transfers[].counterparty." + }, + "fee": { + "$ref": "#/definitions/TransactionHistoryFee", + "description": "Transaction fee information." + }, + "transfers": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/TransactionHistoryTransfer" + }, + "description": "Asset transfers associated with the transaction." + }, + "turnkey": { + "$ref": "#/definitions/TransactionHistoryTurnkey", + "description": "Turnkey-specific metadata for transactions originated by Turnkey." + } + }, + "required": [ + "transactionHash", + "block", + "status", + "origin", + "from", + "fee", + "transfers" + ] + }, + "EthUndelegate7702Intent": { + "type": "object", + "properties": { + "from": { + "type": "string", + "description": "A wallet or private key address to undelegate. This does not support private key IDs." + }, + "caip2": { + "type": "string", + "enum": [ + "eip155:1", + "eip155:11155111", + "eip155:8453", + "eip155:84532", + "eip155:137", + "eip155:80002", + "eip155:56", + "eip155:97", + "eip155:10", + "eip155:11155420", + "eip155:143", + "eip155:10143", + "eip155:42161", + "eip155:421614" + ], + "description": "CAIP-2 chain ID (e.g., 'eip155:1' for Ethereum mainnet)." + }, + "nonce": { + "type": "string", + "x-nullable": true, + "description": "Outer transaction nonce. Omit to auto-fetch." + }, + "gasLimit": { + "type": "string", + "x-nullable": true, + "description": "Maximum amount of gas for the undelegation transaction. Omit to use the fixed undelegation gas limit." + }, + "maxFeePerGas": { + "type": "string", + "x-nullable": true, + "description": "Maximum total fee per gas unit (base fee + priority fee) in wei. Omit to auto-estimate." + }, + "maxPriorityFeePerGas": { + "type": "string", + "x-nullable": true, + "description": "Maximum priority fee (tip) per gas unit in wei. Omit to auto-estimate." + } + }, + "required": ["from", "caip2"] + }, + "EthUndelegate7702Request": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_ETH_UNDELEGATE_7702"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/EthUndelegate7702Intent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "EthUndelegate7702Result": { + "type": "object", + "properties": { + "sendTransactionStatusId": { + "type": "string", + "description": "The send_transaction_status ID associated with the undelegation transaction submission" + } + }, + "required": ["sendTransactionStatusId"] + }, + "ExecuteSwapIntent": { + "type": "object", + "properties": { + "inputToken": { + "type": "string", + "description": "CAIP-19 asset ID for the input asset. The chain is derived from this value." + }, + "outputToken": { + "type": "string", + "description": "CAIP-19 asset ID for the output asset. May be on a different chain than `input_token` for cross-chain swaps." + }, + "inputAmount": { + "type": "string", + "description": "Base-unit amount of the input asset." + }, + "walletAccount": { + "type": "string", + "description": "Wallet account address to sign and submit the swap transaction from. Cross-wallet swaps are not supported." + }, + "sponsor": { + "type": "boolean", + "x-nullable": true, + "description": "Whether to sponsor the resulting swap transaction via Gas Station when supported by the chain." + }, + "slippage": { + "type": "string", + "x-nullable": true, + "description": "Maximum allowed slippage in basis points." + }, + "provider": { + "type": "string", + "x-nullable": true, + "description": "Swap provider to execute with, as returned by create_swap_quote. When omitted, execution uses the default provider." + }, + "minOutputAmount": { + "type": "string", + "description": "Minimum acceptable base-unit amount of the output asset. Execution fails if the swap provider's quoted minimum output falls below this floor at execution time." + } + }, + "required": [ + "inputToken", + "outputToken", + "inputAmount", + "walletAccount", + "minOutputAmount" + ] + }, + "ExecuteSwapIntentV2": { + "type": "object", + "properties": { + "quoteId": { + "type": "string", + "description": "Quote identifier returned by create_swap_quote. Execution is bound to this quote; the signer is derived from the quote and must not be resupplied." + }, + "inputToken": { + "type": "string", + "description": "CAIP-19 asset ID for the input asset." + }, + "inputAmount": { + "type": "string", + "description": "Exact base-unit amount of the input asset committed by the quote." + }, + "outputToken": { + "type": "string", + "description": "CAIP-19 asset ID for the output asset." + }, + "quotedOutputAmount": { + "type": "string", + "description": "Exact quoted base-unit output amount committed by the quote." + }, + "minOutputAmount": { + "type": "string", + "description": "Exact minimum base-unit output committed by the quote." + }, + "sponsor": { + "type": "boolean", + "x-nullable": true, + "description": "Whether the quoted transaction is sponsored." + }, + "evmNonce": { + "type": "string", + "x-nullable": true, + "description": "Exact EVM sender (EOA account) nonce. Valid only for a non-sponsored EVM swap. Honored for already-delegated (Type-2) batch swaps and single-call swaps; ignored for not-yet-delegated EIP-7702 (Type-4) batches where the outer nonce is derived from the authorization. Prefer gas_station_nonce for batch replay protection and use the nonces endpoint to fetch it. Omit to auto-fetch." + }, + "recentBlockhash": { + "type": "string", + "x-nullable": true, + "description": "Exact Solana recent blockhash. Valid only for a Solana swap, including sponsored swaps. Omit to auto-fetch." + }, + "gasStationNonce": { + "type": "string", + "x-nullable": true, + "description": "Exact gas station delegate contract nonce used in the BatchExecution EIP-712 message. Valid for sponsored EVM swaps and non-sponsored EVM swaps that execute as a multi-call batch (for example ERC-20 approve + swap). This is the replay-protection nonce for gas-station batches; use the nonces endpoint to fetch it. Omit to auto-fetch." + } + }, + "required": [ + "quoteId", + "inputToken", + "inputAmount", + "outputToken", + "quotedOutputAmount", + "minOutputAmount", + "sponsor" + ] + }, + "ExecuteSwapResult": { + "type": "object", + "properties": { + "swapRequestId": { + "type": "string", + "description": "Identifier to poll swap status via GetSwapStatus." + }, + "provider": { + "type": "string", + "x-nullable": true, + "description": "Swap provider used to build the transaction." + }, + "quoteId": { + "type": "string", + "x-nullable": true, + "description": "Quote identifier used for execution, if any." + } + }, + "required": ["swapRequestId"] + }, + "ExportPrivateKeyIntent": { + "type": "object", + "properties": { + "privateKeyId": { + "type": "string", + "description": "Unique identifier for a given Private Key." + }, + "targetPublicKey": { + "type": "string", + "description": "Client-side public key generated by the user, to which the export bundle will be encrypted." + } + }, + "required": ["privateKeyId", "targetPublicKey"] + }, + "ExportPrivateKeyRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_EXPORT_PRIVATE_KEY"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/ExportPrivateKeyIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "ExportPrivateKeyResult": { + "type": "object", + "properties": { + "privateKeyId": { + "type": "string", + "description": "Unique identifier for a given Private Key." + }, + "exportBundle": { + "type": "string", + "description": "Export bundle containing a private key encrypted to the client's target public key." + } + }, + "required": ["privateKeyId", "exportBundle"] + }, + "ExportWalletAccountIntent": { + "type": "object", + "properties": { + "address": { + "type": "string", + "description": "Address to identify Wallet Account." + }, + "targetPublicKey": { + "type": "string", + "description": "Client-side public key generated by the user, to which the export bundle will be encrypted." + } + }, + "required": ["address", "targetPublicKey"] + }, + "ExportWalletAccountRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_EXPORT_WALLET_ACCOUNT"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/ExportWalletAccountIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "ExportWalletAccountResult": { + "type": "object", + "properties": { + "address": { + "type": "string", + "description": "Address to identify Wallet Account." + }, + "exportBundle": { + "type": "string", + "description": "Export bundle containing a private key encrypted by the client's target public key." + } + }, + "required": ["address", "exportBundle"] + }, + "ExportWalletIntent": { + "type": "object", + "properties": { + "walletId": { + "type": "string", + "description": "Unique identifier for a given Wallet." + }, + "targetPublicKey": { + "type": "string", + "description": "Client-side public key generated by the user, to which the export bundle will be encrypted." + }, + "language": { + "$ref": "#/definitions/MnemonicLanguage", + "x-nullable": true, + "description": "The language of the mnemonic to export. Defaults to English." + } + }, + "required": ["walletId", "targetPublicKey"] + }, + "ExportWalletRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_EXPORT_WALLET"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/ExportWalletIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "ExportWalletResult": { + "type": "object", + "properties": { + "walletId": { + "type": "string", + "description": "Unique identifier for a given Wallet." + }, + "exportBundle": { + "type": "string", + "description": "Export bundle containing a wallet mnemonic + optional newline passphrase encrypted by the client's target public key." + } + }, + "required": ["walletId", "exportBundle"] + }, + "Feature": { + "type": "object", + "properties": { + "name": { + "$ref": "#/definitions/FeatureName" + }, + "value": { + "type": "string", + "x-nullable": true + } + } + }, + "FeatureName": { + "type": "string", + "enum": [ + "FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY", + "FEATURE_NAME_WEBAUTHN_ORIGINS", + "FEATURE_NAME_EMAIL_AUTH", + "FEATURE_NAME_EMAIL_RECOVERY", + "FEATURE_NAME_WEBHOOK", + "FEATURE_NAME_SMS_AUTH", + "FEATURE_NAME_OTP_EMAIL_AUTH", + "FEATURE_NAME_AUTH_PROXY", + "FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED", + "FEATURE_NAME_SWAP_CONFIG", + "FEATURE_NAME_EARN_CONFIG" + ] + }, + "FiatOnRampBlockchainNetwork": { + "type": "string", + "enum": [ + "FIAT_ON_RAMP_BLOCKCHAIN_NETWORK_BITCOIN", + "FIAT_ON_RAMP_BLOCKCHAIN_NETWORK_ETHEREUM", + "FIAT_ON_RAMP_BLOCKCHAIN_NETWORK_SOLANA", + "FIAT_ON_RAMP_BLOCKCHAIN_NETWORK_BASE" + ] + }, + "FiatOnRampCredential": { + "type": "object", + "properties": { + "fiatOnrampCredentialId": { + "type": "string", + "description": "Unique identifier for a given Fiat On-Ramp Credential." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for an Organization." + }, + "onrampProvider": { + "$ref": "#/definitions/FiatOnRampProvider", + "description": "The fiat on-ramp provider." + }, + "projectId": { + "type": "string", + "x-nullable": true, + "description": "Project ID for the on-ramp provider. Some providers, like Coinbase, require this additional identifier." + }, + "publishableApiKey": { + "type": "string", + "description": "Publishable API key for the on-ramp provider." + }, + "encryptedSecretApiKey": { + "type": "string", + "description": "Secret API key for the on-ramp provider encrypted to our on-ramp encryption public key." + }, + "encryptedPrivateApiKey": { + "type": "string", + "x-nullable": true, + "description": "Private API key for the on-ramp provider encrypted to our on-ramp encryption public key. Some providers, like Coinbase, require this additional key." + }, + "sandboxMode": { + "type": "boolean", + "description": "If the on-ramp credential is a sandbox credential." + }, + "createdAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + } + }, + "required": [ + "fiatOnrampCredentialId", + "organizationId", + "onrampProvider", + "publishableApiKey", + "encryptedSecretApiKey", + "createdAt", + "updatedAt" + ] + }, + "FiatOnRampCryptoCurrency": { + "type": "string", + "enum": [ + "FIAT_ON_RAMP_CRYPTO_CURRENCY_BTC", + "FIAT_ON_RAMP_CRYPTO_CURRENCY_ETH", + "FIAT_ON_RAMP_CRYPTO_CURRENCY_SOL", + "FIAT_ON_RAMP_CRYPTO_CURRENCY_USDC" + ] + }, + "FiatOnRampCurrency": { + "type": "string", + "enum": [ + "FIAT_ON_RAMP_CURRENCY_AUD", + "FIAT_ON_RAMP_CURRENCY_BGN", + "FIAT_ON_RAMP_CURRENCY_BRL", + "FIAT_ON_RAMP_CURRENCY_CAD", + "FIAT_ON_RAMP_CURRENCY_CHF", + "FIAT_ON_RAMP_CURRENCY_COP", + "FIAT_ON_RAMP_CURRENCY_CZK", + "FIAT_ON_RAMP_CURRENCY_DKK", + "FIAT_ON_RAMP_CURRENCY_DOP", + "FIAT_ON_RAMP_CURRENCY_EGP", + "FIAT_ON_RAMP_CURRENCY_EUR", + "FIAT_ON_RAMP_CURRENCY_GBP", + "FIAT_ON_RAMP_CURRENCY_HKD", + "FIAT_ON_RAMP_CURRENCY_IDR", + "FIAT_ON_RAMP_CURRENCY_ILS", + "FIAT_ON_RAMP_CURRENCY_JOD", + "FIAT_ON_RAMP_CURRENCY_KES", + "FIAT_ON_RAMP_CURRENCY_KWD", + "FIAT_ON_RAMP_CURRENCY_LKR", + "FIAT_ON_RAMP_CURRENCY_MXN", + "FIAT_ON_RAMP_CURRENCY_NGN", + "FIAT_ON_RAMP_CURRENCY_NOK", + "FIAT_ON_RAMP_CURRENCY_NZD", + "FIAT_ON_RAMP_CURRENCY_OMR", + "FIAT_ON_RAMP_CURRENCY_PEN", + "FIAT_ON_RAMP_CURRENCY_PLN", + "FIAT_ON_RAMP_CURRENCY_RON", + "FIAT_ON_RAMP_CURRENCY_SEK", + "FIAT_ON_RAMP_CURRENCY_THB", + "FIAT_ON_RAMP_CURRENCY_TRY", + "FIAT_ON_RAMP_CURRENCY_TWD", + "FIAT_ON_RAMP_CURRENCY_USD", + "FIAT_ON_RAMP_CURRENCY_VND", + "FIAT_ON_RAMP_CURRENCY_ZAR" + ] + }, + "FiatOnRampPaymentMethod": { + "type": "string", + "enum": [ + "FIAT_ON_RAMP_PAYMENT_METHOD_CREDIT_DEBIT_CARD", + "FIAT_ON_RAMP_PAYMENT_METHOD_APPLE_PAY", + "FIAT_ON_RAMP_PAYMENT_METHOD_GBP_BANK_TRANSFER", + "FIAT_ON_RAMP_PAYMENT_METHOD_GBP_OPEN_BANKING_PAYMENT", + "FIAT_ON_RAMP_PAYMENT_METHOD_GOOGLE_PAY", + "FIAT_ON_RAMP_PAYMENT_METHOD_SEPA_BANK_TRANSFER", + "FIAT_ON_RAMP_PAYMENT_METHOD_PIX_INSTANT_PAYMENT", + "FIAT_ON_RAMP_PAYMENT_METHOD_PAYPAL", + "FIAT_ON_RAMP_PAYMENT_METHOD_VENMO", + "FIAT_ON_RAMP_PAYMENT_METHOD_MOONPAY_BALANCE", + "FIAT_ON_RAMP_PAYMENT_METHOD_CRYPTO_ACCOUNT", + "FIAT_ON_RAMP_PAYMENT_METHOD_FIAT_WALLET", + "FIAT_ON_RAMP_PAYMENT_METHOD_ACH_BANK_ACCOUNT" + ] + }, + "FiatOnRampProvider": { + "type": "string", + "enum": [ + "FIAT_ON_RAMP_PROVIDER_COINBASE", + "FIAT_ON_RAMP_PROVIDER_MOONPAY" + ] + }, + "GetActivitiesRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "filterByStatus": { + "type": "array", + "items": { + "$ref": "#/definitions/ActivityStatus" + }, + "description": "Array of activity statuses filtering which activities will be listed in the response." + }, + "paginationOptions": { + "$ref": "#/definitions/Pagination", + "description": "Parameters used for cursor-based pagination." + }, + "filterByType": { + "type": "array", + "items": { + "$ref": "#/definitions/ActivityType" + }, + "description": "Array of activity types filtering which activities will be listed in the response." + } + }, + "required": ["organizationId"] + }, + "GetActivitiesResponse": { + "type": "object", + "properties": { + "activities": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/Activity" + }, + "description": "A list of activities." + } + }, + "required": ["activities"] + }, + "GetActivityRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "activityId": { + "type": "string", + "description": "Unique identifier for a given activity object." + } + }, + "required": ["organizationId", "activityId"] + }, + "GetApiKeyRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "apiKeyId": { + "type": "string", + "description": "Unique identifier for a given API key." + } + }, + "required": ["organizationId", "apiKeyId"] + }, + "GetApiKeyResponse": { + "type": "object", + "properties": { + "apiKey": { + "$ref": "#/definitions/ApiKey", + "description": "An API key." + } + }, + "required": ["apiKey"] + }, + "GetApiKeysRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "userId": { + "type": "string", + "x-nullable": true, + "description": "Unique identifier for a given user." + } + }, + "required": ["organizationId"] + }, + "GetApiKeysResponse": { + "type": "object", + "properties": { + "apiKeys": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/ApiKey" + }, + "description": "A list of API keys." + } + }, + "required": ["apiKeys"] + }, + "GetAppProofsRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "activityId": { + "type": "string", + "description": "Unique identifier for a given activity." + } + }, + "required": ["organizationId", "activityId"] + }, + "GetAppProofsResponse": { + "type": "object", + "properties": { + "appProofs": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/AppProof" + } + } + }, + "required": ["appProofs"] + }, + "GetAppStatusRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "appId": { + "type": "string", + "description": "Unique identifier for a given TVC App." + } + }, + "required": ["organizationId", "appId"] + }, + "GetAppStatusResponse": { + "type": "object", + "properties": { + "appStatus": { + "$ref": "#/definitions/AppStatus", + "description": "Live runtime status for the TVC App" + } + }, + "required": ["appStatus"] + }, + "GetAuthenticatorRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "authenticatorId": { + "type": "string", + "description": "Unique identifier for a given authenticator." + } + }, + "required": ["organizationId", "authenticatorId"] + }, + "GetAuthenticatorResponse": { + "type": "object", + "properties": { + "authenticator": { + "$ref": "#/definitions/Authenticator", + "description": "An authenticator." + } + }, + "required": ["authenticator"] + }, + "GetAuthenticatorsRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "userId": { + "type": "string", + "description": "Unique identifier for a given user." + } + }, + "required": ["organizationId", "userId"] + }, + "GetAuthenticatorsResponse": { + "type": "object", + "properties": { + "authenticators": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/Authenticator" + }, + "description": "A list of authenticators." + } + }, + "required": ["authenticators"] + }, + "GetBootProofRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "ephemeralKey": { + "type": "string", + "description": "Hex encoded ephemeral public key." + } + }, + "required": ["organizationId", "ephemeralKey"] + }, + "GetClaimEarnFeesStatusRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "claimRequestId": { + "type": "string", + "description": "The claim_request_id returned by ClaimEarnFees." + } + }, + "required": ["organizationId", "claimRequestId"] + }, + "GetClaimEarnFeesStatusResponse": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": ["PENDING", "COMPLETED", "FAILED"], + "description": "Status of the fee claim." + }, + "claimTxHash": { + "type": "string", + "x-nullable": true, + "description": "Transaction hash of the fee claim, once available." + }, + "error": { + "type": "string", + "x-nullable": true, + "description": "Reason the fee claim transaction failed, when status is FAILED." + } + }, + "required": ["status"] + }, + "GetEarnDeployStatusRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "deployRequestId": { + "type": "string", + "description": "The deploy_request_id returned by EarnDeployWrapper." + } + }, + "required": ["organizationId", "deployRequestId"] + }, + "GetEarnDeployStatusResponse": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": ["PENDING", "COMPLETED", "FAILED"], + "description": "Status of the wrapper deployment." + }, + "deployTxHash": { + "type": "string", + "x-nullable": true, + "description": "Transaction hash of the deployment, once available." + }, + "error": { + "type": "string", + "x-nullable": true, + "description": "Reason the deployment transaction failed, when status is FAILED." + } + }, + "required": ["status"] + }, + "GetEarnDepositStatusRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "depositRequestId": { + "type": "string", + "description": "The deposit_request_id returned by EarnDeposit." + } + }, + "required": ["organizationId", "depositRequestId"] + }, + "GetEarnDepositStatusResponse": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": ["PENDING", "COMPLETED", "FAILED"], + "description": "Status of the deposit." + }, + "depositTxHash": { + "type": "string", + "x-nullable": true, + "description": "Transaction hash of the deposit, once available." + }, + "error": { + "type": "string", + "x-nullable": true, + "description": "Reason the deposit transaction failed, when status is FAILED." + } + }, + "required": ["status"] + }, + "GetEarnWithdrawStatusRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "withdrawRequestId": { + "type": "string", + "description": "The withdraw_request_id returned by EarnWithdraw." + } + }, + "required": ["organizationId", "withdrawRequestId"] + }, + "GetEarnWithdrawStatusResponse": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": ["PENDING", "COMPLETED", "FAILED"], + "description": "Status of the withdrawal." + }, + "withdrawTxHash": { + "type": "string", + "x-nullable": true, + "description": "Transaction hash of the withdrawal, once available." + }, + "error": { + "type": "string", + "x-nullable": true, + "description": "Reason the withdrawal transaction failed, when status is FAILED." + } + }, + "required": ["status"] + }, + "GetGasUsageRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + } + }, + "required": ["organizationId"] + }, + "GetGasUsageResponse": { + "type": "object", + "properties": { + "windowDurationMinutes": { + "type": "integer", + "format": "int32", + "description": "The window duration (in minutes) for the organization or sub-organization." + }, + "windowLimitUsd": { + "type": "string", + "description": "The window limit (in USD) for the organization or sub-organization." + }, + "usageUsd": { + "type": "string", + "description": "The total gas usage (in USD) of all sponsored transactions processed over the last `window_duration_minutes`" + } + }, + "required": ["windowDurationMinutes", "windowLimitUsd", "usageUsd"] + }, + "GetIpAllowlistRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "publicKey": { + "type": "string", + "x-nullable": true, + "description": "If provided, return only the allowlist for this specific API key." + } + }, + "required": ["organizationId"] + }, + "GetIpAllowlistResponse": { + "type": "object", + "properties": { + "allowlist": { + "$ref": "#/definitions/IpAllowlist" + } + }, + "required": ["allowlist"] + }, + "GetLatestBootProofRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "appName": { + "type": "string", + "description": "Unique identifier (UUID) of the enclave app." + } + }, + "required": ["organizationId", "appName"] + }, + "GetMfaPoliciesRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "userId": { + "type": "string", + "description": "Unique identifier for a given user." + } + }, + "required": ["organizationId", "userId"] + }, + "GetMfaPoliciesResponse": { + "type": "object", + "properties": { + "mfaPolicies": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/MfaPolicy" + }, + "description": "A list of multi-factor authentication policies for a user." + } + }, + "required": ["mfaPolicies"] + }, + "GetMfaPolicyRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "userId": { + "type": "string", + "description": "Unique identifier for a given user." + }, + "mfaPolicyId": { + "type": "string", + "description": "Unique identifier for a given MFA policy." + } + }, + "required": ["organizationId", "userId", "mfaPolicyId"] + }, + "GetMfaPolicyResponse": { + "type": "object", + "properties": { + "mfaPolicy": { + "$ref": "#/definitions/MfaPolicy", + "description": "Multi-factor authentication policy for a user." + } + }, + "required": ["mfaPolicy"] + }, + "GetMfaStatusRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "activityId": { + "type": "string", + "description": "The unique identifier of the activity to get MFA status for." + }, + "userId": { + "type": "string", + "x-nullable": true, + "description": "Optional user ID to filter MFA status for a specific user." + } + }, + "required": ["organizationId", "activityId"] + }, + "GetMfaStatusResponse": { + "type": "object", + "properties": { + "mfaStatuses": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/MfaStatus" + }, + "description": "A list of MFA statuses for the activity's votes." + } + }, + "required": ["mfaStatuses"] + }, + "GetNoncesRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "address": { + "type": "string", + "description": "The Ethereum address to query nonces for." + }, + "caip2": { + "type": "string", + "enum": [ + "eip155:1", + "eip155:11155111", + "eip155:8453", + "eip155:84532", + "eip155:137", + "eip155:80002", + "eip155:56", + "eip155:97", + "eip155:10", + "eip155:11155420", + "eip155:143", + "eip155:10143", + "eip155:42161", + "eip155:4217", + "eip155:42431", + "eip155:421614" + ], + "description": "CAIP-2 chain ID (e.g., 'eip155:1' for Ethereum mainnet)." + }, + "nonce": { + "type": "boolean", + "description": "Whether to fetch the standard on-chain nonce." + }, + "gasStationNonce": { + "type": "boolean", + "description": "Whether to fetch the gas station nonce used for sponsored transactions." + } + }, + "required": ["organizationId", "address", "caip2"] + }, + "GetNoncesResponse": { + "type": "object", + "properties": { + "nonce": { + "type": "string", + "format": "uint64", + "x-nullable": true, + "description": "The standard on-chain nonce for the address, if requested." + }, + "gasStationNonce": { + "type": "string", + "format": "uint64", + "x-nullable": true, + "description": "The gas station nonce for sponsored transactions, if requested." + } + } + }, + "GetOauth2CredentialRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "oauth2CredentialId": { + "type": "string", + "description": "Unique identifier for a given OAuth 2.0 Credential." + } + }, + "required": ["organizationId", "oauth2CredentialId"] + }, + "GetOauth2CredentialResponse": { + "type": "object", + "properties": { + "oauth2Credential": { + "$ref": "#/definitions/Oauth2Credential" + } + }, + "required": ["oauth2Credential"] + }, + "GetOauthProvidersRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "userId": { + "type": "string", + "x-nullable": true, + "description": "Unique identifier for a given user." + } + }, + "required": ["organizationId"] + }, + "GetOauthProvidersResponse": { + "type": "object", + "properties": { + "oauthProviders": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/OauthProvider" + }, + "description": "A list of Oauth providers." + } + }, + "required": ["oauthProviders"] + }, + "GetOnRampTransactionStatusRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "transactionId": { + "type": "string", + "description": "The unique identifier for the fiat on ramp transaction." + }, + "refresh": { + "type": "boolean", + "x-nullable": true, + "description": "Optional flag to specify if the transaction status should be refreshed from the fiat on ramp provider. Default = false." + } + }, + "required": ["organizationId", "transactionId"] + }, + "GetOnRampTransactionStatusResponse": { + "type": "object", + "properties": { + "transactionStatus": { + "type": "string", + "description": "The status of the fiat on ramp transaction." + } + }, + "required": ["transactionStatus"] + }, + "GetOrganizationConfigsRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + } + }, + "required": ["organizationId"] + }, + "GetOrganizationConfigsResponse": { + "type": "object", + "properties": { + "configs": { + "$ref": "#/definitions/Config", + "description": "Organization configs including quorum settings and organization features." + } + }, + "required": ["configs"] + }, + "GetPoliciesRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + } + }, + "required": ["organizationId"] + }, + "GetPoliciesResponse": { + "type": "object", + "properties": { + "policies": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/Policy" + }, + "description": "A list of policies." + } + }, + "required": ["policies"] + }, + "GetPolicyEvaluationsRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "activityId": { + "type": "string", + "description": "Unique identifier for a given activity." + } + }, + "required": ["organizationId", "activityId"] + }, + "GetPolicyEvaluationsResponse": { + "type": "object", + "properties": { + "policyEvaluations": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/activity.v1.PolicyEvaluation" + } + } + }, + "required": ["policyEvaluations"] + }, + "GetPolicyRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "policyId": { + "type": "string", + "description": "Unique identifier for a given policy." + } + }, + "required": ["organizationId", "policyId"] + }, + "GetPolicyResponse": { + "type": "object", + "properties": { + "policy": { + "$ref": "#/definitions/Policy", + "description": "Object that codifies rules defining the actions that are permissible within an organization." + } + }, + "required": ["policy"] + }, + "GetPrivateKeyRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "privateKeyId": { + "type": "string", + "description": "Unique identifier for a given private key." + } + }, + "required": ["organizationId", "privateKeyId"] + }, + "GetPrivateKeyResponse": { + "type": "object", + "properties": { + "privateKey": { + "$ref": "#/definitions/PrivateKey", + "description": "Cryptographic public/private key pair that can be used for cryptocurrency needs or more generalized encryption." + } + }, + "required": ["privateKey"] + }, + "GetPrivateKeysRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + } + }, + "required": ["organizationId"] + }, + "GetPrivateKeysResponse": { + "type": "object", + "properties": { + "privateKeys": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/PrivateKey" + }, + "description": "A list of private keys." + } + }, + "required": ["privateKeys"] + }, + "GetSendTransactionStatusRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "sendTransactionStatusId": { + "type": "string", + "description": "The unique identifier of a send transaction request." + } + }, + "required": ["organizationId", "sendTransactionStatusId"] + }, + "GetSendTransactionStatusResponse": { + "type": "object", + "properties": { + "txStatus": { + "type": "string", + "description": "The current status of the send transaction." + }, + "eth": { + "$ref": "#/definitions/EthSendTransactionStatus", + "description": "Ethereum-specific transaction status." + }, + "solana": { + "$ref": "#/definitions/SolanaSendTransactionStatus", + "description": "Solana-specific transaction status." + }, + "txError": { + "type": "string", + "x-nullable": true, + "description": "The error encountered when broadcasting or confirming the transaction, if any." + }, + "error": { + "$ref": "#/definitions/TxError", + "x-nullable": true, + "description": "Structured error information including revert details, if available." + } + }, + "required": ["txStatus"] + }, + "GetSessionProfileRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "sessionProfileId": { + "type": "string", + "description": "Unique identifier for a session profile." + } + }, + "required": ["organizationId", "sessionProfileId"] + }, + "GetSessionProfileResponse": { + "type": "object", + "properties": { + "sessionProfile": { + "$ref": "#/definitions/SessionProfile", + "description": "Session profile for a user, including details about the user's authenticators, Oauth providers, API keys, and MFA policies." + } + }, + "required": ["sessionProfile"] + }, + "GetSessionProfilesRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + } + }, + "required": ["organizationId"] + }, + "GetSessionProfilesResponse": { + "type": "object", + "properties": { + "sessionProfiles": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/SessionProfile" + }, + "description": "A list of session profiles for users in the organization." + } + }, + "required": ["sessionProfiles"] + }, + "GetSmartContractInterfaceRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "smartContractInterfaceId": { + "type": "string", + "description": "Unique identifier for a given smart contract interface." + } + }, + "required": ["organizationId", "smartContractInterfaceId"] + }, + "GetSmartContractInterfaceResponse": { + "type": "object", + "properties": { + "smartContractInterface": { + "$ref": "#/definitions/data.v1.SmartContractInterface", + "description": "Object to be used in conjunction with policies to guard transaction signing." + } + }, + "required": ["smartContractInterface"] + }, + "GetSmartContractInterfacesRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + } + }, + "required": ["organizationId"] + }, + "GetSmartContractInterfacesResponse": { + "type": "object", + "properties": { + "smartContractInterfaces": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/data.v1.SmartContractInterface" + }, + "description": "A list of smart contract interfaces." + } + }, + "required": ["smartContractInterfaces"] + }, + "GetSubOrgIdsRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for the parent organization. This is used to find sub-organizations within it." + }, + "filterType": { + "type": "string", + "description": "Specifies the type of filter to apply, i.e 'CREDENTIAL_ID', 'NAME', 'USERNAME', 'EMAIL', 'PHONE_NUMBER', 'OIDC_TOKEN', 'WALLET_ACCOUNT_ADDRESS' or 'PUBLIC_KEY'" + }, + "filterValue": { + "type": "string", + "description": "The value of the filter to apply for the specified type. For example, a specific email or name string." + }, + "paginationOptions": { + "$ref": "#/definitions/Pagination", + "description": "Parameters used for cursor-based pagination." + } + }, + "required": ["organizationId"] + }, + "GetSubOrgIdsResponse": { + "type": "object", + "properties": { + "organizationIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of unique identifiers for the matching sub-organizations." + } + }, + "required": ["organizationIds"] + }, + "GetSwapStatusRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "swapRequestId": { + "type": "string", + "description": "The swap_request_id returned by ExecuteSwap." + } + }, + "required": ["organizationId", "swapRequestId"] + }, + "GetSwapStatusResponse": { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "Normalized swap status. One of PENDING, COMPLETED, FAILED." + }, + "swapKind": { + "type": "string", + "description": "SAME_CHAIN or CROSS_CHAIN." + }, + "provider": { + "type": "string", + "description": "Swap provider that executed the swap." + }, + "inputToken": { + "type": "string", + "description": "CAIP-19 asset ID for the input asset." + }, + "outputToken": { + "type": "string", + "description": "CAIP-19 asset ID for the output asset." + }, + "inputAmount": { + "type": "string", + "description": "Base-unit amount of the input asset." + }, + "originTxHash": { + "type": "string", + "x-nullable": true, + "description": "Final included origin-chain transaction hash, when known." + }, + "destinationTxHashes": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Provider-reported destination-chain transaction hashes; cross-chain COMPLETED only." + }, + "outputAmount": { + "type": "string", + "x-nullable": true, + "description": "Actual base-unit output amount on COMPLETED, when known. Unset on FAILED." + }, + "refund": { + "$ref": "#/definitions/SwapRefund", + "x-nullable": true, + "description": "Asset and amount returned to the user after a failed swap, when recoverable. Present only on FAILED." + }, + "updatedAt": { + "type": "string", + "description": "Timestamp of the last swap status change, as millisecond epoch string." + }, + "error": { + "$ref": "#/definitions/SwapError", + "x-nullable": true, + "description": "Normalized failure details, present whenever status is FAILED." + } + }, + "required": [ + "status", + "swapKind", + "provider", + "inputToken", + "outputToken", + "inputAmount", + "updatedAt" + ] + }, + "GetTvcAppDeploymentsRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "appId": { + "type": "string", + "description": "Unique identifier for a given TVC App." + } + }, + "required": ["organizationId", "appId"] + }, + "GetTvcAppDeploymentsResponse": { + "type": "object", + "properties": { + "tvcDeployments": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/TvcDeployment" + }, + "description": "List of deployments for this TVC App" + } + }, + "required": ["tvcDeployments"] + }, + "GetTvcAppRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "tvcAppId": { + "type": "string", + "description": "Unique identifier for a given TVC App." + } + }, + "required": ["organizationId", "tvcAppId"] + }, + "GetTvcAppResponse": { + "type": "object", + "properties": { + "tvcApp": { + "$ref": "#/definitions/TvcApp", + "description": "Details about a single TVC App" + } + }, + "required": ["tvcApp"] + }, + "GetTvcAppsRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + } + }, + "required": ["organizationId"] + }, + "GetTvcAppsResponse": { + "type": "object", + "properties": { + "tvcApps": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/TvcApp" + }, + "description": "A list of TVC Apps." + } + }, + "required": ["tvcApps"] + }, + "GetTvcDeploymentDebugLogsRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "deploymentId": { + "type": "string", + "description": "Unique identifier for a given TVC Deployment. The deployment must be running in debug mode." + }, + "tailLines": { + "type": "integer", + "format": "int32", + "description": "Limit returned history to the last N lines per replica. If unset or zero, no tail-line limit is applied." + }, + "sinceSeconds": { + "type": "string", + "format": "int64", + "description": "Return logs newer than this many seconds ago. If unset or zero, no since-time limit is applied. Useful for clients that poll to follow logs." + } + }, + "required": ["organizationId", "deploymentId"] + }, + "GetTvcDeploymentDebugLogsResponse": { + "type": "object", + "properties": { + "entries": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/TvcDeploymentDebugLogEntry" + }, + "description": "Application log entries sorted by platform timestamp." + } + }, + "required": ["entries"] + }, + "GetTvcDeploymentRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "deploymentId": { + "type": "string", + "description": "Unique identifier for a given TVC Deployment." + } + }, + "required": ["organizationId", "deploymentId"] + }, + "GetTvcDeploymentResponse": { + "type": "object", + "properties": { + "tvcDeployment": { + "$ref": "#/definitions/TvcDeployment", + "description": "Details about a single TVC Deployment" + } + }, + "required": ["tvcDeployment"] + }, + "GetTvcQosVersionsRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + } + }, + "required": ["organizationId"] + }, + "GetTvcQosVersionsResponse": { + "type": "object", + "properties": { + "availableVersions": { + "type": "array", + "items": { + "type": "string" + }, + "description": "QOS versions supported for new TVC deployments." + }, + "latestVersion": { + "type": "string", + "description": "Latest recommended QOS version for new TVC deployments." + } + }, + "required": ["availableVersions", "latestVersion"] + }, + "GetUserRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "userId": { + "type": "string", + "description": "Unique identifier for a given user." + } + }, + "required": ["organizationId", "userId"] + }, + "GetUserResponse": { + "type": "object", + "properties": { + "user": { + "$ref": "#/definitions/User", + "description": "Web and/or API user within your organization." + } + }, + "required": ["user"] + }, + "GetUsersRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + } + }, + "required": ["organizationId"] + }, + "GetUsersResponse": { + "type": "object", + "properties": { + "users": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/User" + }, + "description": "A list of users." + } + }, + "required": ["users"] + }, + "GetVerifiedSubOrgIdsRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for the parent organization. This is used to find sub-organizations within it." + }, + "filterType": { + "type": "string", + "description": "Specifies the type of filter to apply, i.e 'EMAIL', 'PHONE_NUMBER'." + }, + "filterValue": { + "type": "string", + "description": "The value of the filter to apply for the specified type. For example, a specific email or phone number string." + }, + "paginationOptions": { + "$ref": "#/definitions/Pagination", + "description": "Parameters used for cursor-based pagination." + } + }, + "required": ["organizationId"] + }, + "GetVerifiedSubOrgIdsResponse": { + "type": "object", + "properties": { + "organizationIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of unique identifiers for the matching sub-organizations." + } + }, + "required": ["organizationIds"] + }, + "GetWalletAccountRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "walletId": { + "type": "string", + "description": "Unique identifier for a given wallet." + }, + "address": { + "type": "string", + "x-nullable": true, + "description": "Address corresponding to a wallet account." + }, + "path": { + "type": "string", + "x-nullable": true, + "description": "Path corresponding to a wallet account." + } + }, + "required": ["organizationId", "walletId"] + }, + "GetWalletAccountResponse": { + "type": "object", + "properties": { + "account": { + "$ref": "#/definitions/WalletAccount", + "description": "The resulting wallet account." + } + }, + "required": ["account"] + }, + "GetWalletAccountsRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "walletId": { + "type": "string", + "x-nullable": true, + "description": "Unique identifier for a given wallet. If not provided, all accounts for the organization will be returned." + }, + "includeWalletDetails": { + "type": "boolean", + "x-nullable": true, + "description": "Optional flag to specify if the wallet details should be included in the response. Default = false." + }, + "paginationOptions": { + "$ref": "#/definitions/Pagination", + "description": "Parameters used for cursor-based pagination." + } + }, + "required": ["organizationId"] + }, + "GetWalletAccountsResponse": { + "type": "object", + "properties": { + "accounts": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/WalletAccount" + }, + "description": "A list of accounts generated from a wallet that share a common seed." + } + }, + "required": ["accounts"] + }, + "GetWalletAddressBalancesRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "address": { + "type": "string", + "description": "Address corresponding to a wallet account. Private key addresses are not supported." + }, + "caip2": { + "type": "string", + "enum": [ + "eip155:1", + "eip155:11155111", + "eip155:8453", + "eip155:84532", + "eip155:137", + "eip155:80002", + "eip155:56", + "eip155:97", + "eip155:10", + "eip155:11155420", + "eip155:143", + "eip155:10143", + "eip155:42161", + "eip155:4217", + "eip155:42431", + "eip155:421614", + "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", + "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1" + ], + "description": "CAIP-2 chain ID (e.g., 'eip155:1' for Ethereum mainnet or 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' for Solana mainnet). Human-readable Solana aliases ('solana:mainnet', 'solana:devnet') are also accepted and normalized to canonical CAIP-2 values." + } + }, + "required": ["organizationId", "address", "caip2"] + }, + "GetWalletAddressBalancesResponse": { + "type": "object", + "properties": { + "balances": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/AssetBalance" + }, + "description": "List of asset balances" + } + } + }, + "GetWalletRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "walletId": { + "type": "string", + "description": "Unique identifier for a given wallet." + } + }, + "required": ["organizationId", "walletId"] + }, + "GetWalletResponse": { + "type": "object", + "properties": { + "wallet": { + "$ref": "#/definitions/Wallet", + "description": "A collection of deterministically generated cryptographic public / private key pairs that share a common seed." + } + }, + "required": ["wallet"] + }, + "GetWalletsRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + } + }, + "required": ["organizationId"] + }, + "GetWalletsResponse": { + "type": "object", + "properties": { + "wallets": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/Wallet" + }, + "description": "A list of wallets." + } + }, + "required": ["wallets"] + }, + "GetWhoamiRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization. If the request is being made by a WebAuthN user and their sub-organization ID is unknown, this can be the parent organization ID; using the sub-organization ID when possible is preferred due to performance reasons." + } + }, + "required": ["organizationId"] + }, + "GetWhoamiResponse": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "organizationName": { + "type": "string", + "description": "Human-readable name for an organization." + }, + "userId": { + "type": "string", + "description": "Unique identifier for a given user." + }, + "username": { + "type": "string", + "description": "Human-readable name for a user." + } + }, + "required": ["organizationId", "organizationName", "userId", "username"] + }, + "HashFunction": { + "type": "string", + "enum": [ + "HASH_FUNCTION_NO_OP", + "HASH_FUNCTION_SHA256", + "HASH_FUNCTION_KECCAK256", + "HASH_FUNCTION_NOT_APPLICABLE" + ] + }, + "ImportPrivateKeyIntent": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "The ID of the User importing a Private Key." + }, + "privateKeyName": { + "type": "string", + "description": "Human-readable name for a Private Key." + }, + "encryptedBundle": { + "type": "string", + "description": "Bundle containing a raw private key encrypted to the enclave's target public key." + }, + "curve": { + "$ref": "#/definitions/Curve", + "description": "Cryptographic Curve used to generate a given Private Key." + }, + "addressFormats": { + "type": "array", + "items": { + "$ref": "#/definitions/AddressFormat" + }, + "description": "Cryptocurrency-specific formats for a derived address (e.g., Ethereum)." + } + }, + "required": [ + "userId", + "privateKeyName", + "encryptedBundle", + "curve", + "addressFormats" + ] + }, + "ImportPrivateKeyRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_IMPORT_PRIVATE_KEY"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/ImportPrivateKeyIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "ImportPrivateKeyResult": { + "type": "object", + "properties": { + "privateKeyId": { + "type": "string", + "description": "Unique identifier for a Private Key." + }, + "addresses": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/activity.v1.Address" + }, + "description": "A list of addresses." + } + }, + "required": ["privateKeyId", "addresses"] + }, + "ImportSecretParams": { + "type": "object", + "properties": { + "name": { + "type": "string", + "x-nullable": true, + "description": "Optional human-readable name for the secret. Names must be unique within an organization when provided." + }, + "secretPayload": { + "type": "string", + "description": "Encryption suite specific payload containing the secret ciphertext. For enclave encrypt v1 this is a JSON-encoded ClientSendMsg." + }, + "targetPublicKey": { + "type": "string", + "description": "Targeted transport encryption public key, as returned by InitImportSecrets." + }, + "encryptionSuite": { + "$ref": "#/definitions/TransportEncryptionSuite", + "description": "Transport encryption suite used for the ingress secret." + }, + "staticProperties": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/KeyValue" + }, + "description": "Policy-visible, static properties to permanently bind to the secret." + } + }, + "required": ["secretPayload", "targetPublicKey", "encryptionSuite"] + }, + "ImportSecretsIntent": { + "type": "object", + "properties": { + "secrets": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/ImportSecretParams" + }, + "description": "A list of secrets to import." + } + }, + "required": ["secrets"] + }, + "ImportSecretsRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_IMPORT_SECRETS"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/ImportSecretsIntent" + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "ImportSecretsResult": { + "type": "object", + "properties": { + "secretIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Unique identifier for each imported secret, in the order the params were specified." + } + }, + "required": ["secretIds"] + }, + "ImportWalletIntent": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "The ID of the User importing a Wallet." + }, + "walletName": { + "type": "string", + "description": "Human-readable name for a Wallet." + }, + "encryptedBundle": { + "type": "string", + "description": "Bundle containing a wallet mnemonic encrypted to the enclave's target public key." + }, + "accounts": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/WalletAccountParams" + }, + "description": "A list of wallet Accounts." + } + }, + "required": ["userId", "walletName", "encryptedBundle", "accounts"] + }, + "ImportWalletRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_IMPORT_WALLET"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/ImportWalletIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "ImportWalletResult": { + "type": "object", + "properties": { + "walletId": { + "type": "string", + "description": "Unique identifier for a Wallet." + }, + "addresses": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of account addresses." + } + }, + "required": ["walletId", "addresses"] + }, + "InitFiatOnRampIntent": { + "type": "object", + "properties": { + "onrampProvider": { + "$ref": "#/definitions/FiatOnRampProvider", + "description": "Enum to specify which on-ramp provider to use" + }, + "walletAddress": { + "type": "string", + "description": "Destination wallet address for the buy transaction." + }, + "network": { + "$ref": "#/definitions/FiatOnRampBlockchainNetwork", + "description": "Blockchain network to be used for the transaction, e.g., bitcoin, ethereum. Maps to MoonPay's network or Coinbase's defaultNetwork." + }, + "cryptoCurrencyCode": { + "$ref": "#/definitions/FiatOnRampCryptoCurrency", + "description": "Code for the cryptocurrency to be purchased, e.g., btc, eth. Maps to MoonPay's currencyCode or Coinbase's defaultAsset." + }, + "fiatCurrencyCode": { + "$ref": "#/definitions/FiatOnRampCurrency", + "x-nullable": true, + "description": "Code for the fiat currency to be used in the transaction, e.g., USD, EUR." + }, + "fiatCurrencyAmount": { + "type": "string", + "x-nullable": true, + "description": "Specifies a preset fiat amount for the transaction, e.g., '100'. Must be greater than '20'. If not provided, the user will be prompted to enter an amount." + }, + "paymentMethod": { + "$ref": "#/definitions/FiatOnRampPaymentMethod", + "x-nullable": true, + "description": "Pre-selected payment method, e.g., CREDIT_DEBIT_CARD, APPLE_PAY. Validated against the chosen provider." + }, + "countryCode": { + "type": "string", + "x-nullable": true, + "description": "ISO 3166-1 two-digit country code for Coinbase representing the purchasing user’s country of residence, e.g., US, GB." + }, + "countrySubdivisionCode": { + "type": "string", + "x-nullable": true, + "description": "ISO 3166-2 two-digit country subdivision code for Coinbase representing the purchasing user’s subdivision of residence within their country, e.g. NY. Required if country_code=US." + }, + "sandboxMode": { + "type": "boolean", + "x-nullable": true, + "description": "Optional flag to indicate whether to use the sandbox mode to simulate transactions for the on-ramp provider. Default is false." + }, + "urlForSignature": { + "type": "string", + "x-nullable": true, + "description": "Optional MoonPay Widget URL to sign when using MoonPay client SDKs with URL Signing enabled." + } + }, + "required": [ + "onrampProvider", + "walletAddress", + "network", + "cryptoCurrencyCode" + ] + }, + "InitFiatOnRampRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_INIT_FIAT_ON_RAMP"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/InitFiatOnRampIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "InitFiatOnRampResult": { + "type": "object", + "properties": { + "onRampUrl": { + "type": "string", + "description": "Unique URL for a given fiat on-ramp flow." + }, + "onRampTransactionId": { + "type": "string", + "description": "Unique identifier used to retrieve transaction statuses for a given fiat on-ramp flow." + }, + "onRampUrlSignature": { + "type": "string", + "description": "Optional signature of the MoonPay Widget URL. The signature is generated if the Init Fiat On Ramp intent includes the urlForSignature field. The signature can be used to initialize the MoonPay SDKs when URL signing is enabled for your project." + } + }, + "required": ["onRampUrl", "onRampTransactionId"] + }, + "InitImportPrivateKeyIntent": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "The ID of the User importing a Private Key." + } + }, + "required": ["userId"] + }, + "InitImportPrivateKeyRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_INIT_IMPORT_PRIVATE_KEY"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/InitImportPrivateKeyIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "InitImportPrivateKeyResult": { + "type": "object", + "properties": { + "importBundle": { + "type": "string", + "description": "Import bundle containing a public key and signature to use for importing client data." + } + }, + "required": ["importBundle"] + }, + "InitImportSecretsIntent": { + "type": "object", + "properties": { + "encryptionSuite": { + "$ref": "#/definitions/TransportEncryptionSuite", + "description": "Transport encryption suite used for ingress secrets." + }, + "numSecrets": { + "type": "integer", + "format": "int32", + "description": "The number of secrets the user intends to import." + } + }, + "required": ["encryptionSuite", "numSecrets"] + }, + "InitImportSecretsResult": { + "type": "object", + "properties": { + "enclaveTargetMessages": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Enclave ingress target keys along with metadata specific to the encryption suite. For enclave encrypt v1 this will be ServerTargetMsgV1." + } + }, + "required": ["enclaveTargetMessages"] + }, + "InitImportWalletIntent": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "The ID of the User importing a Wallet." + } + }, + "required": ["userId"] + }, + "InitImportWalletRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_INIT_IMPORT_WALLET"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/InitImportWalletIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "InitImportWalletResult": { + "type": "object", + "properties": { + "importBundle": { + "type": "string", + "description": "Import bundle containing a public key and signature to use for importing client data." + } + }, + "required": ["importBundle"] + }, + "InitOtpAuthIntent": { + "type": "object", + "properties": { + "otpType": { + "type": "string", + "description": "Enum to specify whether to send OTP via SMS or email" + }, + "contact": { + "type": "string", + "description": "Email or phone number to send the OTP code to" + }, + "emailCustomization": { + "$ref": "#/definitions/EmailCustomizationParams", + "x-nullable": true, + "description": "Optional parameters for customizing emails. If not provided, the default email will be used." + }, + "smsCustomization": { + "$ref": "#/definitions/SmsCustomizationParams", + "x-nullable": true, + "description": "Optional parameters for customizing SMS message. If not provided, the default sms message will be used." + }, + "userIdentifier": { + "type": "string", + "x-nullable": true, + "description": "Optional client-generated user identifier to enable per-user rate limiting for SMS auth. We recommend using a hash of the client-side IP address." + }, + "sendFromEmailAddress": { + "type": "string", + "x-nullable": true, + "description": "Optional custom email address from which to send the OTP email" + }, + "sendFromEmailSenderName": { + "type": "string", + "x-nullable": true, + "description": "Optional custom sender name for use with sendFromEmailAddress; if left empty, will default to 'Notifications'" + }, + "replyToEmailAddress": { + "type": "string", + "x-nullable": true, + "description": "Optional custom email address to use as reply-to" + } + }, + "required": ["otpType", "contact"] + }, + "InitOtpAuthIntentV2": { + "type": "object", + "properties": { + "otpType": { + "type": "string", + "description": "Enum to specify whether to send OTP via SMS or email" + }, + "contact": { + "type": "string", + "description": "Email or phone number to send the OTP code to" + }, + "otpLength": { + "type": "integer", + "format": "int32", + "x-nullable": true, + "description": "Optional length of the OTP code. Default = 9" + }, + "emailCustomization": { + "$ref": "#/definitions/EmailCustomizationParams", + "x-nullable": true, + "description": "Optional parameters for customizing emails. If not provided, the default email will be used." + }, + "smsCustomization": { + "$ref": "#/definitions/SmsCustomizationParams", + "x-nullable": true, + "description": "Optional parameters for customizing SMS message. If not provided, the default SMS message will be used." + }, + "userIdentifier": { + "type": "string", + "x-nullable": true, + "description": "Optional client-generated user identifier to enable per-user rate limiting for SMS auth. We recommend using a hash of the client-side IP address." + }, + "sendFromEmailAddress": { + "type": "string", + "x-nullable": true, + "description": "Optional custom email address from which to send the OTP email" + }, + "alphanumeric": { + "type": "boolean", + "x-nullable": true, + "description": "Optional flag to specify if the OTP code should be alphanumeric (Crockford’s Base32). Default = true" + }, + "sendFromEmailSenderName": { + "type": "string", + "x-nullable": true, + "description": "Optional custom sender name for use with sendFromEmailAddress; if left empty, will default to 'Notifications'" + }, + "replyToEmailAddress": { + "type": "string", + "x-nullable": true, + "description": "Optional custom email address to use as reply-to" + } + }, + "required": ["otpType", "contact"] + }, + "InitOtpAuthIntentV3": { + "type": "object", + "properties": { + "otpType": { + "type": "string", + "description": "Whether to send OTP via SMS or email. Possible values: OTP_TYPE_SMS, OTP_TYPE_EMAIL" + }, + "contact": { + "type": "string", + "description": "Email or phone number to send the OTP code to" + }, + "otpLength": { + "type": "integer", + "format": "int32", + "x-nullable": true, + "description": "Optional length of the OTP code. Default = 9" + }, + "appName": { + "type": "string", + "description": "The name of the application. This field is required and will be used in email notifications if an email template is not provided." + }, + "emailCustomization": { + "$ref": "#/definitions/EmailCustomizationParamsV2", + "x-nullable": true, + "description": "Optional parameters for customizing emails. If not provided, the default email will be used." + }, + "smsCustomization": { + "$ref": "#/definitions/SmsCustomizationParams", + "x-nullable": true, + "description": "Optional parameters for customizing SMS message. If not provided, the default SMS message will be used." + }, + "userIdentifier": { + "type": "string", + "x-nullable": true, + "description": "Optional client-generated user identifier to enable per-user rate limiting for SMS auth. We recommend using a hash of the client-side IP address." + }, + "sendFromEmailAddress": { + "type": "string", + "x-nullable": true, + "description": "Optional custom email address from which to send the OTP email" + }, + "alphanumeric": { + "type": "boolean", + "x-nullable": true, + "description": "Optional flag to specify if the OTP code should be alphanumeric (Crockford’s Base32). Default = true" + }, + "sendFromEmailSenderName": { + "type": "string", + "x-nullable": true, + "description": "Optional custom sender name for use with sendFromEmailAddress; if left empty, will default to 'Notifications'" + }, + "expirationSeconds": { + "type": "string", + "x-nullable": true, + "description": "Expiration window (in seconds) indicating how long the OTP is valid for. If not provided, a default of 5 minutes will be used. Maximum value is 600 seconds (10 minutes)" + }, + "replyToEmailAddress": { + "type": "string", + "x-nullable": true, + "description": "Optional custom email address to use as reply-to" + } + }, + "required": ["otpType", "contact", "appName"] + }, + "InitOtpAuthRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_INIT_OTP_AUTH_V3"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/InitOtpAuthIntentV3" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "InitOtpAuthResult": { + "type": "object", + "properties": { + "otpId": { + "type": "string", + "description": "Unique identifier for an OTP authentication" + } + }, + "required": ["otpId"] + }, + "InitOtpAuthResultV2": { + "type": "object", + "properties": { + "otpId": { + "type": "string", + "description": "Unique identifier for an OTP authentication" + } + }, + "required": ["otpId"] + }, + "InitOtpIntent": { + "type": "object", + "properties": { + "otpType": { + "type": "string", + "description": "Whether to send OTP via SMS or email. Possible values: OTP_TYPE_SMS, OTP_TYPE_EMAIL" + }, + "contact": { + "type": "string", + "description": "Email or phone number to send the OTP code to" + }, + "otpLength": { + "type": "integer", + "format": "int32", + "x-nullable": true, + "description": "Optional length of the OTP code. Default = 9" + }, + "emailCustomization": { + "$ref": "#/definitions/EmailCustomizationParams", + "x-nullable": true, + "description": "Optional parameters for customizing emails. If not provided, the default email will be used." + }, + "smsCustomization": { + "$ref": "#/definitions/SmsCustomizationParams", + "x-nullable": true, + "description": "Optional parameters for customizing SMS message. If not provided, the default sms message will be used." + }, + "userIdentifier": { + "type": "string", + "x-nullable": true, + "description": "Optional client-generated user identifier to enable per-user rate limiting for SMS auth. We recommend using a hash of the client-side IP address." + }, + "sendFromEmailAddress": { + "type": "string", + "x-nullable": true, + "description": "Optional custom email address from which to send the OTP email" + }, + "alphanumeric": { + "type": "boolean", + "x-nullable": true, + "description": "Optional flag to specify if the OTP code should be alphanumeric (Crockford’s Base32). Default = true" + }, + "sendFromEmailSenderName": { + "type": "string", + "x-nullable": true, + "description": "Optional custom sender name for use with sendFromEmailAddress; if left empty, will default to 'Notifications'" + }, + "expirationSeconds": { + "type": "string", + "x-nullable": true, + "description": "Expiration window (in seconds) indicating how long the OTP is valid for. If not provided, a default of 5 minutes will be used. Maximum value is 600 seconds (10 minutes)" + }, + "replyToEmailAddress": { + "type": "string", + "x-nullable": true, + "description": "Optional custom email address to use as reply-to" + } + }, + "required": ["otpType", "contact"] + }, + "InitOtpIntentV2": { + "type": "object", + "properties": { + "otpType": { + "type": "string", + "description": "Whether to send OTP via SMS or email. Possible values: OTP_TYPE_SMS, OTP_TYPE_EMAIL" + }, + "contact": { + "type": "string", + "description": "Email or phone number to send the OTP code to" + }, + "otpLength": { + "type": "integer", + "format": "int32", + "x-nullable": true, + "description": "Optional length of the OTP code. Default = 9" + }, + "appName": { + "type": "string", + "description": "The name of the application. This field is required and will be used in email notifications if an email template is not provided." + }, + "emailCustomization": { + "$ref": "#/definitions/EmailCustomizationParamsV2", + "x-nullable": true, + "description": "Optional parameters for customizing emails. If not provided, the default email will be used." + }, + "smsCustomization": { + "$ref": "#/definitions/SmsCustomizationParams", + "x-nullable": true, + "description": "Optional parameters for customizing SMS message. If not provided, the default SMS message will be used." + }, + "userIdentifier": { + "type": "string", + "x-nullable": true, + "description": "Optional client-generated user identifier to enable per-user rate limiting for SMS auth. We recommend using a hash of the client-side IP address." + }, + "sendFromEmailAddress": { + "type": "string", + "x-nullable": true, + "description": "Optional custom email address from which to send the OTP email" + }, + "alphanumeric": { + "type": "boolean", + "x-nullable": true, + "description": "Optional flag to specify if the OTP code should be alphanumeric (Crockford’s Base32). Default = true" + }, + "sendFromEmailSenderName": { + "type": "string", + "x-nullable": true, + "description": "Optional custom sender name for use with sendFromEmailAddress; if left empty, will default to 'Notifications'" + }, + "expirationSeconds": { + "type": "string", + "x-nullable": true, + "description": "Expiration window (in seconds) indicating how long the OTP is valid for. If not provided, a default of 5 minutes will be used. Maximum value is 600 seconds (10 minutes)" + }, + "replyToEmailAddress": { + "type": "string", + "x-nullable": true, + "description": "Optional custom email address to use as reply-to" + } + }, + "required": ["otpType", "contact", "appName"] + }, + "InitOtpIntentV3": { + "type": "object", + "properties": { + "otpType": { + "type": "string", + "description": "Whether to send OTP via SMS or email. Possible values: OTP_TYPE_SMS, OTP_TYPE_EMAIL" + }, + "contact": { + "type": "string", + "description": "Email or phone number to send the OTP code to" + }, + "appName": { + "type": "string", + "description": "The name of the application." + }, + "otpLength": { + "type": "integer", + "format": "int32", + "x-nullable": true, + "description": "Optional length of the OTP code. Default = 9" + }, + "emailCustomization": { + "$ref": "#/definitions/EmailCustomizationParamsV2", + "x-nullable": true, + "description": "Optional parameters for customizing emails. If not provided, the default email will be used." + }, + "smsCustomization": { + "$ref": "#/definitions/SmsCustomizationParams", + "x-nullable": true, + "description": "Optional parameters for customizing SMS message. If not provided, the default sms message will be used." + }, + "userIdentifier": { + "type": "string", + "x-nullable": true, + "description": "Optional client-generated user identifier to enable per-user rate limiting for SMS auth. We recommend using a hash of the client-side IP address." + }, + "sendFromEmailAddress": { + "type": "string", + "x-nullable": true, + "description": "Optional custom email address from which to send the OTP email" + }, + "alphanumeric": { + "type": "boolean", + "x-nullable": true, + "description": "Optional flag to specify if the OTP code should be alphanumeric (Crockford’s Base32). If set to false, OTP code will only be numeric. Default = true" + }, + "sendFromEmailSenderName": { + "type": "string", + "x-nullable": true, + "description": "Optional custom sender name for use with sendFromEmailAddress; if left empty, will default to 'Notifications'" + }, + "expirationSeconds": { + "type": "string", + "x-nullable": true, + "description": "Expiration window (in seconds) indicating how long the OTP is valid for. If not provided, a default of 5 minutes will be used. Maximum value is 600 seconds (10 minutes)" + }, + "replyToEmailAddress": { + "type": "string", + "x-nullable": true, + "description": "Optional custom email address to use as reply-to" + } + }, + "required": ["otpType", "contact", "appName"] + }, + "InitOtpRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_INIT_OTP_V3"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/InitOtpIntentV3" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "InitOtpResult": { + "type": "object", + "properties": { + "otpId": { + "type": "string", + "description": "Unique identifier for an OTP authentication" + } + }, + "required": ["otpId"] + }, + "InitOtpResultV2": { + "type": "object", + "properties": { + "otpId": { + "type": "string", + "description": "Unique identifier for an OTP flow" + }, + "otpEncryptionTargetBundle": { + "type": "string", + "description": "Signed bundle containing a target encryption key to use when submitting OTP codes." + } + }, + "required": ["otpId", "otpEncryptionTargetBundle"] + }, + "InitUserEmailRecoveryIntent": { + "type": "object", + "properties": { + "email": { + "type": "string", + "description": "Email of the user starting recovery" + }, + "targetPublicKey": { + "type": "string", + "description": "Client-side public key generated by the user, to which the recovery bundle will be encrypted." + }, + "expirationSeconds": { + "type": "string", + "x-nullable": true, + "description": "Expiration window (in seconds) indicating how long the recovery credential is valid for. If not provided, a default of 15 minutes will be used." + }, + "emailCustomization": { + "$ref": "#/definitions/EmailCustomizationParams", + "x-nullable": true, + "description": "Optional parameters for customizing emails. If not provided, the default email will be used." + }, + "sendFromEmailAddress": { + "type": "string", + "x-nullable": true, + "description": "Optional custom email address from which to send the OTP email" + }, + "sendFromEmailSenderName": { + "type": "string", + "x-nullable": true, + "description": "Optional custom sender name for use with sendFromEmailAddress; if left empty, will default to 'Notifications'" + }, + "replyToEmailAddress": { + "type": "string", + "x-nullable": true, + "description": "Optional custom email address to use as reply-to" + } + }, + "required": ["email", "targetPublicKey"] + }, + "InitUserEmailRecoveryIntentV2": { + "type": "object", + "properties": { + "email": { + "type": "string", + "description": "Email of the user starting recovery" + }, + "targetPublicKey": { + "type": "string", + "description": "Client-side public key generated by the user, to which the recovery bundle will be encrypted." + }, + "expirationSeconds": { + "type": "string", + "x-nullable": true, + "description": "Expiration window (in seconds) indicating how long the recovery credential is valid for. If not provided, a default of 15 minutes will be used." + }, + "emailCustomization": { + "$ref": "#/definitions/EmailAuthCustomizationParams", + "description": "Parameters for customizing emails. If not provided, the default email will be used. Note that `app_name` is required." + }, + "sendFromEmailAddress": { + "type": "string", + "x-nullable": true, + "description": "Optional custom email address from which to send the OTP email" + }, + "sendFromEmailSenderName": { + "type": "string", + "x-nullable": true, + "description": "Optional custom sender name for use with sendFromEmailAddress; if left empty, will default to 'Notifications'" + }, + "replyToEmailAddress": { + "type": "string", + "x-nullable": true, + "description": "Optional custom email address to use as reply-to" + } + }, + "required": ["email", "targetPublicKey", "emailCustomization"] + }, + "InitUserEmailRecoveryRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_INIT_USER_EMAIL_RECOVERY_V2"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/InitUserEmailRecoveryIntentV2" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "InitUserEmailRecoveryResult": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "Unique identifier for the user being recovered." + } + }, + "required": ["userId"] + }, + "Intent": { + "type": "object", + "properties": { + "createOrganizationIntent": { + "$ref": "#/definitions/CreateOrganizationIntent" + }, + "createAuthenticatorsIntent": { + "$ref": "#/definitions/CreateAuthenticatorsIntent" + }, + "createUsersIntent": { + "$ref": "#/definitions/CreateUsersIntent" + }, + "createPrivateKeysIntent": { + "$ref": "#/definitions/CreatePrivateKeysIntent" + }, + "signRawPayloadIntent": { + "$ref": "#/definitions/SignRawPayloadIntent" + }, + "createInvitationsIntent": { + "$ref": "#/definitions/CreateInvitationsIntent" + }, + "acceptInvitationIntent": { + "$ref": "#/definitions/AcceptInvitationIntent" + }, + "createPolicyIntent": { + "$ref": "#/definitions/CreatePolicyIntent" + }, + "disablePrivateKeyIntent": { + "$ref": "#/definitions/DisablePrivateKeyIntent" + }, + "deleteUsersIntent": { + "$ref": "#/definitions/DeleteUsersIntent" + }, + "deleteAuthenticatorsIntent": { + "$ref": "#/definitions/DeleteAuthenticatorsIntent" + }, + "deleteInvitationIntent": { + "$ref": "#/definitions/DeleteInvitationIntent" + }, + "deleteOrganizationIntent": { + "$ref": "#/definitions/DeleteOrganizationIntent" + }, + "deletePolicyIntent": { + "$ref": "#/definitions/DeletePolicyIntent" + }, + "createUserTagIntent": { + "$ref": "#/definitions/CreateUserTagIntent" + }, + "deleteUserTagsIntent": { + "$ref": "#/definitions/DeleteUserTagsIntent" + }, + "signTransactionIntent": { + "$ref": "#/definitions/SignTransactionIntent" + }, + "createApiKeysIntent": { + "$ref": "#/definitions/CreateApiKeysIntent" + }, + "deleteApiKeysIntent": { + "$ref": "#/definitions/DeleteApiKeysIntent" + }, + "approveActivityIntent": { + "$ref": "#/definitions/ApproveActivityIntent" + }, + "rejectActivityIntent": { + "$ref": "#/definitions/RejectActivityIntent" + }, + "createPrivateKeyTagIntent": { + "$ref": "#/definitions/CreatePrivateKeyTagIntent" + }, + "deletePrivateKeyTagsIntent": { + "$ref": "#/definitions/DeletePrivateKeyTagsIntent" + }, + "createPolicyIntentV2": { + "$ref": "#/definitions/CreatePolicyIntentV2" + }, + "setPaymentMethodIntent": { + "$ref": "#/definitions/SetPaymentMethodIntent" + }, + "activateBillingTierIntent": { + "$ref": "#/definitions/ActivateBillingTierIntent" + }, + "deletePaymentMethodIntent": { + "$ref": "#/definitions/DeletePaymentMethodIntent" + }, + "createPolicyIntentV3": { + "$ref": "#/definitions/CreatePolicyIntentV3" + }, + "createApiOnlyUsersIntent": { + "$ref": "#/definitions/CreateApiOnlyUsersIntent" + }, + "updateRootQuorumIntent": { + "$ref": "#/definitions/UpdateRootQuorumIntent" + }, + "updateUserTagIntent": { + "$ref": "#/definitions/UpdateUserTagIntent" + }, + "updatePrivateKeyTagIntent": { + "$ref": "#/definitions/UpdatePrivateKeyTagIntent" + }, + "createAuthenticatorsIntentV2": { + "$ref": "#/definitions/CreateAuthenticatorsIntentV2" + }, + "acceptInvitationIntentV2": { + "$ref": "#/definitions/AcceptInvitationIntentV2" + }, + "createOrganizationIntentV2": { + "$ref": "#/definitions/CreateOrganizationIntentV2" + }, + "createUsersIntentV2": { + "$ref": "#/definitions/CreateUsersIntentV2" + }, + "createSubOrganizationIntent": { + "$ref": "#/definitions/CreateSubOrganizationIntent" + }, + "createSubOrganizationIntentV2": { + "$ref": "#/definitions/CreateSubOrganizationIntentV2" + }, + "updateAllowedOriginsIntent": { + "$ref": "#/definitions/UpdateAllowedOriginsIntent" + }, + "createPrivateKeysIntentV2": { + "$ref": "#/definitions/CreatePrivateKeysIntentV2" + }, + "updateUserIntent": { + "$ref": "#/definitions/UpdateUserIntent" + }, + "updatePolicyIntent": { + "$ref": "#/definitions/UpdatePolicyIntent" + }, + "setPaymentMethodIntentV2": { + "$ref": "#/definitions/SetPaymentMethodIntentV2" + }, + "createSubOrganizationIntentV3": { + "$ref": "#/definitions/CreateSubOrganizationIntentV3" + }, + "createWalletIntent": { + "$ref": "#/definitions/CreateWalletIntent" + }, + "createWalletAccountsIntent": { + "$ref": "#/definitions/CreateWalletAccountsIntent" + }, + "initUserEmailRecoveryIntent": { + "$ref": "#/definitions/InitUserEmailRecoveryIntent" + }, + "recoverUserIntent": { + "$ref": "#/definitions/RecoverUserIntent" + }, + "setOrganizationFeatureIntent": { + "$ref": "#/definitions/SetOrganizationFeatureIntent" + }, + "removeOrganizationFeatureIntent": { + "$ref": "#/definitions/RemoveOrganizationFeatureIntent" + }, + "signRawPayloadIntentV2": { + "$ref": "#/definitions/SignRawPayloadIntentV2" + }, + "signTransactionIntentV2": { + "$ref": "#/definitions/SignTransactionIntentV2" + }, + "exportPrivateKeyIntent": { + "$ref": "#/definitions/ExportPrivateKeyIntent" + }, + "exportWalletIntent": { + "$ref": "#/definitions/ExportWalletIntent" + }, + "createSubOrganizationIntentV4": { + "$ref": "#/definitions/CreateSubOrganizationIntentV4" + }, + "emailAuthIntent": { + "$ref": "#/definitions/EmailAuthIntent" + }, + "exportWalletAccountIntent": { + "$ref": "#/definitions/ExportWalletAccountIntent" + }, + "initImportWalletIntent": { + "$ref": "#/definitions/InitImportWalletIntent" + }, + "importWalletIntent": { + "$ref": "#/definitions/ImportWalletIntent" + }, + "initImportPrivateKeyIntent": { + "$ref": "#/definitions/InitImportPrivateKeyIntent" + }, + "importPrivateKeyIntent": { + "$ref": "#/definitions/ImportPrivateKeyIntent" + }, + "createPoliciesIntent": { + "$ref": "#/definitions/CreatePoliciesIntent" + }, + "signRawPayloadsIntent": { + "$ref": "#/definitions/SignRawPayloadsIntent" + }, + "createReadOnlySessionIntent": { + "$ref": "#/definitions/CreateReadOnlySessionIntent" + }, + "createOauthProvidersIntent": { + "$ref": "#/definitions/CreateOauthProvidersIntent" + }, + "deleteOauthProvidersIntent": { + "$ref": "#/definitions/DeleteOauthProvidersIntent" + }, + "createSubOrganizationIntentV5": { + "$ref": "#/definitions/CreateSubOrganizationIntentV5" + }, + "oauthIntent": { + "$ref": "#/definitions/OauthIntent" + }, + "createApiKeysIntentV2": { + "$ref": "#/definitions/CreateApiKeysIntentV2" + }, + "createReadWriteSessionIntent": { + "$ref": "#/definitions/CreateReadWriteSessionIntent" + }, + "emailAuthIntentV2": { + "$ref": "#/definitions/EmailAuthIntentV2" + }, + "createSubOrganizationIntentV6": { + "$ref": "#/definitions/CreateSubOrganizationIntentV6" + }, + "deletePrivateKeysIntent": { + "$ref": "#/definitions/DeletePrivateKeysIntent" + }, + "deleteWalletsIntent": { + "$ref": "#/definitions/DeleteWalletsIntent" + }, + "createReadWriteSessionIntentV2": { + "$ref": "#/definitions/CreateReadWriteSessionIntentV2" + }, + "deleteSubOrganizationIntent": { + "$ref": "#/definitions/DeleteSubOrganizationIntent" + }, + "initOtpAuthIntent": { + "$ref": "#/definitions/InitOtpAuthIntent" + }, + "otpAuthIntent": { + "$ref": "#/definitions/OtpAuthIntent" + }, + "createSubOrganizationIntentV7": { + "$ref": "#/definitions/CreateSubOrganizationIntentV7" + }, + "updateWalletIntent": { + "$ref": "#/definitions/UpdateWalletIntent" + }, + "updatePolicyIntentV2": { + "$ref": "#/definitions/UpdatePolicyIntentV2" + }, + "createUsersIntentV3": { + "$ref": "#/definitions/CreateUsersIntentV3" + }, + "initOtpAuthIntentV2": { + "$ref": "#/definitions/InitOtpAuthIntentV2" + }, + "initOtpIntent": { + "$ref": "#/definitions/InitOtpIntent" + }, + "verifyOtpIntent": { + "$ref": "#/definitions/VerifyOtpIntent" + }, + "otpLoginIntent": { + "$ref": "#/definitions/OtpLoginIntent" + }, + "stampLoginIntent": { + "$ref": "#/definitions/StampLoginIntent" + }, + "oauthLoginIntent": { + "$ref": "#/definitions/OauthLoginIntent" + }, + "updateUserNameIntent": { + "$ref": "#/definitions/UpdateUserNameIntent" + }, + "updateUserEmailIntent": { + "$ref": "#/definitions/UpdateUserEmailIntent" + }, + "updateUserPhoneNumberIntent": { + "$ref": "#/definitions/UpdateUserPhoneNumberIntent" + }, + "initFiatOnRampIntent": { + "$ref": "#/definitions/InitFiatOnRampIntent" + }, + "createSmartContractInterfaceIntent": { + "$ref": "#/definitions/CreateSmartContractInterfaceIntent" + }, + "deleteSmartContractInterfaceIntent": { + "$ref": "#/definitions/DeleteSmartContractInterfaceIntent" + }, + "enableAuthProxyIntent": { + "$ref": "#/definitions/EnableAuthProxyIntent" + }, + "disableAuthProxyIntent": { + "$ref": "#/definitions/DisableAuthProxyIntent" + }, + "updateAuthProxyConfigIntent": { + "$ref": "#/definitions/UpdateAuthProxyConfigIntent" + }, + "createOauth2CredentialIntent": { + "$ref": "#/definitions/CreateOauth2CredentialIntent" + }, + "updateOauth2CredentialIntent": { + "$ref": "#/definitions/UpdateOauth2CredentialIntent" + }, + "deleteOauth2CredentialIntent": { + "$ref": "#/definitions/DeleteOauth2CredentialIntent" + }, + "oauth2AuthenticateIntent": { + "$ref": "#/definitions/Oauth2AuthenticateIntent" + }, + "deleteWalletAccountsIntent": { + "$ref": "#/definitions/DeleteWalletAccountsIntent" + }, + "deletePoliciesIntent": { + "$ref": "#/definitions/DeletePoliciesIntent" + }, + "ethSendRawTransactionIntent": { + "$ref": "#/definitions/EthSendRawTransactionIntent" + }, + "ethSendTransactionIntent": { + "$ref": "#/definitions/EthSendTransactionIntent" + }, + "createFiatOnRampCredentialIntent": { + "$ref": "#/definitions/CreateFiatOnRampCredentialIntent" + }, + "updateFiatOnRampCredentialIntent": { + "$ref": "#/definitions/UpdateFiatOnRampCredentialIntent" + }, + "deleteFiatOnRampCredentialIntent": { + "$ref": "#/definitions/DeleteFiatOnRampCredentialIntent" + }, + "emailAuthIntentV3": { + "$ref": "#/definitions/EmailAuthIntentV3" + }, + "initUserEmailRecoveryIntentV2": { + "$ref": "#/definitions/InitUserEmailRecoveryIntentV2" + }, + "initOtpIntentV2": { + "$ref": "#/definitions/InitOtpIntentV2" + }, + "initOtpAuthIntentV3": { + "$ref": "#/definitions/InitOtpAuthIntentV3" + }, + "upsertGasUsageConfigIntent": { + "$ref": "#/definitions/UpsertGasUsageConfigIntent" + }, + "createTvcAppIntent": { + "$ref": "#/definitions/CreateTvcAppIntent" + }, + "createTvcDeploymentIntent": { + "$ref": "#/definitions/CreateTvcDeploymentIntent" + }, + "createTvcManifestApprovalsIntent": { + "$ref": "#/definitions/CreateTvcManifestApprovalsIntent" + }, + "solSendTransactionIntent": { + "$ref": "#/definitions/SolSendTransactionIntent" + }, + "initOtpIntentV3": { + "$ref": "#/definitions/InitOtpIntentV3" + }, + "verifyOtpIntentV2": { + "$ref": "#/definitions/VerifyOtpIntentV2" + }, + "otpLoginIntentV2": { + "$ref": "#/definitions/OtpLoginIntentV2" + }, + "updateOrganizationNameIntent": { + "$ref": "#/definitions/UpdateOrganizationNameIntent" + }, + "createSubOrganizationIntentV8": { + "$ref": "#/definitions/CreateSubOrganizationIntentV8" + }, + "createOauthProvidersIntentV2": { + "$ref": "#/definitions/CreateOauthProvidersIntentV2" + }, + "createUsersIntentV4": { + "$ref": "#/definitions/CreateUsersIntentV4" + }, + "createWebhookEndpointIntent": { + "$ref": "#/definitions/CreateWebhookEndpointIntent" + }, + "updateWebhookEndpointIntent": { + "$ref": "#/definitions/UpdateWebhookEndpointIntent" + }, + "deleteWebhookEndpointIntent": { + "$ref": "#/definitions/DeleteWebhookEndpointIntent" + }, + "setIpAllowlistIntent": { + "$ref": "#/definitions/SetIpAllowlistIntent" + }, + "removeIpAllowlistIntent": { + "$ref": "#/definitions/RemoveIpAllowlistIntent" + }, + "updateTvcAppLiveDeploymentIntent": { + "$ref": "#/definitions/UpdateTvcAppLiveDeploymentIntent" + }, + "deleteTvcDeploymentIntent": { + "$ref": "#/definitions/DeleteTvcDeploymentIntent" + }, + "deleteTvcAppAndDeploymentsIntent": { + "$ref": "#/definitions/DeleteTvcAppAndDeploymentsIntent" + }, + "restoreTvcDeploymentIntent": { + "$ref": "#/definitions/RestoreTvcDeploymentIntent" + }, + "sparkSignFrostIntent": { + "$ref": "#/definitions/SparkSignFrostIntent" + }, + "sparkPrepareTransferIntent": { + "$ref": "#/definitions/SparkPrepareTransferIntent" + }, + "sparkClaimTransferIntent": { + "$ref": "#/definitions/SparkClaimTransferIntent" + }, + "sparkPrepareLightningReceiveIntent": { + "$ref": "#/definitions/SparkPrepareLightningReceiveIntent" + }, + "postTvcQuorumKeyShareIntent": { + "$ref": "#/definitions/PostTvcQuorumKeyShareIntent" + }, + "ethSendTransactionIntentV2": { + "$ref": "#/definitions/EthSendTransactionIntentV2" + }, + "createMfaPolicyIntent": { + "$ref": "#/definitions/CreateMfaPolicyIntent" + }, + "updateMfaPolicyIntent": { + "$ref": "#/definitions/UpdateMfaPolicyIntent" + }, + "deleteMfaPolicyIntent": { + "$ref": "#/definitions/DeleteMfaPolicyIntent" + }, + "createSessionProfileIntent": { + "$ref": "#/definitions/CreateSessionProfileIntent" + }, + "earnDeployWrapperIntent": { + "$ref": "#/definitions/EarnDeployWrapperIntent" + }, + "earnDepositIntent": { + "$ref": "#/definitions/EarnDepositIntent" + }, + "earnWithdrawIntent": { + "$ref": "#/definitions/EarnWithdrawIntent" + }, + "executeSwapIntent": { + "$ref": "#/definitions/ExecuteSwapIntent" + }, + "upsertSwapConfigIntent": { + "$ref": "#/definitions/UpsertSwapConfigIntent" + }, + "createTvcOperatorIntent": { + "$ref": "#/definitions/CreateTvcOperatorIntent" + }, + "createTvcQuorumKeyIntent": { + "$ref": "#/definitions/CreateTvcQuorumKeyIntent" + }, + "reEncryptTvcQuorumKeyShareIntent": { + "$ref": "#/definitions/ReEncryptTvcQuorumKeyShareIntent" + }, + "initImportSecretsIntent": { + "$ref": "#/definitions/InitImportSecretsIntent" + }, + "solSendTransactionIntentV2": { + "$ref": "#/definitions/SolSendTransactionIntentV2" + }, + "claimSwapFeesIntent": { + "$ref": "#/definitions/ClaimSwapFeesIntent" + }, + "earnSetWrapperStateIntent": { + "$ref": "#/definitions/EarnSetWrapperStateIntent" + }, + "claimEarnFeesIntent": { + "$ref": "#/definitions/ClaimEarnFeesIntent" + }, + "updateWalletAccountNameIntent": { + "$ref": "#/definitions/UpdateWalletAccountNameIntent" + }, + "ethUndelegate7702Intent": { + "$ref": "#/definitions/EthUndelegate7702Intent" + }, + "executeSwapIntentV2": { + "$ref": "#/definitions/ExecuteSwapIntentV2" + }, + "createSwapQuoteIntent": { + "$ref": "#/definitions/CreateSwapQuoteIntent" + }, + "importSecretsIntent": { + "$ref": "#/definitions/ImportSecretsIntent" + } + } + }, + "InvitationParams": { + "type": "object", + "properties": { + "receiverUserName": { + "type": "string", + "description": "The name of the intended Invitation recipient." + }, + "receiverUserEmail": { + "type": "string", + "description": "The email address of the intended Invitation recipient." + }, + "receiverUserTags": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of tags assigned to the Invitation recipient. This field, if not needed, should be an empty array in your request body." + }, + "accessType": { + "$ref": "#/definitions/AccessType", + "description": "The User's permissible access method(s)." + }, + "senderUserId": { + "type": "string", + "description": "Unique identifier for the Sender of an Invitation." + } + }, + "required": [ + "receiverUserName", + "receiverUserEmail", + "receiverUserTags", + "accessType", + "senderUserId" + ] + }, + "IpAllowlist": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for the organization this allowlist belongs to." + }, + "rules": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/IpAllowlistRule" + }, + "description": "List of IP allowlist rules with their metadata." + }, + "publicKey": { + "type": "string", + "x-nullable": true, + "description": "Public key of the API key this allowlist applies to. Null means the allowlist applies to the entire organization." + }, + "enabled": { + "type": "boolean", + "x-nullable": true, + "description": "Whether the IP allowlist is enabled. Only present for organization-level allowlists. Null for API key-level allowlists (presence of the allowlist implies enablement)." + }, + "onEvaluationError": { + "type": "string", + "x-nullable": true, + "description": "Behavior when an error occurs during IP allowlist evaluation. Valid values: ALLOW, DENY. Defaults to DENY." + } + }, + "required": ["organizationId", "rules"] + }, + "IpAllowlistIntentRule": { + "type": "object", + "properties": { + "cidr": { + "type": "string", + "description": "CIDR block (e.g., '192.168.1.0/24', '2001:db8::/32')." + }, + "label": { + "type": "string", + "x-nullable": true, + "description": "Optional human-readable label for this rule (e.g., 'Office VPN')." + } + }, + "required": ["cidr"] + }, + "IpAllowlistRule": { + "type": "object", + "properties": { + "cidr": { + "type": "string", + "description": "CIDR block (e.g., '192.168.1.0/24')." + }, + "label": { + "type": "string", + "x-nullable": true, + "description": "Optional human-readable label for this rule." + }, + "createdAt": { + "type": "string", + "description": "Creation timestamp as millisecond epoch string." + } + }, + "required": ["cidr"] + }, + "KeyValue": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "value": { + "type": "string" + } + } + }, + "ListEarnEnabledVaultsRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "provider": { + "$ref": "#/definitions/EarnProvider", + "description": "Optional filter: only return enabled vaults from this provider. Leave EARN_PROVIDER_UNSPECIFIED to return all providers." + }, + "caip19": { + "type": "string", + "x-nullable": true, + "description": "Optional filter: only return enabled vaults whose underlying asset matches this CAIP-19 asset ID (e.g. 'eip155:8453/erc20:0x833589...'). The chain is taken from the CAIP-19 identifier." + } + }, + "required": ["organizationId"] + }, + "ListEarnEnabledVaultsResponse": { + "type": "object", + "properties": { + "enabledVaults": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/EarnEnabledVault" + }, + "description": "The organization's deployed wrappers." + } + } + }, + "ListEarnPositionsRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "walletAddress": { + "type": "string", + "description": "The wallet address to return positions for." + } + }, + "required": ["organizationId", "walletAddress"] + }, + "ListEarnPositionsResponse": { + "type": "object", + "properties": { + "positions": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/EarnPosition" + }, + "description": "The wallet's active Earn positions." + } + } + }, + "ListEarnVaultsRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization. Annotates which vaults the organization has already enabled." + }, + "provider": { + "$ref": "#/definitions/EarnProvider", + "description": "Optional filter: only return vaults from this provider. Leave EARN_PROVIDER_UNSPECIFIED to return all providers." + }, + "caip19": { + "type": "string", + "description": "CAIP-19 asset ID (e.g. 'eip155:8453/erc20:0x833589...') to return vaults for. Only vaults whose underlying asset matches are returned; the chain is taken from the CAIP-19 identifier." + }, + "paginationOptions": { + "$ref": "#/definitions/Pagination", + "description": "Pagination over the TVL-sorted catalog. before/after cursors are a vault_address from a prior page." + } + }, + "required": ["organizationId", "caip19"] + }, + "ListEarnVaultsResponse": { + "type": "object", + "properties": { + "vaults": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/EarnVault" + }, + "description": "The catalog of wrappable vaults, sorted by TVL (USD) descending. To page, pass page_info.end_cursor as the pagination after cursor." + }, + "pageInfo": { + "$ref": "#/definitions/PageInfo", + "description": "Pagination metadata for the returned page. Pass end_cursor as the next request's after cursor (or start_cursor as the before cursor) to page through the catalog. Cursors are opaque; do not parse them." + } + } + }, + "ListEmailEventsRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization" + }, + "email": { + "type": "string", + "description": "Recipient email address to list email events for" + }, + "eventType": { + "type": "string", + "description": "Optional email event type to filter by. Examples include Send, Delivery, Bounce, and DeliveryDelay" + }, + "paginationOptions": { + "$ref": "#/definitions/Pagination", + "description": "Parameters used for cursor-based pagination" + } + }, + "required": ["organizationId", "email"] + }, + "ListEmailEventsResponse": { + "type": "object", + "properties": { + "emailEvents": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/EmailEvent" + }, + "description": "Email events matching the requested filters, ordered by most recent event first." + } + }, + "required": ["emailEvents"] + }, + "ListEthTransactionHistoryRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "address": { + "type": "string", + "description": "Address corresponding to a wallet account. Private key addresses are not supported." + }, + "caip2": { + "type": "string", + "enum": [ + "eip155:1", + "eip155:11155111", + "eip155:8453", + "eip155:84532", + "eip155:137", + "eip155:80002", + "eip155:42161", + "eip155:4217", + "eip155:42431", + "eip155:421614", + "eip155:56", + "eip155:97" + ], + "description": "EVM CAIP-2 chain ID (e.g., 'eip155:1' for Ethereum mainnet)." + }, + "paginationOptions": { + "$ref": "#/definitions/Pagination", + "description": "Cursor-based pagination options. Cursors are opaque and valid only for the same address and CAIP-2 query." + } + }, + "required": ["organizationId", "address", "caip2"] + }, + "ListEthTransactionHistoryResponse": { + "type": "object", + "properties": { + "transactions": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/EthTransactionHistoryItem" + }, + "description": "EVM transactions for the requested address, ordered by most recent first." + }, + "pageInfo": { + "$ref": "#/definitions/PageInfo" + } + }, + "required": ["transactions"] + }, + "ListFiatOnRampCredentialsRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + } + }, + "required": ["organizationId"] + }, + "ListFiatOnRampCredentialsResponse": { + "type": "object", + "properties": { + "fiatOnRampCredentials": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/FiatOnRampCredential" + } + } + }, + "required": ["fiatOnRampCredentials"] + }, + "ListOauth2CredentialsRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + } + }, + "required": ["organizationId"] + }, + "ListOauth2CredentialsResponse": { + "type": "object", + "properties": { + "oauth2Credentials": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/Oauth2Credential" + } + } + }, + "required": ["oauth2Credentials"] + }, + "ListPrivateKeyTagsRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + } + }, + "required": ["organizationId"] + }, + "ListPrivateKeyTagsResponse": { + "type": "object", + "properties": { + "privateKeyTags": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1.Tag" + }, + "description": "A list of private key tags." + } + }, + "required": ["privateKeyTags"] + }, + "ListSolTransactionHistoryRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "address": { + "type": "string", + "description": "Address corresponding to a wallet account. Private key addresses are not supported." + }, + "caip2": { + "type": "string", + "enum": [ + "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", + "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1", + "solana:mainnet", + "solana:devnet" + ], + "description": "Solana CAIP-2 chain ID (e.g., 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' for Solana mainnet). Human-readable Solana aliases ('solana:mainnet', 'solana:devnet') are also accepted and normalized to canonical CAIP-2 values." + }, + "paginationOptions": { + "$ref": "#/definitions/Pagination", + "description": "Cursor-based pagination options. Cursors are opaque and valid only for the same address and CAIP-2 query." + } + }, + "required": ["organizationId", "address", "caip2"] + }, + "ListSolTransactionHistoryResponse": { + "type": "object", + "properties": { + "transactions": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/SolTransactionHistoryItem" + }, + "description": "Solana transactions for the requested address, ordered by most recent first." + }, + "pageInfo": { + "$ref": "#/definitions/PageInfo" + } + }, + "required": ["transactions"] + }, + "ListSupportedAssetsRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "caip2": { + "type": "string", + "enum": [ + "eip155:1", + "eip155:11155111", + "eip155:8453", + "eip155:84532", + "eip155:137", + "eip155:80002", + "eip155:56", + "eip155:97", + "eip155:10", + "eip155:11155420", + "eip155:143", + "eip155:10143", + "eip155:42161", + "eip155:4217", + "eip155:42431", + "eip155:421614", + "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", + "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1" + ], + "description": "CAIP-2 chain ID (e.g., 'eip155:1' for Ethereum mainnet or 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' for Solana mainnet). Human-readable Solana aliases ('solana:mainnet', 'solana:devnet') are also accepted and normalized to canonical CAIP-2 values." + } + }, + "required": ["organizationId", "caip2"] + }, + "ListSupportedAssetsResponse": { + "type": "object", + "properties": { + "assets": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/AssetMetadata" + }, + "description": "List of asset metadata" + } + } + }, + "ListUserTagsRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + } + }, + "required": ["organizationId"] + }, + "ListUserTagsResponse": { + "type": "object", + "properties": { + "userTags": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1.Tag" + }, + "description": "A list of user tags." + } + }, + "required": ["userTags"] + }, + "ListWebhookEndpointsRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + } + }, + "required": ["organizationId"] + }, + "ListWebhookEndpointsResponse": { + "type": "object", + "properties": { + "webhookEndpoints": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/WebhookEndpointData" + } + } + }, + "required": ["webhookEndpoints"] + }, + "LogLine": { + "type": "object", + "properties": { + "content": { + "type": "string", + "description": "One log line, exactly as the application printed it (without the trailing newline)" + }, + "ts": { + "$ref": "#/definitions/external.data.v1.Timestamp", + "description": "When the line was logged. Stable across replays, so lines can be chronologically merged across pods" + } + }, + "required": ["content"] + }, + "LoginUsage": { + "type": "object", + "properties": { + "publicKey": { + "type": "string", + "description": "Public key for authentication" + } + }, + "required": ["publicKey"] + }, + "MfaPolicy": { + "type": "object", + "properties": { + "mfaPolicyId": { + "type": "string", + "description": "Unique identifier for a given MFA Policy." + }, + "mfaPolicyName": { + "type": "string", + "description": "Human-readable name for an MFA Policy." + }, + "condition": { + "type": "string", + "description": "A condition expression that evaluates to true or false, determining when this MFA policy applies." + }, + "requiredAuthenticationMethods": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/RequiredAuthenticationMethod" + }, + "description": "An ordered list of authentication requirements. Each requirement must be satisfied sequentially to complete MFA." + }, + "order": { + "type": "integer", + "format": "int64", + "description": "The order in which this policy is evaluated relative to other MFA policies." + }, + "notes": { + "type": "string", + "x-nullable": true, + "description": "Optional human-readable notes added by a User to describe a particular MFA policy." + }, + "createdAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + } + }, + "required": [ + "mfaPolicyId", + "mfaPolicyName", + "condition", + "requiredAuthenticationMethods", + "order", + "createdAt", + "updatedAt" + ] + }, + "MfaStatus": { + "type": "object", + "properties": { + "mfaPolicyId": { + "type": "string", + "description": "Unique identifier for a given MFA Policy." + }, + "userId": { + "type": "string", + "description": "Unique identifier for a given User." + }, + "satisfied": { + "type": "boolean", + "description": "Whether the MFA policy requirements are currently satisfied." + }, + "satisfiedMethods": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/AuthenticationMethod" + }, + "description": "A list of authentication methods already satisfied for this MFA policy." + }, + "requiredMethods": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/RequiredAuthenticationMethod" + }, + "description": "An ordered list of authentication requirements needed to satisfy this MFA policy." + } + }, + "required": [ + "mfaPolicyId", + "userId", + "satisfied", + "satisfiedMethods", + "requiredMethods" + ] + }, + "MnemonicLanguage": { + "type": "string", + "enum": [ + "MNEMONIC_LANGUAGE_ENGLISH", + "MNEMONIC_LANGUAGE_SIMPLIFIED_CHINESE", + "MNEMONIC_LANGUAGE_TRADITIONAL_CHINESE", + "MNEMONIC_LANGUAGE_CZECH", + "MNEMONIC_LANGUAGE_FRENCH", + "MNEMONIC_LANGUAGE_ITALIAN", + "MNEMONIC_LANGUAGE_JAPANESE", + "MNEMONIC_LANGUAGE_KOREAN", + "MNEMONIC_LANGUAGE_SPANISH" + ] + }, + "NOOPCodegenAnchorResponse": { + "type": "object", + "properties": { + "stamp": { + "$ref": "#/definitions/WebAuthnStamp" + }, + "tokenUsage": { + "$ref": "#/definitions/TokenUsage" + } + }, + "required": ["stamp"] + }, + "NativeRevertError": { + "type": "object", + "properties": { + "nativeType": { + "type": "string", + "x-nullable": true, + "description": "The type of native error: 'error_string', 'panic', or 'execution_reverted'." + }, + "message": { + "type": "string", + "x-nullable": true, + "description": "The error message for Error(string) reverts." + }, + "panicCode": { + "type": "string", + "format": "uint64", + "x-nullable": true, + "description": "The panic code for Panic(uint256) reverts." + } + } + }, + "Oauth2AuthenticateIntent": { + "type": "object", + "properties": { + "oauth2CredentialId": { + "type": "string", + "description": "The OAuth 2.0 credential id whose client_id and client_secret will be used in the OAuth 2.0 flow" + }, + "authCode": { + "type": "string", + "description": "The auth_code provided by the OAuth 2.0 provider to the end user to be exchanged for a Bearer token in the OAuth 2.0 flow" + }, + "redirectUri": { + "type": "string", + "description": "The URI the user is redirected to after they have authenticated with the OAuth 2.0 provider" + }, + "codeVerifier": { + "type": "string", + "description": "The code verifier used by OAuth 2.0 PKCE providers" + }, + "nonce": { + "type": "string", + "description": "A nonce value set to sha256(publicKey), used to bind the OIDC token to a specific public key" + }, + "bearerTokenTargetPublicKey": { + "type": "string", + "x-nullable": true, + "description": "An optional P256 public key to which, if provided, the bearer token will be encrypted and returned via the `encrypted_bearer_token` claim of the OIDC Token" + } + }, + "required": [ + "oauth2CredentialId", + "authCode", + "redirectUri", + "codeVerifier", + "nonce" + ] + }, + "Oauth2AuthenticateRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_OAUTH2_AUTHENTICATE"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/Oauth2AuthenticateIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "Oauth2AuthenticateResult": { + "type": "object", + "properties": { + "oidcToken": { + "type": "string", + "description": "Base64 encoded OIDC token issued by Turnkey to be used with the LoginWithOAuth activity" + } + }, + "required": ["oidcToken"] + }, + "Oauth2Credential": { + "type": "object", + "properties": { + "oauth2CredentialId": { + "type": "string", + "description": "Unique identifier for a given OAuth 2.0 Credential." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for an Organization." + }, + "provider": { + "$ref": "#/definitions/Oauth2Provider", + "description": "The provider for a given OAuth 2.0 Credential." + }, + "clientId": { + "type": "string", + "description": "The client id for a given OAuth 2.0 Credential." + }, + "encryptedClientSecret": { + "type": "string", + "description": "The encrypted client secret for a given OAuth 2.0 Credential encrypted to the TLS Fetcher quorum key." + }, + "createdAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + } + }, + "required": [ + "oauth2CredentialId", + "organizationId", + "provider", + "clientId", + "encryptedClientSecret", + "createdAt", + "updatedAt" + ] + }, + "Oauth2Provider": { + "type": "string", + "enum": ["OAUTH2_PROVIDER_X", "OAUTH2_PROVIDER_DISCORD"] + }, + "OauthIntent": { + "type": "object", + "properties": { + "oidcToken": { + "type": "string", + "description": "Base64 encoded OIDC token" + }, + "targetPublicKey": { + "type": "string", + "description": "Client-side public key generated by the user, to which the oauth bundle (credentials) will be encrypted." + }, + "apiKeyName": { + "type": "string", + "x-nullable": true, + "description": "Optional human-readable name for an API Key. If none provided, default to Oauth - \u003cTimestamp\u003e" + }, + "expirationSeconds": { + "type": "string", + "x-nullable": true, + "description": "Expiration window (in seconds) indicating how long the API key is valid for. If not provided, a default of 15 minutes will be used." + }, + "invalidateExisting": { + "type": "boolean", + "x-nullable": true, + "description": "Invalidate all other previously generated Oauth API keys" + } + }, + "required": ["oidcToken", "targetPublicKey"] + }, + "OauthLoginIntent": { + "type": "object", + "properties": { + "oidcToken": { + "type": "string", + "description": "Base64 encoded OIDC token" + }, + "publicKey": { + "type": "string", + "description": "Client-side public key generated by the user, which will be conditionally added to org data based on the validity of the oidc token associated with this request" + }, + "expirationSeconds": { + "type": "string", + "x-nullable": true, + "description": "Expiration window (in seconds) indicating how long the Session is valid for. If not provided, a default of 15 minutes will be used." + }, + "invalidateExisting": { + "type": "boolean", + "x-nullable": true, + "description": "Invalidate all other previously generated Login API keys" + }, + "sessionProfileId": { + "type": "string", + "x-nullable": true, + "description": "Optional session profile ID to specify which Session Profile to use for this login. If not provided, the default read/write session will be used." + } + }, + "required": ["oidcToken", "publicKey"] + }, + "OauthLoginRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_OAUTH_LOGIN"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/OauthLoginIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "OauthLoginResult": { + "type": "object", + "properties": { + "session": { + "type": "string", + "description": "Signed JWT containing an expiry, public key, session type, user id, and organization id" + } + }, + "required": ["session"] + }, + "OauthProvider": { + "type": "object", + "properties": { + "providerId": { + "type": "string", + "description": "Unique identifier for an OAuth Provider" + }, + "providerName": { + "type": "string", + "description": "Human-readable name to identify a Provider." + }, + "issuer": { + "type": "string", + "description": "The issuer of the token, typically a URL indicating the authentication server, e.g https://accounts.google.com" + }, + "audience": { + "type": "string", + "description": "Expected audience ('aud' attribute of the signed token) which represents the app ID" + }, + "subject": { + "type": "string", + "description": "Expected subject ('sub' attribute of the signed token) which represents the user ID" + }, + "createdAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + } + }, + "required": [ + "providerId", + "providerName", + "issuer", + "audience", + "subject", + "createdAt", + "updatedAt" + ] + }, + "OauthProviderParams": { + "type": "object", + "properties": { + "providerName": { + "type": "string", + "description": "Human-readable name to identify a Provider." + }, + "oidcToken": { + "type": "string", + "description": "Base64 encoded OIDC token" + } + }, + "required": ["providerName", "oidcToken"] + }, + "OauthProviderParamsV2": { + "type": "object", + "properties": { + "providerName": { + "type": "string", + "description": "Human-readable name to identify a Provider." + }, + "oidcToken": { + "type": "string", + "description": "Base64 encoded OIDC token" + }, + "oidcClaims": { + "$ref": "#/definitions/OidcClaims", + "description": "OIDC claims (iss, sub, aud) to uniquely identify the user" + } + }, + "required": ["providerName"] + }, + "OauthRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_OAUTH"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/OauthIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "OauthResult": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "Unique identifier for the authenticating User." + }, + "apiKeyId": { + "type": "string", + "description": "Unique identifier for the created API key." + }, + "credentialBundle": { + "type": "string", + "description": "HPKE encrypted credential bundle" + } + }, + "required": ["userId", "apiKeyId", "credentialBundle"] + }, + "OidcClaims": { + "type": "object", + "properties": { + "iss": { + "type": "string", + "description": "The issuer identifier from the OIDC token (iss claim)" + }, + "sub": { + "type": "string", + "description": "The subject identifier from the OIDC token (sub claim)" + }, + "aud": { + "type": "string", + "description": "The audience from the OIDC token (aud claim)" + } + }, + "required": ["iss", "sub", "aud"] + }, + "Operator": { + "type": "string", + "enum": [ + "OPERATOR_EQUAL", + "OPERATOR_MORE_THAN", + "OPERATOR_MORE_THAN_OR_EQUAL", + "OPERATOR_LESS_THAN", + "OPERATOR_LESS_THAN_OR_EQUAL", + "OPERATOR_CONTAINS", + "OPERATOR_NOT_EQUAL", + "OPERATOR_IN", + "OPERATOR_NOT_IN", + "OPERATOR_CONTAINS_ONE", + "OPERATOR_CONTAINS_ALL" + ] + }, + "OtpAuthIntent": { + "type": "object", + "properties": { + "otpId": { + "type": "string", + "description": "ID representing the result of an init OTP activity." + }, + "otpCode": { + "type": "string", + "description": "OTP sent out to a user's contact (email or SMS)" + }, + "targetPublicKey": { + "type": "string", + "description": "Client-side public key generated by the user, to which the OTP bundle (credentials) will be encrypted." + }, + "apiKeyName": { + "type": "string", + "x-nullable": true, + "description": "Optional human-readable name for an API Key. If none provided, default to OTP Auth - \u003cTimestamp\u003e" + }, + "expirationSeconds": { + "type": "string", + "x-nullable": true, + "description": "Expiration window (in seconds) indicating how long the API key is valid for. If not provided, a default of 15 minutes will be used." + }, + "invalidateExisting": { + "type": "boolean", + "x-nullable": true, + "description": "Invalidate all other previously generated OTP Auth API keys" + } + }, + "required": ["otpId", "otpCode", "targetPublicKey"] + }, + "OtpAuthRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_OTP_AUTH"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/OtpAuthIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "OtpAuthResult": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "Unique identifier for the authenticating User." + }, + "apiKeyId": { + "type": "string", + "description": "Unique identifier for the created API key." + }, + "credentialBundle": { + "type": "string", + "description": "HPKE encrypted credential bundle" + } + }, + "required": ["userId"] + }, + "OtpLoginIntent": { + "type": "object", + "properties": { + "verificationToken": { + "type": "string", + "description": "Signed JWT containing a unique id, expiry, verification type, contact" + }, + "publicKey": { + "type": "string", + "description": "Client-side public key generated by the user, which will be conditionally added to org data based on the validity of the verification token" + }, + "expirationSeconds": { + "type": "string", + "x-nullable": true, + "description": "Expiration window (in seconds) indicating how long the Session is valid for. If not provided, a default of 15 minutes will be used." + }, + "invalidateExisting": { + "type": "boolean", + "x-nullable": true, + "description": "Invalidate all other previously generated Login API keys" + }, + "clientSignature": { + "$ref": "#/definitions/ClientSignature", + "x-nullable": true, + "description": "Optional signature proving authorization for this login. The signature is over the verification token ID and the public key. Only required if a public key was provided during the verification step." + }, + "sessionProfileId": { + "type": "string", + "x-nullable": true, + "description": "Optional session profile ID to specify which Session Profile to use for this login. If not provided, the default read/write session will be used." + } + }, + "required": ["verificationToken", "publicKey"] + }, + "OtpLoginIntentV2": { + "type": "object", + "properties": { + "verificationToken": { + "type": "string", + "description": "Signed Verification Token containing a unique id, expiry, verification type, contact" + }, + "publicKey": { + "type": "string", + "description": "Client-side public key generated by the user, used as the session public key upon successful login" + }, + "clientSignature": { + "$ref": "#/definitions/ClientSignature", + "description": "Required signature proving authorization for this login. The signature is over the verification token ID and the public key. Required for secure OTP login process." + }, + "expirationSeconds": { + "type": "string", + "x-nullable": true, + "description": "Expiration window (in seconds) indicating how long the Session is valid for. If not provided, a default of 15 minutes will be used." + }, + "invalidateExisting": { + "type": "boolean", + "x-nullable": true, + "description": "Invalidate all other previously generated Login sessions" + }, + "sessionProfileId": { + "type": "string", + "x-nullable": true, + "description": "Optional session profile ID to specify which Session Profile to use for this login. If not provided, the default read/write session will be used." + } + }, + "required": ["verificationToken", "publicKey", "clientSignature"] + }, + "OtpLoginRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_OTP_LOGIN_V2"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/OtpLoginIntentV2" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "OtpLoginResult": { + "type": "object", + "properties": { + "session": { + "type": "string", + "description": "Signed JWT containing an expiry, public key, session type, user id, and organization id" + } + }, + "required": ["session"] + }, + "Outcome": { + "type": "string", + "enum": [ + "OUTCOME_ALLOW", + "OUTCOME_DENY_EXPLICIT", + "OUTCOME_DENY_IMPLICIT", + "OUTCOME_REQUIRES_CONSENSUS", + "OUTCOME_REJECTED", + "OUTCOME_ERROR", + "OUTCOME_REQUIRES_AUTHENTICATORS", + "OUTCOME_TIME_INACTIVE" + ] + }, + "PageInfo": { + "type": "object", + "properties": { + "hasNextPage": { + "type": "boolean" + }, + "hasPreviousPage": { + "type": "boolean" + }, + "startCursor": { + "type": "string", + "x-nullable": true + }, + "endCursor": { + "type": "string", + "x-nullable": true + } + } + }, + "Pagination": { + "type": "object", + "properties": { + "limit": { + "type": "string", + "description": "A limit of the number of object to be returned, between 1 and 100. Defaults to 10." + }, + "before": { + "type": "string", + "description": "A pagination cursor. This is an object ID that enables you to fetch all objects before this ID." + }, + "after": { + "type": "string", + "description": "A pagination cursor. This is an object ID that enables you to fetch all objects after this ID." + } + } + }, + "PathFormat": { + "type": "string", + "enum": ["PATH_FORMAT_BIP32"] + }, + "PayloadEncoding": { + "type": "string", + "enum": [ + "PAYLOAD_ENCODING_HEXADECIMAL", + "PAYLOAD_ENCODING_TEXT_UTF8", + "PAYLOAD_ENCODING_EIP712", + "PAYLOAD_ENCODING_EIP7702_AUTHORIZATION" + ] + }, + "Policy": { + "type": "object", + "properties": { + "policyId": { + "type": "string", + "description": "Unique identifier for a given Policy." + }, + "policyName": { + "type": "string", + "description": "Human-readable name for a Policy." + }, + "effect": { + "$ref": "#/definitions/Effect", + "description": "The instruction to DENY or ALLOW a particular activity following policy selector(s)." + }, + "createdAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + }, + "notes": { + "type": "string", + "description": "Human-readable notes added by a User to describe a particular policy." + }, + "consensus": { + "type": "string", + "x-nullable": true, + "description": "A consensus expression that evalutes to true or false." + }, + "condition": { + "type": "string", + "x-nullable": true, + "description": "A condition expression that evalutes to true or false." + }, + "time": { + "type": "string", + "x-nullable": true, + "description": "A time expression that evalutes to true or false." + } + }, + "required": [ + "policyId", + "policyName", + "effect", + "createdAt", + "updatedAt", + "notes", + "consensus", + "condition" + ] + }, + "PostTvcQuorumKeyShareIntent": { + "type": "object", + "properties": { + "deploymentId": { + "type": "string", + "description": "Unique identifier of the TVC deployment receiving quorum key share" + }, + "ephemeralPublicKeyHex": { + "type": "string", + "description": "Hex-encoded ephemeral public key used to encrypt the quorum key share" + }, + "shareApprovalBundle": { + "$ref": "#/definitions/QuorumKeyShareApprovalBundle", + "description": "Re-encrypted quorum key share and approval" + } + }, + "required": [ + "deploymentId", + "ephemeralPublicKeyHex", + "shareApprovalBundle" + ] + }, + "PostTvcQuorumKeyShareResult": { + "type": "object", + "properties": { + "provisioningShareId": { + "type": "string", + "description": "The unique identifier for the provisioning quorum key share" + } + }, + "required": ["provisioningShareId"] + }, + "PrivateKey": { + "type": "object", + "properties": { + "privateKeyId": { + "type": "string", + "description": "Unique identifier for a given Private Key." + }, + "publicKey": { + "type": "string", + "description": "The public component of a cryptographic key pair used to sign messages and transactions." + }, + "privateKeyName": { + "type": "string", + "description": "Human-readable name for a Private Key." + }, + "curve": { + "$ref": "#/definitions/Curve", + "description": "Cryptographic Curve used to generate a given Private Key." + }, + "addresses": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/data.v1.Address" + }, + "description": "Derived cryptocurrency addresses for a given Private Key." + }, + "privateKeyTags": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of Private Key Tag IDs." + }, + "createdAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + }, + "exported": { + "type": "boolean", + "description": "True when a given Private Key is exported, false otherwise." + }, + "imported": { + "type": "boolean", + "description": "True when a given Private Key is imported, false otherwise." + } + }, + "required": [ + "privateKeyId", + "publicKey", + "privateKeyName", + "curve", + "addresses", + "privateKeyTags", + "createdAt", + "updatedAt", + "exported", + "imported" + ] + }, + "PrivateKeyParams": { + "type": "object", + "properties": { + "privateKeyName": { + "type": "string", + "description": "Human-readable name for a Private Key." + }, + "curve": { + "$ref": "#/definitions/Curve", + "description": "Cryptographic Curve used to generate a given Private Key." + }, + "privateKeyTags": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of Private Key Tag IDs. This field, if not needed, should be an empty array in your request body." + }, + "addressFormats": { + "type": "array", + "items": { + "$ref": "#/definitions/AddressFormat" + }, + "description": "Cryptocurrency-specific formats for a derived address (e.g., Ethereum)." + } + }, + "required": [ + "privateKeyName", + "curve", + "privateKeyTags", + "addressFormats" + ] + }, + "PrivateKeyResult": { + "type": "object", + "properties": { + "privateKeyId": { + "type": "string" + }, + "addresses": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/activity.v1.Address" + } + } + } + }, + "PublicKeyCredentialWithAttestation": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string", + "enum": ["public-key"] + }, + "rawId": { + "type": "string" + }, + "authenticatorAttachment": { + "type": "string", + "enum": ["cross-platform", "platform"], + "x-nullable": true + }, + "response": { + "$ref": "#/definitions/AuthenticatorAttestationResponse" + }, + "clientExtensionResults": { + "$ref": "#/definitions/SimpleClientExtensionResults" + } + }, + "required": ["id", "type", "rawId", "response", "clientExtensionResults"] + }, + "QuorumKeyShareApprovalBundle": { + "type": "object", + "properties": { + "operatorId": { + "type": "string", + "description": "Unique identifier of the operator providing this quorum key share" + }, + "reEncryptedShareHex": { + "type": "string", + "description": "Hex-encoded re-encrypted quorum key share" + }, + "signature": { + "type": "string", + "description": "Signature from the share set operator approving the manifest" + } + }, + "required": ["operatorId", "reEncryptedShareHex", "signature"] + }, + "ReEncryptTvcQuorumKeyShareIntent": { + "type": "object", + "properties": { + "attestationDocB64": { + "type": "string", + "description": "Base64-encoded attestation document for the TVC deployment provisioning enclave" + }, + "manifestB64": { + "type": "string", + "description": "Base64-encoded manifest for the TVC deployment" + }, + "operatorEncryptKey": { + "type": "string", + "description": "Operator encryption public key used to encrypt the hosted TVC quorum key share" + }, + "operatorSignKey": { + "type": "string", + "description": "Operator signing public key used to approve the TVC manifest" + }, + "deploymentId": { + "type": "string", + "description": "Unique identifier of the TVC deployment receiving the re-encrypted quorum key share" + }, + "appQuorumKey": { + "type": "string", + "description": "Quorum key for the TVC application" + } + }, + "required": [ + "attestationDocB64", + "manifestB64", + "operatorEncryptKey", + "operatorSignKey", + "deploymentId", + "appQuorumKey" + ] + }, + "ReEncryptTvcQuorumKeyShareResult": { + "type": "object", + "properties": { + "provisioningShareId": { + "type": "string", + "description": "The unique identifier for the provisioning quorum key share" + } + }, + "required": ["provisioningShareId"] + }, + "RecoverUserIntent": { + "type": "object", + "properties": { + "authenticator": { + "$ref": "#/definitions/AuthenticatorParamsV2", + "description": "The new authenticator to register." + }, + "userId": { + "type": "string", + "description": "Unique identifier for the user performing recovery." + } + }, + "required": ["authenticator", "userId"] + }, + "RecoverUserRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_RECOVER_USER"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/RecoverUserIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "RecoverUserResult": { + "type": "object", + "properties": { + "authenticatorId": { + "type": "array", + "items": { + "type": "string" + }, + "description": "ID of the authenticator created." + } + }, + "required": ["authenticatorId"] + }, + "RejectActivityIntent": { + "type": "object", + "properties": { + "fingerprint": { + "type": "string", + "description": "An artifact verifying a User's action." + } + }, + "required": ["fingerprint"] + }, + "RejectActivityRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_REJECT_ACTIVITY"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/RejectActivityIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "RemoveIpAllowlistIntent": { + "type": "object", + "properties": { + "publicKey": { + "type": "string", + "x-nullable": true, + "description": "The public component of an API key. If null, removes the organization-level IP allowlist. If set, removes the IP allowlist for this specific API key." + } + } + }, + "RemoveIpAllowlistRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_REMOVE_IP_ALLOWLIST"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/RemoveIpAllowlistIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "RemoveIpAllowlistResult": { + "type": "object" + }, + "RemoveOrganizationFeatureIntent": { + "type": "object", + "properties": { + "name": { + "$ref": "#/definitions/FeatureName", + "description": "Name of the feature to remove" + } + }, + "required": ["name"] + }, + "RemoveOrganizationFeatureRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_REMOVE_ORGANIZATION_FEATURE"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/RemoveOrganizationFeatureIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "RemoveOrganizationFeatureResult": { + "type": "object", + "properties": { + "features": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/Feature" + }, + "description": "Resulting list of organization features." + } + }, + "required": ["features"] + }, + "RequiredAuthenticationMethod": { + "type": "object", + "properties": { + "any": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/AuthenticationMethod" + }, + "description": "A list of authentication methods for this MFA step. If only one method is provided, it is required. If multiple are provided, the user must satisfy ANY one of them." + } + }, + "required": ["any"] + }, + "RequiredAuthenticationMethodParams": { + "type": "object", + "properties": { + "any": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/AuthenticationMethodParams" + }, + "description": "A list of authentication methods for this MFA step. If only one method is provided, it is required. If multiple are provided, the user must satisfy ANY one of them." + } + }, + "required": ["any"] + }, + "RestoreTvcDeploymentIntent": { + "type": "object", + "properties": { + "deploymentId": { + "type": "string", + "description": "The unique identifier of the TVC deployment to restore." + } + }, + "required": ["deploymentId"] + }, + "RestoreTvcDeploymentRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_RESTORE_TVC_DEPLOYMENT"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/RestoreTvcDeploymentIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "RestoreTvcDeploymentResult": { + "type": "object", + "properties": { + "deploymentId": { + "type": "string", + "description": "The unique identifier of the restored TVC deployment." + } + }, + "required": ["deploymentId"] + }, + "Result": { + "type": "object", + "properties": { + "createOrganizationResult": { + "$ref": "#/definitions/CreateOrganizationResult" + }, + "createAuthenticatorsResult": { + "$ref": "#/definitions/CreateAuthenticatorsResult" + }, + "createUsersResult": { + "$ref": "#/definitions/CreateUsersResult" + }, + "createPrivateKeysResult": { + "$ref": "#/definitions/CreatePrivateKeysResult" + }, + "createInvitationsResult": { + "$ref": "#/definitions/CreateInvitationsResult" + }, + "acceptInvitationResult": { + "$ref": "#/definitions/AcceptInvitationResult" + }, + "signRawPayloadResult": { + "$ref": "#/definitions/SignRawPayloadResult" + }, + "createPolicyResult": { + "$ref": "#/definitions/CreatePolicyResult" + }, + "disablePrivateKeyResult": { + "$ref": "#/definitions/DisablePrivateKeyResult" + }, + "deleteUsersResult": { + "$ref": "#/definitions/DeleteUsersResult" + }, + "deleteAuthenticatorsResult": { + "$ref": "#/definitions/DeleteAuthenticatorsResult" + }, + "deleteInvitationResult": { + "$ref": "#/definitions/DeleteInvitationResult" + }, + "deleteOrganizationResult": { + "$ref": "#/definitions/DeleteOrganizationResult" + }, + "deletePolicyResult": { + "$ref": "#/definitions/DeletePolicyResult" + }, + "createUserTagResult": { + "$ref": "#/definitions/CreateUserTagResult" + }, + "deleteUserTagsResult": { + "$ref": "#/definitions/DeleteUserTagsResult" + }, + "signTransactionResult": { + "$ref": "#/definitions/SignTransactionResult" + }, + "deleteApiKeysResult": { + "$ref": "#/definitions/DeleteApiKeysResult" + }, + "createApiKeysResult": { + "$ref": "#/definitions/CreateApiKeysResult" + }, + "createPrivateKeyTagResult": { + "$ref": "#/definitions/CreatePrivateKeyTagResult" + }, + "deletePrivateKeyTagsResult": { + "$ref": "#/definitions/DeletePrivateKeyTagsResult" + }, + "setPaymentMethodResult": { + "$ref": "#/definitions/SetPaymentMethodResult" + }, + "activateBillingTierResult": { + "$ref": "#/definitions/ActivateBillingTierResult" + }, + "deletePaymentMethodResult": { + "$ref": "#/definitions/DeletePaymentMethodResult" + }, + "createApiOnlyUsersResult": { + "$ref": "#/definitions/CreateApiOnlyUsersResult" + }, + "updateRootQuorumResult": { + "$ref": "#/definitions/UpdateRootQuorumResult" + }, + "updateUserTagResult": { + "$ref": "#/definitions/UpdateUserTagResult" + }, + "updatePrivateKeyTagResult": { + "$ref": "#/definitions/UpdatePrivateKeyTagResult" + }, + "createSubOrganizationResult": { + "$ref": "#/definitions/CreateSubOrganizationResult" + }, + "updateAllowedOriginsResult": { + "$ref": "#/definitions/UpdateAllowedOriginsResult" + }, + "createPrivateKeysResultV2": { + "$ref": "#/definitions/CreatePrivateKeysResultV2" + }, + "updateUserResult": { + "$ref": "#/definitions/UpdateUserResult" + }, + "updatePolicyResult": { + "$ref": "#/definitions/UpdatePolicyResult" + }, + "createSubOrganizationResultV3": { + "$ref": "#/definitions/CreateSubOrganizationResultV3" + }, + "createWalletResult": { + "$ref": "#/definitions/CreateWalletResult" + }, + "createWalletAccountsResult": { + "$ref": "#/definitions/CreateWalletAccountsResult" + }, + "initUserEmailRecoveryResult": { + "$ref": "#/definitions/InitUserEmailRecoveryResult" + }, + "recoverUserResult": { + "$ref": "#/definitions/RecoverUserResult" + }, + "setOrganizationFeatureResult": { + "$ref": "#/definitions/SetOrganizationFeatureResult" + }, + "removeOrganizationFeatureResult": { + "$ref": "#/definitions/RemoveOrganizationFeatureResult" + }, + "exportPrivateKeyResult": { + "$ref": "#/definitions/ExportPrivateKeyResult" + }, + "exportWalletResult": { + "$ref": "#/definitions/ExportWalletResult" + }, + "createSubOrganizationResultV4": { + "$ref": "#/definitions/CreateSubOrganizationResultV4" + }, + "emailAuthResult": { + "$ref": "#/definitions/EmailAuthResult" + }, + "exportWalletAccountResult": { + "$ref": "#/definitions/ExportWalletAccountResult" + }, + "initImportWalletResult": { + "$ref": "#/definitions/InitImportWalletResult" + }, + "importWalletResult": { + "$ref": "#/definitions/ImportWalletResult" + }, + "initImportPrivateKeyResult": { + "$ref": "#/definitions/InitImportPrivateKeyResult" + }, + "importPrivateKeyResult": { + "$ref": "#/definitions/ImportPrivateKeyResult" + }, + "createPoliciesResult": { + "$ref": "#/definitions/CreatePoliciesResult" + }, + "signRawPayloadsResult": { + "$ref": "#/definitions/SignRawPayloadsResult" + }, + "createReadOnlySessionResult": { + "$ref": "#/definitions/CreateReadOnlySessionResult" + }, + "createOauthProvidersResult": { + "$ref": "#/definitions/CreateOauthProvidersResult" + }, + "deleteOauthProvidersResult": { + "$ref": "#/definitions/DeleteOauthProvidersResult" + }, + "createSubOrganizationResultV5": { + "$ref": "#/definitions/CreateSubOrganizationResultV5" + }, + "oauthResult": { + "$ref": "#/definitions/OauthResult" + }, + "createReadWriteSessionResult": { + "$ref": "#/definitions/CreateReadWriteSessionResult" + }, + "createSubOrganizationResultV6": { + "$ref": "#/definitions/CreateSubOrganizationResultV6" + }, + "deletePrivateKeysResult": { + "$ref": "#/definitions/DeletePrivateKeysResult" + }, + "deleteWalletsResult": { + "$ref": "#/definitions/DeleteWalletsResult" + }, + "createReadWriteSessionResultV2": { + "$ref": "#/definitions/CreateReadWriteSessionResultV2" + }, + "deleteSubOrganizationResult": { + "$ref": "#/definitions/DeleteSubOrganizationResult" + }, + "initOtpAuthResult": { + "$ref": "#/definitions/InitOtpAuthResult" + }, + "otpAuthResult": { + "$ref": "#/definitions/OtpAuthResult" + }, + "createSubOrganizationResultV7": { + "$ref": "#/definitions/CreateSubOrganizationResultV7" + }, + "updateWalletResult": { + "$ref": "#/definitions/UpdateWalletResult" + }, + "updatePolicyResultV2": { + "$ref": "#/definitions/UpdatePolicyResultV2" + }, + "initOtpAuthResultV2": { + "$ref": "#/definitions/InitOtpAuthResultV2" + }, + "initOtpResult": { + "$ref": "#/definitions/InitOtpResult" + }, + "verifyOtpResult": { + "$ref": "#/definitions/VerifyOtpResult" + }, + "otpLoginResult": { + "$ref": "#/definitions/OtpLoginResult" + }, + "stampLoginResult": { + "$ref": "#/definitions/StampLoginResult" + }, + "oauthLoginResult": { + "$ref": "#/definitions/OauthLoginResult" + }, + "updateUserNameResult": { + "$ref": "#/definitions/UpdateUserNameResult" + }, + "updateUserEmailResult": { + "$ref": "#/definitions/UpdateUserEmailResult" + }, + "updateUserPhoneNumberResult": { + "$ref": "#/definitions/UpdateUserPhoneNumberResult" + }, + "initFiatOnRampResult": { + "$ref": "#/definitions/InitFiatOnRampResult" + }, + "createSmartContractInterfaceResult": { + "$ref": "#/definitions/CreateSmartContractInterfaceResult" + }, + "deleteSmartContractInterfaceResult": { + "$ref": "#/definitions/DeleteSmartContractInterfaceResult" + }, + "enableAuthProxyResult": { + "$ref": "#/definitions/EnableAuthProxyResult" + }, + "disableAuthProxyResult": { + "$ref": "#/definitions/DisableAuthProxyResult" + }, + "updateAuthProxyConfigResult": { + "$ref": "#/definitions/UpdateAuthProxyConfigResult" + }, + "createOauth2CredentialResult": { + "$ref": "#/definitions/CreateOauth2CredentialResult" + }, + "updateOauth2CredentialResult": { + "$ref": "#/definitions/UpdateOauth2CredentialResult" + }, + "deleteOauth2CredentialResult": { + "$ref": "#/definitions/DeleteOauth2CredentialResult" + }, + "oauth2AuthenticateResult": { + "$ref": "#/definitions/Oauth2AuthenticateResult" + }, + "deleteWalletAccountsResult": { + "$ref": "#/definitions/DeleteWalletAccountsResult" + }, + "deletePoliciesResult": { + "$ref": "#/definitions/DeletePoliciesResult" + }, + "ethSendRawTransactionResult": { + "$ref": "#/definitions/EthSendRawTransactionResult" + }, + "createFiatOnRampCredentialResult": { + "$ref": "#/definitions/CreateFiatOnRampCredentialResult" + }, + "updateFiatOnRampCredentialResult": { + "$ref": "#/definitions/UpdateFiatOnRampCredentialResult" + }, + "deleteFiatOnRampCredentialResult": { + "$ref": "#/definitions/DeleteFiatOnRampCredentialResult" + }, + "ethSendTransactionResult": { + "$ref": "#/definitions/EthSendTransactionResult" + }, + "upsertGasUsageConfigResult": { + "$ref": "#/definitions/UpsertGasUsageConfigResult" + }, + "createTvcAppResult": { + "$ref": "#/definitions/CreateTvcAppResult" + }, + "createTvcDeploymentResult": { + "$ref": "#/definitions/CreateTvcDeploymentResult" + }, + "createTvcManifestApprovalsResult": { + "$ref": "#/definitions/CreateTvcManifestApprovalsResult" + }, + "solSendTransactionResult": { + "$ref": "#/definitions/SolSendTransactionResult" + }, + "initOtpResultV2": { + "$ref": "#/definitions/InitOtpResultV2" + }, + "updateOrganizationNameResult": { + "$ref": "#/definitions/UpdateOrganizationNameResult" + }, + "createSubOrganizationResultV8": { + "$ref": "#/definitions/CreateSubOrganizationResultV8" + }, + "createOauthProvidersResultV2": { + "$ref": "#/definitions/CreateOauthProvidersResultV2" + }, + "createWebhookEndpointResult": { + "$ref": "#/definitions/CreateWebhookEndpointResult" + }, + "updateWebhookEndpointResult": { + "$ref": "#/definitions/UpdateWebhookEndpointResult" + }, + "deleteWebhookEndpointResult": { + "$ref": "#/definitions/DeleteWebhookEndpointResult" + }, + "setIpAllowlistResult": { + "$ref": "#/definitions/SetIpAllowlistResult" + }, + "removeIpAllowlistResult": { + "$ref": "#/definitions/RemoveIpAllowlistResult" + }, + "updateTvcAppLiveDeploymentResult": { + "$ref": "#/definitions/UpdateTvcAppLiveDeploymentResult" + }, + "deleteTvcDeploymentResult": { + "$ref": "#/definitions/DeleteTvcDeploymentResult" + }, + "deleteTvcAppAndDeploymentsResult": { + "$ref": "#/definitions/DeleteTvcAppAndDeploymentsResult" + }, + "restoreTvcDeploymentResult": { + "$ref": "#/definitions/RestoreTvcDeploymentResult" + }, + "sparkSignFrostResult": { + "$ref": "#/definitions/SparkSignFrostResult" + }, + "sparkPrepareTransferResult": { + "$ref": "#/definitions/SparkPrepareTransferResult" + }, + "sparkClaimTransferResult": { + "$ref": "#/definitions/SparkClaimTransferResult" + }, + "sparkPrepareLightningReceiveResult": { + "$ref": "#/definitions/SparkPrepareLightningReceiveResult" + }, + "postTvcQuorumKeyShareResult": { + "$ref": "#/definitions/PostTvcQuorumKeyShareResult" + }, + "ethSendTransactionResultV2": { + "$ref": "#/definitions/EthSendTransactionResultV2" + }, + "createMfaPolicyResult": { + "$ref": "#/definitions/CreateMfaPolicyResult" + }, + "updateMfaPolicyResult": { + "$ref": "#/definitions/UpdateMfaPolicyResult" + }, + "deleteMfaPolicyResult": { + "$ref": "#/definitions/DeleteMfaPolicyResult" + }, + "createSessionProfileResult": { + "$ref": "#/definitions/CreateSessionProfileResult" + }, + "earnDeployWrapperResult": { + "$ref": "#/definitions/EarnDeployWrapperResult" + }, + "earnDepositResult": { + "$ref": "#/definitions/EarnDepositResult" + }, + "earnWithdrawResult": { + "$ref": "#/definitions/EarnWithdrawResult" + }, + "executeSwapResult": { + "$ref": "#/definitions/ExecuteSwapResult" + }, + "upsertSwapConfigResult": { + "$ref": "#/definitions/UpsertSwapConfigResult" + }, + "createTvcOperatorResult": { + "$ref": "#/definitions/CreateTvcOperatorResult" + }, + "createTvcQuorumKeyResult": { + "$ref": "#/definitions/CreateTvcQuorumKeyResult" + }, + "reEncryptTvcQuorumKeyShareResult": { + "$ref": "#/definitions/ReEncryptTvcQuorumKeyShareResult" + }, + "initImportSecretsResult": { + "$ref": "#/definitions/InitImportSecretsResult" + }, + "solSendTransactionResultV2": { + "$ref": "#/definitions/SolSendTransactionResultV2" + }, + "claimSwapFeesResult": { + "$ref": "#/definitions/ClaimSwapFeesResult" + }, + "earnSetWrapperStateResult": { + "$ref": "#/definitions/EarnSetWrapperStateResult" + }, + "claimEarnFeesResult": { + "$ref": "#/definitions/ClaimEarnFeesResult" + }, + "updateWalletAccountNameResult": { + "$ref": "#/definitions/UpdateWalletAccountNameResult" + }, + "ethUndelegate7702Result": { + "$ref": "#/definitions/EthUndelegate7702Result" + }, + "createSwapQuoteResult": { + "$ref": "#/definitions/CreateSwapQuoteResult" + }, + "importSecretsResult": { + "$ref": "#/definitions/ImportSecretsResult" + } + } + }, + "RevertChainEntry": { + "type": "object", + "properties": { + "address": { + "type": "string", + "description": "The contract address where the revert occurred." + }, + "errorType": { + "type": "string", + "description": "Type of error: 'unknown', 'native', or 'custom'." + }, + "displayMessage": { + "type": "string", + "description": "Human-readable message describing this revert." + }, + "unknown": { + "$ref": "#/definitions/UnknownRevertError", + "description": "Details for unknown error types." + }, + "native": { + "$ref": "#/definitions/NativeRevertError", + "description": "Details for native Solidity errors (Error, Panic, execution reverted)." + }, + "custom": { + "$ref": "#/definitions/CustomRevertError", + "description": "Details for custom contract errors." + } + } + }, + "RootUserParams": { + "type": "object", + "properties": { + "userName": { + "type": "string", + "description": "Human-readable name for a User." + }, + "userEmail": { + "type": "string", + "x-nullable": true, + "description": "The user's email address." + }, + "apiKeys": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/ApiKeyParams" + }, + "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." + }, + "authenticators": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/AuthenticatorParamsV2" + }, + "description": "A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body." + } + }, + "required": ["userName", "apiKeys", "authenticators"] + }, + "RootUserParamsV2": { + "type": "object", + "properties": { + "userName": { + "type": "string", + "description": "Human-readable name for a User." + }, + "userEmail": { + "type": "string", + "x-nullable": true, + "description": "The user's email address." + }, + "apiKeys": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/ApiKeyParams" + }, + "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." + }, + "authenticators": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/AuthenticatorParamsV2" + }, + "description": "A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body." + }, + "oauthProviders": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/OauthProviderParams" + }, + "description": "A list of Oauth providers. This field, if not needed, should be an empty array in your request body." + } + }, + "required": ["userName", "apiKeys", "authenticators", "oauthProviders"] + }, + "RootUserParamsV3": { + "type": "object", + "properties": { + "userName": { + "type": "string", + "description": "Human-readable name for a User." + }, + "userEmail": { + "type": "string", + "x-nullable": true, + "description": "The user's email address." + }, + "apiKeys": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/ApiKeyParamsV2" + }, + "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." + }, + "authenticators": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/AuthenticatorParamsV2" + }, + "description": "A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body." + }, + "oauthProviders": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/OauthProviderParams" + }, + "description": "A list of Oauth providers. This field, if not needed, should be an empty array in your request body." + } + }, + "required": ["userName", "apiKeys", "authenticators", "oauthProviders"] + }, + "RootUserParamsV4": { + "type": "object", + "properties": { + "userName": { + "type": "string", + "description": "Human-readable name for a User." + }, + "userEmail": { + "type": "string", + "x-nullable": true, + "description": "The user's email address." + }, + "userPhoneNumber": { + "type": "string", + "x-nullable": true, + "description": "The user's phone number in E.164 format e.g. +13214567890" + }, + "apiKeys": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/ApiKeyParamsV2" + }, + "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." + }, + "authenticators": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/AuthenticatorParamsV2" + }, + "description": "A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body." + }, + "oauthProviders": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/OauthProviderParams" + }, + "description": "A list of Oauth providers. This field, if not needed, should be an empty array in your request body." + } + }, + "required": ["userName", "apiKeys", "authenticators", "oauthProviders"] + }, + "RootUserParamsV5": { + "type": "object", + "properties": { + "userName": { + "type": "string", + "description": "Human-readable name for a User." + }, + "userEmail": { + "type": "string", + "x-nullable": true, + "description": "The user's email address." + }, + "userPhoneNumber": { + "type": "string", + "x-nullable": true, + "description": "The user's phone number in E.164 format e.g. +13214567890" + }, + "apiKeys": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/ApiKeyParamsV2" + }, + "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." + }, + "authenticators": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/AuthenticatorParamsV2" + }, + "description": "A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body." + }, + "oauthProviders": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/OauthProviderParamsV2" + }, + "description": "A list of Oauth providers. This field, if not needed, should be an empty array in your request body." + } + }, + "required": ["userName", "apiKeys", "authenticators", "oauthProviders"] + }, + "Selector": { + "type": "object", + "properties": { + "subject": { + "type": "string" + }, + "operator": { + "$ref": "#/definitions/Operator" + }, + "target": { + "type": "string" + } + } + }, + "SelectorV2": { + "type": "object", + "properties": { + "subject": { + "type": "string" + }, + "operator": { + "$ref": "#/definitions/Operator" + }, + "targets": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "SessionProfile": { + "type": "object", + "properties": { + "sessionProfileId": { + "type": "string", + "description": "Unique identifier for a given Session Profile." + }, + "sessionProfileName": { + "type": "string", + "description": "Human-readable name for a Session Profile." + }, + "scope": { + "type": "string", + "description": "The specific scope that a session created with this profile is limited to." + }, + "expirationSeconds": { + "type": "string", + "x-nullable": true, + "description": "Optional window (in seconds) indicating how long sessions created with this profile should last." + }, + "notes": { + "type": "string", + "x-nullable": true, + "description": "Optional human-readable notes added by a User to describe a particular Session Profile." + }, + "createdAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + } + }, + "required": [ + "sessionProfileId", + "sessionProfileName", + "scope", + "createdAt", + "updatedAt" + ] + }, + "SetIpAllowlistIntent": { + "type": "object", + "properties": { + "publicKey": { + "type": "string", + "x-nullable": true, + "description": "The public component of an API key. If null, the IP allowlist applies at the organization level. If set, it applies only to this specific API key." + }, + "enabled": { + "type": "boolean", + "x-nullable": true, + "description": "Whether the IP allowlist is enabled. Only meaningful for organization-level allowlists. Omit for API key-level allowlists." + }, + "rules": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/IpAllowlistIntentRule" + }, + "description": "List of IP allowlist rules with CIDR blocks and optional labels." + }, + "onEvaluationError": { + "type": "string", + "x-nullable": true, + "description": "Behavior when an error occurs during IP allowlist evaluation. Valid values: ALLOW, DENY. Defaults to DENY." + } + } + }, + "SetIpAllowlistRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_SET_IP_ALLOWLIST"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/SetIpAllowlistIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "SetIpAllowlistResult": { + "type": "object" + }, + "SetOrganizationFeatureIntent": { + "type": "object", + "properties": { + "name": { + "$ref": "#/definitions/FeatureName", + "description": "Name of the feature to set" + }, + "value": { + "type": "string", + "x-nullable": true, + "description": "Optional value for the feature. Will override existing values if feature is already set." + } + }, + "required": ["name", "value"] + }, + "SetOrganizationFeatureRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_SET_ORGANIZATION_FEATURE"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/SetOrganizationFeatureIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "SetOrganizationFeatureResult": { + "type": "object", + "properties": { + "features": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/Feature" + }, + "description": "Resulting list of organization features." + } + }, + "required": ["features"] + }, + "SetPaymentMethodIntent": { + "type": "object", + "properties": { + "number": { + "type": "string", + "description": "The account number of the customer's credit card." + }, + "cvv": { + "type": "string", + "description": "The verification digits of the customer's credit card." + }, + "expiryMonth": { + "type": "string", + "description": "The month that the credit card expires." + }, + "expiryYear": { + "type": "string", + "description": "The year that the credit card expires." + }, + "cardHolderEmail": { + "type": "string", + "description": "The email that will receive invoices for the credit card." + }, + "cardHolderName": { + "type": "string", + "description": "The name associated with the credit card." + } + }, + "required": [ + "number", + "cvv", + "expiryMonth", + "expiryYear", + "cardHolderEmail", + "cardHolderName" + ] + }, + "SetPaymentMethodIntentV2": { + "type": "object", + "properties": { + "paymentMethodId": { + "type": "string", + "description": "The id of the payment method that was created clientside." + }, + "cardHolderEmail": { + "type": "string", + "description": "The email that will receive invoices for the credit card." + }, + "cardHolderName": { + "type": "string", + "description": "The name associated with the credit card." + } + }, + "required": ["paymentMethodId", "cardHolderEmail", "cardHolderName"] + }, + "SetPaymentMethodResult": { + "type": "object", + "properties": { + "lastFour": { + "type": "string", + "description": "The last four digits of the credit card added." + }, + "cardHolderName": { + "type": "string", + "description": "The name associated with the payment method." + }, + "cardHolderEmail": { + "type": "string", + "description": "The email address associated with the payment method." + } + }, + "required": ["lastFour", "cardHolderName", "cardHolderEmail"] + }, + "SignRawPayloadIntent": { + "type": "object", + "properties": { + "privateKeyId": { + "type": "string", + "description": "Unique identifier for a given Private Key." + }, + "payload": { + "type": "string", + "description": "Raw unsigned payload to be signed." + }, + "encoding": { + "$ref": "#/definitions/PayloadEncoding", + "description": "Encoding of the `payload` string. Turnkey uses this information to convert `payload` into bytes with the correct decoder (e.g. hex, utf8)." + }, + "hashFunction": { + "$ref": "#/definitions/HashFunction", + "description": "Hash function to apply to payload bytes before signing. This field must be set to HASH_FUNCTION_NOT_APPLICABLE for EdDSA/ed25519 signature requests; configurable payload hashing is not supported by RFC 8032." + } + }, + "required": ["privateKeyId", "payload", "encoding", "hashFunction"] + }, + "SignRawPayloadIntentV2": { + "type": "object", + "properties": { + "signWith": { + "type": "string", + "description": "A Wallet account address, Private Key address, or Private Key identifier." + }, + "payload": { + "type": "string", + "description": "Raw unsigned payload to be signed." + }, + "encoding": { + "$ref": "#/definitions/PayloadEncoding", + "description": "Encoding of the `payload` string. Turnkey uses this information to convert `payload` into bytes with the correct decoder (e.g. hex, utf8)." + }, + "hashFunction": { + "$ref": "#/definitions/HashFunction", + "description": "Hash function to apply to payload bytes before signing. This field must be set to HASH_FUNCTION_NOT_APPLICABLE for EdDSA/ed25519 signature requests; configurable payload hashing is not supported by RFC 8032." + } + }, + "required": ["signWith", "payload", "encoding", "hashFunction"] + }, + "SignRawPayloadRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_SIGN_RAW_PAYLOAD_V2"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/SignRawPayloadIntentV2" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "SignRawPayloadResult": { + "type": "object", + "properties": { + "r": { + "type": "string", + "description": "Component of an ECSDA signature." + }, + "s": { + "type": "string", + "description": "Component of an ECSDA signature." + }, + "v": { + "type": "string", + "description": "Component of an ECSDA signature." + } + }, + "required": ["r", "s", "v"] + }, + "SignRawPayloadsIntent": { + "type": "object", + "properties": { + "signWith": { + "type": "string", + "description": "A Wallet account address, Private Key address, or Private Key identifier." + }, + "payloads": { + "type": "array", + "items": { + "type": "string" + }, + "description": "An array of raw unsigned payloads to be signed." + }, + "encoding": { + "$ref": "#/definitions/PayloadEncoding", + "description": "Encoding of the `payload` string. Turnkey uses this information to convert `payload` into bytes with the correct decoder (e.g. hex, utf8)." + }, + "hashFunction": { + "$ref": "#/definitions/HashFunction", + "description": "Hash function to apply to payload bytes before signing. This field must be set to HASH_FUNCTION_NOT_APPLICABLE for EdDSA/ed25519 signature requests; configurable payload hashing is not supported by RFC 8032." + } + }, + "required": ["signWith", "payloads", "encoding", "hashFunction"] + }, + "SignRawPayloadsRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_SIGN_RAW_PAYLOADS"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/SignRawPayloadsIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "SignRawPayloadsResult": { + "type": "object", + "properties": { + "signatures": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/SignRawPayloadResult" + } + } + } + }, + "SignTransactionIntent": { + "type": "object", + "properties": { + "privateKeyId": { + "type": "string", + "description": "Unique identifier for a given Private Key." + }, + "unsignedTransaction": { + "type": "string", + "description": "Raw unsigned transaction to be signed by a particular Private Key." + }, + "type": { + "$ref": "#/definitions/TransactionType" + } + }, + "required": ["privateKeyId", "unsignedTransaction", "type"] + }, + "SignTransactionIntentV2": { + "type": "object", + "properties": { + "signWith": { + "type": "string", + "description": "A Wallet account address, Private Key address, or Private Key identifier." + }, + "unsignedTransaction": { + "type": "string", + "description": "Raw unsigned transaction to be signed" + }, + "type": { + "$ref": "#/definitions/TransactionType" + } + }, + "required": ["signWith", "unsignedTransaction", "type"] + }, + "SignTransactionRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_SIGN_TRANSACTION_V2"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/SignTransactionIntentV2" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "SignTransactionResult": { + "type": "object", + "properties": { + "signedTransaction": { + "type": "string" + } + }, + "required": ["signedTransaction"] + }, + "SignupUsage": { + "type": "object", + "properties": { + "email": { + "type": "string", + "x-nullable": true + }, + "phoneNumber": { + "type": "string", + "x-nullable": true + }, + "apiKeys": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/ApiKeyParamsV2" + } + }, + "authenticators": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/AuthenticatorParamsV2" + } + }, + "oauthProviders": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/OauthProviderParams" + } + } + } + }, + "SignupUsageV2": { + "type": "object", + "properties": { + "email": { + "type": "string", + "x-nullable": true + }, + "phoneNumber": { + "type": "string", + "x-nullable": true + }, + "apiKeys": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/ApiKeyParamsV2" + } + }, + "authenticators": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/AuthenticatorParamsV2" + } + }, + "oauthProviders": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/OauthProviderParamsV2" + } + } + } + }, + "SimpleClientExtensionResults": { + "type": "object", + "properties": { + "appid": { + "type": "boolean", + "x-nullable": true + }, + "appidExclude": { + "type": "boolean", + "x-nullable": true + }, + "credProps": { + "$ref": "#/definitions/CredPropsAuthenticationExtensionsClientOutputs", + "x-nullable": true + } + } + }, + "SmartContractInterfaceType": { + "type": "string", + "enum": [ + "SMART_CONTRACT_INTERFACE_TYPE_ETHEREUM", + "SMART_CONTRACT_INTERFACE_TYPE_SOLANA" + ] + }, + "SmsCustomizationParams": { + "type": "object", + "properties": { + "template": { + "type": "string", + "x-nullable": true, + "description": "Template containing references to .OtpCode i.e Your OTP is {{.OtpCode}}" + } + } + }, + "SolSendTransactionIntent": { + "type": "object", + "properties": { + "unsignedTransaction": { + "type": "string", + "description": "Base64-encoded serialized unsigned Solana transaction" + }, + "signWith": { + "type": "string", + "description": "A wallet or private key address to sign with. This does not support private key IDs." + }, + "sponsor": { + "type": "boolean", + "x-nullable": true, + "description": "Whether to sponsor this transaction via Gas Station." + }, + "caip2": { + "type": "string", + "enum": [ + "solana:mainnet", + "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", + "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d", + "solana:devnet", + "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1", + "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1wcaWoxPkrZBG" + ], + "description": "CAIP-2 chain ID (e.g., 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' for Solana mainnet). Human-readable Solana aliases ('solana:mainnet', 'solana:devnet') are also accepted and normalized to canonical CAIP-2 values." + }, + "recentBlockhash": { + "type": "string", + "x-nullable": true, + "description": "user-provided blockhash for replay protection / deadline control. If omitted and sponsor=true, we fetch a fresh blockhash during execution" + } + }, + "required": ["unsignedTransaction", "signWith", "caip2"] + }, + "SolSendTransactionIntentV2": { + "type": "object", + "properties": { + "unsignedTransaction": { + "type": "string", + "description": "Hex-encoded serialized unsigned Solana transaction (full wire format with zeroed signature placeholders)" + }, + "signWiths": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Ordered Solana signer addresses Turnkey signs with. Between 1 and 16 signers. For sponsored transactions this must list every required signer of the transaction in transaction order." + }, + "sponsor": { + "type": "boolean", + "x-nullable": true, + "description": "Whether to sponsor this transaction via Gas Station." + }, + "caip2": { + "type": "string", + "enum": [ + "solana:mainnet", + "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", + "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d", + "solana:devnet", + "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1", + "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1wcaWoxPkrZBG" + ], + "description": "CAIP-2 chain ID (e.g., 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' for Solana mainnet). Human-readable Solana aliases ('solana:mainnet', 'solana:devnet') are also accepted and normalized to canonical CAIP-2 values." + }, + "recentBlockhash": { + "type": "string", + "x-nullable": true, + "description": "User-provided blockhash for replay protection / deadline control. If provided, it is used as-is, including for sponsored transactions (the transaction is only broadcastable while the blockhash is current). If omitted and sponsor=true, a fresh blockhash is fetched during execution." + } + }, + "required": ["unsignedTransaction", "signWiths", "caip2"] + }, + "SolSendTransactionRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_SOL_SEND_TRANSACTION_V2"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/SolSendTransactionIntentV2" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "SolSendTransactionResult": { + "type": "object", + "properties": { + "sendTransactionStatusId": { + "type": "string", + "description": "The send_transaction_status ID associated with the transaction submission" + } + }, + "required": ["sendTransactionStatusId"] + }, + "SolSendTransactionResultV2": { + "type": "object", + "properties": { + "sendTransactionStatusId": { + "type": "string", + "description": "The send_transaction_status ID associated with the transaction submission" + } + }, + "required": ["sendTransactionStatusId"] + }, + "SolTransactionHistoryItem": { + "type": "object", + "properties": { + "signature": { + "type": "string", + "description": "Solana transaction signature." + }, + "block": { + "$ref": "#/definitions/TransactionHistoryBlock", + "description": "Block metadata for the transaction." + }, + "status": { + "type": "string", + "enum": ["CONFIRMED", "FINALIZED"], + "description": "Transaction confirmation status." + }, + "origin": { + "type": "string", + "description": "Origin of the transaction. Examples include TURNKEY." + }, + "feePayer": { + "type": "string", + "description": "Address that paid the Solana transaction fee. This is the first signer in the transaction message." + }, + "signers": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/SolTransactionHistorySigner" + }, + "description": "Addresses that signed the Solana transaction, in message order." + }, + "fee": { + "$ref": "#/definitions/TransactionHistoryFee", + "description": "Transaction fee information." + }, + "transfers": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/TransactionHistoryTransfer" + }, + "description": "Asset transfers associated with the transaction." + }, + "turnkey": { + "$ref": "#/definitions/TransactionHistoryTurnkey", + "description": "Turnkey-specific metadata for transactions originated by Turnkey." + } + }, + "required": [ + "signature", + "block", + "status", + "origin", + "feePayer", + "signers", + "fee", + "transfers" + ] + }, + "SolTransactionHistorySigner": { + "type": "object", + "properties": { + "address": { + "type": "string", + "description": "Address of the Solana transaction signer." + }, + "writable": { + "type": "boolean", + "description": "Whether the signer account was writable in the Solana transaction message." + } + }, + "required": ["address", "writable"] + }, + "SolanaConfig": { + "type": "object", + "properties": { + "rentPrefundEnabled": { + "type": "boolean", + "x-nullable": true, + "description": "Whether Solana rent prefunding is enabled for the organization. When omitted, the existing rent-prefund state is left unchanged." + } + } + }, + "SolanaFailureDetails": { + "type": "object", + "properties": { + "source": { + "type": "string", + "description": "Where the Solana failure occurred, such as simulation or preflight." + }, + "rpcCode": { + "type": "integer", + "format": "int32", + "x-nullable": true, + "description": "The Solana JSON-RPC error code, if available." + }, + "rpcMessage": { + "type": "string", + "x-nullable": true, + "description": "The Solana JSON-RPC error message, if available." + }, + "transactionErrorJson": { + "type": "string", + "x-nullable": true, + "description": "The raw Solana transaction error object serialized as JSON, if available." + }, + "logs": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Program logs returned by Solana simulation or preflight, if available." + }, + "unitsConsumed": { + "type": "string", + "format": "uint64", + "x-nullable": true, + "description": "Compute units consumed during simulation or preflight, if available." + }, + "innerInstructionsJson": { + "type": "string", + "x-nullable": true, + "description": "The raw Solana inner instructions payload serialized as JSON, if available." + } + } + }, + "SolanaSendTransactionStatus": { + "type": "object", + "properties": { + "signature": { + "type": "string", + "x-nullable": true, + "description": "The Solana transaction signature, if available." + } + } + }, + "SparkClaimLeaf": { + "type": "object", + "properties": { + "leafId": { + "type": "string", + "description": "Leaf identifier (UUID)." + }, + "ciphertext": { + "type": "string", + "description": "ECIES ciphertext (hex-encoded) containing the inbound transfer secret. Decrypted inside the enclave using the wallet's Identity key." + }, + "senderSignature": { + "type": "string", + "description": "Hex-encoded 64-byte compact ECDSA signature binding (leaf_id, transfer_id, ciphertext) to the sender's identity key. Verified inside the enclave before decryption." + } + }, + "required": ["leafId", "ciphertext", "senderSignature"] + }, + "SparkClaimPackage": { + "type": "object", + "properties": { + "leaves": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/SparkClaimLeaf" + }, + "description": "Leaves being claimed." + }, + "threshold": { + "type": "integer", + "format": "int64", + "description": "Shamir threshold for reconstructing the per-leaf claim secret." + }, + "operatorRecipients": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/SparkOperatorRecipient" + }, + "description": "Operators that will receive Shamir shares." + }, + "transferId": { + "type": "string", + "description": "Spark transfer identifier (UUID). Used together with each leaf's sender_signature to verify the sender bound this ciphertext to this transfer." + }, + "senderIdentityPublicKey": { + "type": "string", + "description": "Sender's compressed secp256k1 identity public key (hex-encoded, 33 bytes). Used to verify the per-leaf sender_signature fields." + } + }, + "required": [ + "leaves", + "threshold", + "operatorRecipients", + "transferId", + "senderIdentityPublicKey" + ] + }, + "SparkClaimTransferIntent": { + "type": "object", + "properties": { + "signWith": { + "type": "string", + "description": "A Spark wallet account address identifying the wallet." + }, + "claim": { + "$ref": "#/definitions/SparkClaimPackage", + "description": "Claim package parameters." + } + }, + "required": ["signWith", "claim"] + }, + "SparkClaimTransferRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_SPARK_CLAIM_TRANSFER"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/SparkClaimTransferIntent" + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "SparkClaimTransferResult": { + "type": "object", + "properties": { + "operatorPackages": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/SparkEncryptedOperatorPackage" + }, + "description": "Per-operator ECIES-encrypted packages." + }, + "newLeafPublicKeys": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/SparkLeafPublicKey" + }, + "description": "Newly-derived SigningLeaf public keys, one per leaf, in input order." + } + }, + "required": ["operatorPackages", "newLeafPublicKeys"] + }, + "SparkDepositDerivation": { + "type": "object" + }, + "SparkEncryptedOperatorPackage": { + "type": "object", + "properties": { + "operatorId": { + "type": "string", + "description": "Spark operator identifier (UUID)." + }, + "encryptedPackage": { + "type": "string", + "description": "ECIES ciphertext (hex-encoded) opaque to Turnkey after emission." + } + }, + "required": ["operatorId", "encryptedPackage"] + }, + "SparkFrostCommitment": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "FROST participant identifier, hex-encoded (32-byte scalar)." + }, + "hiding": { + "type": "string", + "description": "Hiding commitment D, hex-encoded compressed secp256k1 point." + }, + "binding": { + "type": "string", + "description": "Binding commitment E, hex-encoded compressed secp256k1 point." + } + }, + "required": ["id", "hiding", "binding"] + }, + "SparkHtlcPreimageDerivation": { + "type": "object" + }, + "SparkIdentityDerivation": { + "type": "object" + }, + "SparkKeyDerivation": { + "type": "object", + "properties": { + "identity": { + "$ref": "#/definitions/SparkIdentityDerivation", + "description": "Spark identity key derivation." + }, + "signingLeaf": { + "$ref": "#/definitions/SparkSigningLeafDerivation", + "description": "Spark signing leaf key derivation, identified by leaf ID." + }, + "deposit": { + "$ref": "#/definitions/SparkDepositDerivation", + "description": "Spark deposit key derivation." + }, + "staticDeposit": { + "$ref": "#/definitions/SparkStaticDepositDerivation", + "description": "Spark static deposit key derivation, identified by index." + }, + "htlcPreimage": { + "$ref": "#/definitions/SparkHtlcPreimageDerivation", + "description": "Spark HTLC preimage key derivation." + } + } + }, + "SparkLeafPublicKey": { + "type": "object", + "properties": { + "leafId": { + "type": "string", + "description": "The Spark leaf_id this public key was derived for." + }, + "publicKey": { + "type": "string", + "description": "Hex-encoded compressed secp256k1 point (33 bytes) for the SigningLeaf derivation at leaf_id." + } + }, + "required": ["leafId", "publicKey"] + }, + "SparkLightningReceivePackage": { + "type": "object", + "properties": { + "threshold": { + "type": "integer", + "format": "int64", + "description": "Feldman VSS threshold for reconstructing the preimage." + }, + "operatorRecipients": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/SparkOperatorRecipient" + }, + "description": "Operators that will receive Feldman shares of the preimage. Order must match the operators' numeric IDs in the Spark operator config - share index is the 1-based position in this list." + } + }, + "required": ["threshold", "operatorRecipients"] + }, + "SparkOperatorRecipient": { + "type": "object", + "properties": { + "operatorId": { + "type": "string", + "description": "Spark operator identifier (UUID)." + }, + "encryptionPublicKey": { + "type": "string", + "description": "Operator's ECIES encryption pubkey (hex-encoded compressed secp256k1 point)." + } + }, + "required": ["operatorId", "encryptionPublicKey"] + }, + "SparkPartialSignature": { + "type": "object", + "properties": { + "signatureShare": { + "type": "string", + "description": "Hex-encoded FROST partial signature." + }, + "hiding": { + "type": "string", + "description": "Turnkey's hiding commitment D (hex-encoded compressed secp256k1 point). Forward to the Spark Operator." + }, + "binding": { + "type": "string", + "description": "Turnkey's binding commitment E (hex-encoded compressed secp256k1 point). Forward to the Spark Operator." + } + }, + "required": ["signatureShare", "hiding", "binding"] + }, + "SparkPrepareLightningReceiveIntent": { + "type": "object", + "properties": { + "signWith": { + "type": "string", + "description": "A Spark wallet account address identifying the wallet." + }, + "lightningReceive": { + "$ref": "#/definitions/SparkLightningReceivePackage", + "description": "Lightning receive package parameters: threshold and operator recipients." + } + }, + "required": ["signWith", "lightningReceive"] + }, + "SparkPrepareLightningReceiveRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_SPARK_PREPARE_LIGHTNING_RECEIVE"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/SparkPrepareLightningReceiveIntent" + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "SparkPrepareLightningReceiveResult": { + "type": "object", + "properties": { + "operatorPackages": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/SparkEncryptedOperatorPackage" + }, + "description": "Per-operator ECIES-encrypted Feldman share packages." + }, + "paymentHash": { + "type": "string", + "description": "Hex-encoded SHA256(preimage). Forward to the Lightning node." + } + }, + "required": ["operatorPackages", "paymentHash"] + }, + "SparkPrepareTransferIntent": { + "type": "object", + "properties": { + "signWith": { + "type": "string", + "description": "A Spark wallet account address identifying the wallet." + }, + "transfer": { + "$ref": "#/definitions/SparkTransferPackage", + "description": "Transfer package parameters for HD key tweak splitting." + } + }, + "required": ["signWith", "transfer"] + }, + "SparkPrepareTransferRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_SPARK_PREPARE_TRANSFER"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/SparkPrepareTransferIntent" + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "SparkPrepareTransferResult": { + "type": "object", + "properties": { + "operatorPackages": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/SparkEncryptedOperatorPackage" + }, + "description": "Per-operator ECIES-encrypted packages." + }, + "transferUserSignature": { + "type": "string", + "description": "Hex-encoded ECDSA-DER signature of the TransferPackage signing payload, signed with the wallet's IDENTITY key." + }, + "newLeafPublicKeys": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/SparkLeafPublicKey" + }, + "description": "Newly-derived SigningLeaf public keys, one per leaf, in input order." + } + }, + "required": [ + "operatorPackages", + "transferUserSignature", + "newLeafPublicKeys" + ] + }, + "SparkSignFrostIntent": { + "type": "object", + "properties": { + "signWith": { + "type": "string", + "description": "A Spark wallet account address identifying the wallet to sign with." + }, + "signatures": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/SparkSignatureRequest" + }, + "description": "Batched sign requests. Each produces a partial signature plus Turnkey's public commitments." + } + }, + "required": ["signWith", "signatures"] + }, + "SparkSignFrostRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_SPARK_SIGN_FROST"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/SparkSignFrostIntent" + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "SparkSignFrostResult": { + "type": "object", + "properties": { + "signatures": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/SparkPartialSignature" + }, + "description": "Partial signatures plus Turnkey commitments, one per request, in order." + } + }, + "required": ["signatures"] + }, + "SparkSignatureRequest": { + "type": "object", + "properties": { + "derivation": { + "$ref": "#/definitions/SparkKeyDerivation", + "description": "Which key to sign with." + }, + "message": { + "type": "string", + "description": "Hex-encoded 32-byte sighash to sign." + }, + "verifyingKey": { + "type": "string", + "description": "Aggregate group verifying key (hex-encoded compressed secp256k1 point), computed as P_ops + P_user. Bound into the nonce HMAC." + }, + "operatorCommitments": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/SparkFrostCommitment" + }, + "description": "Commitments for every non-Turnkey participant. MUST NOT include an entry under Turnkey's identifier. Bound into the nonce HMAC." + }, + "adaptorPublicKey": { + "type": "string", + "x-nullable": true, + "description": "Optional adaptor point T (hex-encoded 33-byte compressed secp256k1 pubkey). When set, Turnkey produces a Schnorr adaptor pre-signature with the FROST challenge bound to `R+T` (where `R` is the aggregate group nonce commitment from FROST). The party holding the discrete log `t` completes the pre-sig to a valid BIP-340 signature by adding `t` (or `-t`, for parity) to the signature scalar `s`. This is primarily used by Spark leaves-swap and other adaptor-bound flows; absent or empty leads to plain FROST signing (the typical case)." + } + }, + "required": [ + "derivation", + "message", + "verifyingKey", + "operatorCommitments" + ] + }, + "SparkSigningLeafDerivation": { + "type": "object", + "properties": { + "leafId": { + "type": "string", + "description": "Unique identifier for the Spark signing leaf." + } + }, + "required": ["leafId"] + }, + "SparkStaticDepositDerivation": { + "type": "object", + "properties": { + "index": { + "type": "integer", + "format": "int64", + "description": "Index used to derive the static deposit key." + } + }, + "required": ["index"] + }, + "SparkTransferLeaf": { + "type": "object", + "properties": { + "leafId": { + "type": "string", + "description": "Leaf identifier (UUID)." + }, + "oldLeafDerivation": { + "$ref": "#/definitions/SparkKeyDerivation", + "description": "Derivation for the existing (pre-transfer) leaf key. Always a SigningLeaf derivation." + }, + "newLeafDerivation": { + "$ref": "#/definitions/SparkKeyDerivation", + "description": "Derivation for the new (post-transfer) leaf key. Always a SigningLeaf derivation. The enclave ECIES-encrypts this private key to receiver_public_key as the per-leaf secret_cipher; HD-derived rather than random so the sender can re-derive on retry (Turnkey's enclave is stateless)." + }, + "refundSignature": { + "type": "string", + "x-nullable": true, + "description": "Client-produced CPFP refund signature (hex-encoded), passed through verbatim into the per-operator SendLeafKeyTweak. Empty omits the field from the operator package." + }, + "directRefundSignature": { + "type": "string", + "x-nullable": true, + "description": "Client-produced direct refund signature (hex-encoded). Passed through verbatim." + }, + "directFromCpfpRefundSignature": { + "type": "string", + "x-nullable": true, + "description": "Client-produced direct-from-CPFP refund signature (hex-encoded). Passed through verbatim." + } + }, + "required": ["leafId", "oldLeafDerivation", "newLeafDerivation"] + }, + "SparkTransferPackage": { + "type": "object", + "properties": { + "transferId": { + "type": "string", + "description": "Spark transfer identifier (UUID)." + }, + "leaves": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/SparkTransferLeaf" + }, + "description": "Leaves being transferred." + }, + "threshold": { + "type": "integer", + "format": "int64", + "description": "Feldman VSS threshold for reconstructing the per-leaf tweak scalar." + }, + "operatorRecipients": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/SparkOperatorRecipient" + }, + "description": "Operators that will receive Feldman shares of the per-leaf tweak. Order must match the operators' numeric IDs in the Spark operator config - share index is the 1-based position in this list." + }, + "receiverPublicKey": { + "type": "string", + "description": "Recipient's identity pubkey (hex-encoded compressed secp256k1 point). Each leaf's new_priv is ECIES-encrypted to this key and embedded in the per-operator package for claim-time delivery." + } + }, + "required": [ + "transferId", + "leaves", + "threshold", + "operatorRecipients", + "receiverPublicKey" + ] + }, + "StampLoginIntent": { + "type": "object", + "properties": { + "publicKey": { + "type": "string", + "description": "Client-side public key generated by the user, which will be conditionally added to org data based on the passkey stamp associated with this request" + }, + "expirationSeconds": { + "type": "string", + "x-nullable": true, + "description": "Expiration window (in seconds) indicating how long the Session is valid for. If not provided, a default of 15 minutes will be used." + }, + "invalidateExisting": { + "type": "boolean", + "x-nullable": true, + "description": "Invalidate all other previously generated Login API keys" + }, + "sessionProfileId": { + "type": "string", + "x-nullable": true, + "description": "Optional session profile ID to specify which Session Profile to use for this login. If not provided, the default read/write session will be used." + } + }, + "required": ["publicKey"] + }, + "StampLoginRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_STAMP_LOGIN"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/StampLoginIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "StampLoginResult": { + "type": "object", + "properties": { + "session": { + "type": "string", + "description": "Signed JWT containing an expiry, public key, session type, user id, and organization id" + } + }, + "required": ["session"] + }, + "Status": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/Any" + } + } + } + }, + "SwapError": { + "type": "object", + "properties": { + "reason": { + "type": "string", + "description": "Stable machine-readable failure reason. One of ORIGIN_TRANSACTION_FAILED or PROVIDER_FILL_FAILED." + }, + "message": { + "type": "string", + "description": "Human-readable description of the swap failure." + }, + "originTxError": { + "$ref": "#/definitions/TxError", + "x-nullable": true, + "description": "Origin-chain transaction failure details, present when reason is ORIGIN_TRANSACTION_FAILED and details are available." + } + }, + "required": ["reason", "message"] + }, + "SwapQuote": { + "type": "object", + "properties": { + "quoteId": { + "type": "string", + "description": "Identifier for this provider quote. Pass this value to execute_swap_v2 to bind execution to this exact quote. The signer is derived from the quote; clients do not resupply sign_with on execute." + }, + "provider": { + "type": "string", + "description": "Swap provider that produced this quote." + }, + "outputAmount": { + "type": "string", + "description": "Estimated base-unit amount of the output asset." + }, + "minOutputAmount": { + "type": "string", + "description": "Minimum acceptable base-unit amount of the output asset after slippage." + }, + "expiresAt": { + "type": "string", + "description": "Quote expiration as a millisecond epoch string." + }, + "slippageBps": { + "type": "string", + "x-nullable": true, + "description": "Provider-neutral maximum allowed slippage in basis points, echoed from the quote request when set." + }, + "clientFeeBps": { + "type": "string", + "description": "Client fee in basis points applied for this pair. Informational only; already reflected in output_amount and min_output_amount." + }, + "estimatedTimeSeconds": { + "type": "string", + "x-nullable": true, + "description": "Provider-estimated completion time in seconds, when available." + } + }, + "required": [ + "quoteId", + "provider", + "outputAmount", + "minOutputAmount", + "expiresAt", + "clientFeeBps" + ] + }, + "SwapRefund": { + "type": "object", + "properties": { + "asset": { + "type": "string", + "description": "CAIP-19 asset returned to the user after a failed swap." + }, + "amount": { + "type": "string", + "description": "Base-unit amount of the refunded asset." + }, + "txHash": { + "type": "string", + "x-nullable": true, + "description": "Transaction that delivered the refunded funds, when applicable." + } + }, + "required": ["asset", "amount"] + }, + "TagType": { + "type": "string", + "enum": ["TAG_TYPE_USER", "TAG_TYPE_PRIVATE_KEY"] + }, + "TokenUsage": { + "type": "object", + "properties": { + "type": { + "$ref": "#/definitions/UsageType", + "description": "Type of token usage" + }, + "tokenId": { + "type": "string", + "description": "Unique identifier for the verification token" + }, + "signup": { + "$ref": "#/definitions/SignupUsage" + }, + "login": { + "$ref": "#/definitions/LoginUsage" + }, + "signupV2": { + "$ref": "#/definitions/SignupUsageV2" + } + }, + "required": ["type", "tokenId"] + }, + "TransactionHistoryAsset": { + "type": "object", + "properties": { + "caip19": { + "type": "string", + "description": "The CAIP-19 asset identifier." + }, + "symbol": { + "type": "string", + "description": "The asset symbol." + }, + "name": { + "type": "string", + "description": "The asset name." + }, + "decimals": { + "type": "integer", + "format": "int32", + "description": "The number of decimals this asset uses." + } + }, + "required": ["caip19", "symbol", "name", "decimals"] + }, + "TransactionHistoryBlock": { + "type": "object", + "properties": { + "number": { + "type": "string", + "format": "int64", + "description": "Block number containing the transaction." + }, + "hash": { + "type": "string", + "description": "Block hash containing the transaction." + }, + "timestamp": { + "type": "string", + "description": "Block timestamp in RFC 3339 format." + } + }, + "required": ["number", "hash", "timestamp"] + }, + "TransactionHistoryDisplay": { + "type": "object", + "properties": { + "crypto": { + "type": "string", + "description": "Normalized crypto value for display purposes only. Do not do any arithmetic or calculations with these, as the results could be imprecise." + }, + "usd": { + "type": "string", + "description": "USD value for display purposes only. Do not do any arithmetic or calculations with these, as the results could be imprecise." + } + } + }, + "TransactionHistoryFee": { + "type": "object", + "properties": { + "amount": { + "type": "string", + "description": "Fee amount in atomic units." + }, + "caip19": { + "type": "string", + "description": "The CAIP-19 asset identifier." + } + }, + "required": ["amount", "caip19"] + }, + "TransactionHistoryTransfer": { + "type": "object", + "properties": { + "direction": { + "type": "string", + "enum": ["IN", "OUT"], + "description": "Transfer direction relative to the queried address." + }, + "asset": { + "$ref": "#/definitions/TransactionHistoryAsset", + "description": "Asset metadata for the transfer. Omitted when the asset cannot be determined." + }, + "amount": { + "type": "string", + "description": "Transfer amount in atomic units." + }, + "counterparty": { + "type": "string", + "description": "Counterparty address for the transfer." + }, + "display": { + "$ref": "#/definitions/TransactionHistoryDisplay", + "description": "Normalized transfer values for display purposes only. Do not do any arithmetic or calculations with these, as the results could be imprecise. Use the amount field instead." + } + }, + "required": ["direction", "amount", "counterparty"] + }, + "TransactionHistoryTurnkey": { + "type": "object", + "properties": { + "sponsored": { + "type": "boolean", + "description": "Whether the transaction fee was sponsored by Turnkey." + }, + "activityFingerprint": { + "type": "string", + "description": "Fingerprint of the Turnkey activity that submitted the transaction." + }, + "submittedAt": { + "type": "string", + "description": "Timestamp when Turnkey submitted the transaction, in RFC 3339 format." + } + }, + "required": ["sponsored"] + }, + "TransactionType": { + "type": "string", + "enum": [ + "TRANSACTION_TYPE_ETHEREUM", + "TRANSACTION_TYPE_SOLANA", + "TRANSACTION_TYPE_TRON", + "TRANSACTION_TYPE_BITCOIN", + "TRANSACTION_TYPE_TEMPO" + ] + }, + "TransportEncryptionSuite": { + "type": "string", + "enum": ["TRANSPORT_ENCRYPTION_SUITE_ENCLAVE_ENCRYPT_V1"] + }, + "TvcApp": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique Identifier for this TVC App." + }, + "organizationId": { + "type": "string", + "description": "Unique Identifier of the Organization for this TVC App" + }, + "name": { + "type": "string", + "description": "Name for this TVC App." + }, + "quorumPublicKey": { + "type": "string", + "description": "Public key for the Quorum Key associated with this TVC App" + }, + "manifestSet": { + "$ref": "#/definitions/TvcOperatorSet", + "description": "Manifest Set (people who can approve manifests)" + }, + "shareSet": { + "$ref": "#/definitions/TvcOperatorSet", + "description": "Share Set (people who have a share of the Quorum Key)" + }, + "enableEgress": { + "type": "boolean", + "description": "Whether or not this TVC App has network egress enabled." + }, + "createdAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + }, + "liveDeploymentId": { + "type": "string", + "x-nullable": true, + "description": "The deployment currently designated to receive traffic. Null if no deployment for this app is deployed." + }, + "publicDomain": { + "type": "string", + "description": "The public domain for ingress to this TVC App (in the format \"app-\u003cID\u003e.turnkey.cloud\")." + }, + "enableDebugModeDeployments": { + "type": "boolean", + "description": "Whether this app permits debug-mode deployments. Set at app creation via CreateTvcAppIntent.enable_debug_mode_deployments and never updated thereafter. Debug-mode deployments expose logs and emit zero'd attestation PCRs, so remote attestation cannot succeed. The app's quorum key is therefore considered permanently insecure once enabled — a new app with a fresh quorum key must be created to return to a secure posture." + } + }, + "required": [ + "id", + "organizationId", + "name", + "quorumPublicKey", + "manifestSet", + "shareSet", + "enableEgress", + "createdAt", + "updatedAt", + "publicDomain", + "enableDebugModeDeployments" + ] + }, + "TvcContainerSpec": { + "type": "object", + "properties": { + "containerUrl": { + "type": "string", + "description": "The URL for this container image." + }, + "path": { + "type": "string", + "description": "The path (in-container) to the executable binary." + }, + "args": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The arguments to pass to the executable." + }, + "hasPullSecret": { + "type": "boolean", + "description": "Whether or not this container requires a pull secret to access." + }, + "healthCheckType": { + "$ref": "#/definitions/TvcHealthCheckType", + "description": "The type of health check to perform against this executable." + }, + "healthCheckPort": { + "type": "integer", + "format": "int64", + "description": "The port to use for health checks against this executable." + }, + "publicIngressPort": { + "type": "integer", + "format": "int64", + "description": "The port to use for public ingress to this executable." + } + }, + "required": [ + "containerUrl", + "path", + "args", + "hasPullSecret", + "healthCheckType", + "healthCheckPort", + "publicIngressPort" + ] + }, + "TvcDeployment": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique Identifier for this TVC Deployment." + }, + "organizationId": { + "type": "string", + "description": "Unique Identifier of the Organization for this TVC Deployment" + }, + "appId": { + "type": "string", + "description": "Unique Identifier of the TVC App for this deployment" + }, + "manifestSet": { + "$ref": "#/definitions/TvcOperatorSet", + "description": "Set of TVC operators who can approve this deployment" + }, + "shareSet": { + "$ref": "#/definitions/TvcOperatorSet", + "description": "Set of TVC operators who have a share of the Quorum Key" + }, + "manifest": { + "$ref": "#/definitions/TvcManifest", + "description": "The manifest used for this deployment" + }, + "manifestApprovals": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/TvcOperatorApproval" + }, + "description": "List of operator approvals for this manifest" + }, + "qosVersion": { + "type": "string", + "description": "QOS Version used for this deployment" + }, + "pivotContainer": { + "$ref": "#/definitions/TvcContainerSpec", + "description": "The pivot container spec for this deployment" + }, + "createdAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + }, + "delete": { + "type": "boolean", + "description": "Whether or not the user wants this deployment deleted from the cluster." + }, + "debugMode": { + "type": "boolean", + "description": "Whether this deployment is running in debug mode. Debug-mode deployments expose enclave logs and cannot be remotely attested." + } + }, + "required": [ + "id", + "organizationId", + "appId", + "manifestSet", + "shareSet", + "manifest", + "manifestApprovals", + "qosVersion", + "pivotContainer", + "createdAt", + "updatedAt", + "delete", + "debugMode" + ] + }, + "TvcDeploymentDebugLogEntry": { + "type": "object", + "properties": { + "line": { + "$ref": "#/definitions/LogLine", + "description": "Application log line with its platform timestamp." + }, + "replicaLabel": { + "type": "string", + "description": "Public replica label that produced this log line, for example 'replica 2/3'." + } + }, + "required": ["line", "replicaLabel"] + }, + "TvcHealthCheckType": { + "type": "string", + "enum": ["TVC_HEALTH_CHECK_TYPE_HTTP", "TVC_HEALTH_CHECK_TYPE_GRPC"] + }, + "TvcManifest": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique Identifier for this TVC Manifest." + }, + "manifest": { + "type": "string", + "format": "byte", + "description": "The manifest content (raw UTF-8 JSON bytes)" + }, + "createdAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + } + }, + "required": ["id", "manifest", "createdAt", "updatedAt"] + }, + "TvcManifestApproval": { + "type": "object", + "properties": { + "operatorId": { + "type": "string", + "description": "Unique identifier of the operator providing this approval" + }, + "signature": { + "type": "string", + "description": "Signature from the operator approving the manifest" + } + }, + "required": ["operatorId", "signature"] + }, + "TvcOperator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique Identifier for this TVC Operator." + }, + "name": { + "type": "string", + "description": "Name of this TVC Operator." + }, + "publicKey": { + "type": "string", + "description": "Public key for this TVC Operator." + }, + "createdAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + } + }, + "required": ["id", "name", "publicKey", "createdAt", "updatedAt"] + }, + "TvcOperatorApproval": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique ID for this approval" + }, + "manifestId": { + "type": "string", + "description": "Unique Identifier of the TVC Manifest being approved" + }, + "operator": { + "$ref": "#/definitions/TvcOperator", + "description": "The TVC Operator who made this approval" + }, + "approval": { + "type": "string", + "format": "byte", + "description": "Signature of the operator over the deployment manifest" + }, + "createdAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + } + }, + "required": [ + "id", + "manifestId", + "operator", + "approval", + "createdAt", + "updatedAt" + ] + }, + "TvcOperatorParams": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The name for this new operator" + }, + "publicKey": { + "type": "string", + "description": "Public key for this operator" + } + }, + "required": ["name", "publicKey"] + }, + "TvcOperatorSet": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique Identifier for this TVC Operator Set." + }, + "name": { + "type": "string", + "description": "Name of this TVC Operator Set." + }, + "organizationId": { + "type": "string", + "description": "Unique Identifier of the Organization for this TVC Operator Set" + }, + "operators": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/TvcOperator" + }, + "description": "List of TVC Operators in this set" + }, + "threshold": { + "type": "integer", + "format": "int64", + "description": "Threshold number of operators required for quorum." + }, + "createdAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + } + }, + "required": [ + "id", + "name", + "organizationId", + "operators", + "threshold", + "createdAt", + "updatedAt" + ] + }, + "TvcOperatorSetParams": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Short description for this new operator set" + }, + "newOperators": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/TvcOperatorParams" + }, + "description": "Operators to create as part of this new operator set" + }, + "existingOperatorIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Existing operators to use as part of this new operator set" + }, + "threshold": { + "type": "integer", + "format": "int64", + "description": "The threshold of operators needed to reach consensus in this new Operator Set" + } + }, + "required": ["name", "threshold"] + }, + "TxError": { + "type": "object", + "properties": { + "message": { + "type": "string", + "description": "Human-readable error message describing what went wrong." + }, + "revertChain": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/RevertChainEntry" + }, + "description": "Chain of revert errors from nested contract calls, ordered from outermost to innermost." + }, + "solana": { + "$ref": "#/definitions/SolanaFailureDetails", + "x-nullable": true, + "description": "Solana-specific failure details for simulation or preflight errors, if available." + }, + "eth": { + "$ref": "#/definitions/EthFailureDetails", + "x-nullable": true, + "description": "Ethereum-specific failure details, if available." + } + } + }, + "UnknownRevertError": { + "type": "object", + "properties": { + "selector": { + "type": "string", + "x-nullable": true, + "description": "The 4-byte error selector, if available." + }, + "data": { + "type": "string", + "x-nullable": true, + "description": "The raw error data, hex-encoded." + } + } + }, + "UpdateAllowedOriginsIntent": { + "type": "object", + "properties": { + "allowedOrigins": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Additional origins requests are allowed from besides Turnkey origins" + } + }, + "required": ["allowedOrigins"] + }, + "UpdateAllowedOriginsResult": { + "type": "object" + }, + "UpdateAuthProxyConfigIntent": { + "type": "object", + "properties": { + "allowedOrigins": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Updated list of allowed origins for CORS." + }, + "allowedAuthMethods": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Updated list of allowed proxy authentication methods." + }, + "sendFromEmailAddress": { + "type": "string", + "x-nullable": true, + "description": "Custom 'from' address for auth-related emails." + }, + "replyToEmailAddress": { + "type": "string", + "x-nullable": true, + "description": "Custom reply-to address for auth-related emails." + }, + "emailAuthTemplateId": { + "type": "string", + "x-nullable": true, + "description": "Template ID for email-auth messages." + }, + "otpTemplateId": { + "type": "string", + "x-nullable": true, + "description": "Template ID for OTP SMS messages." + }, + "emailCustomizationParams": { + "$ref": "#/definitions/EmailCustomizationParams", + "x-nullable": true, + "description": "Optional parameters for customizing emails. If not provided, the default email will be used." + }, + "smsCustomizationParams": { + "$ref": "#/definitions/SmsCustomizationParams", + "x-nullable": true, + "description": "Overrides for auth-related SMS content." + }, + "walletKitSettings": { + "$ref": "#/definitions/WalletKitSettingsParams", + "x-nullable": true, + "description": "Overrides for react wallet kit related settings." + }, + "otpExpirationSeconds": { + "type": "integer", + "format": "int32", + "x-nullable": true, + "description": "OTP code lifetime in seconds." + }, + "verificationTokenExpirationSeconds": { + "type": "integer", + "format": "int32", + "x-nullable": true, + "description": "Verification-token lifetime in seconds." + }, + "sessionExpirationSeconds": { + "type": "integer", + "format": "int32", + "x-nullable": true, + "description": "Session lifetime in seconds." + }, + "otpAlphanumeric": { + "type": "boolean", + "x-nullable": true, + "description": "Enable alphanumeric OTP codes." + }, + "otpLength": { + "type": "integer", + "format": "int32", + "x-nullable": true, + "description": "Desired OTP code length (6–9)." + }, + "sendFromEmailSenderName": { + "type": "string", + "x-nullable": true, + "description": "Custom 'from' email sender for auth-related emails." + }, + "verificationTokenRequiredForGetAccountPii": { + "type": "boolean", + "x-nullable": true, + "description": "Verification token required for get account with PII (email/phone number). Default false." + }, + "socialLinkingClientIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Whitelisted OAuth client IDs for social account linking. When a user authenticates via a social provider with an email matching an existing account, the accounts will be linked if the client ID is in this list and the issuer is considered a trusted provider." + }, + "captchaEnabled": { + "type": "boolean", + "x-nullable": true, + "description": "Whether captcha verification is required on sign up \u0026 otp init." + } + } + }, + "UpdateAuthProxyConfigResult": { + "type": "object", + "properties": { + "configId": { + "type": "string", + "description": "Unique identifier for a given User. (representing the turnkey signer user id)" + } + } + }, + "UpdateFiatOnRampCredentialIntent": { + "type": "object", + "properties": { + "fiatOnrampCredentialId": { + "type": "string", + "description": "The ID of the fiat on-ramp credential to update" + }, + "onrampProvider": { + "$ref": "#/definitions/FiatOnRampProvider", + "description": "The fiat on-ramp provider" + }, + "projectId": { + "type": "string", + "x-nullable": true, + "description": "Project ID for the on-ramp provider. Some providers, like Coinbase, require this additional identifier." + }, + "publishableApiKey": { + "type": "string", + "description": "Publishable API key for the on-ramp provider" + }, + "encryptedSecretApiKey": { + "type": "string", + "description": "Secret API key for the on-ramp provider encrypted to our on-ramp encryption public key" + }, + "encryptedPrivateApiKey": { + "type": "string", + "x-nullable": true, + "description": "Private API key for the on-ramp provider encrypted to our on-ramp encryption public key. Some providers, like Coinbase, require this additional key." + } + }, + "required": [ + "fiatOnrampCredentialId", + "onrampProvider", + "publishableApiKey", + "encryptedSecretApiKey" + ] + }, + "UpdateFiatOnRampCredentialRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_UPDATE_FIAT_ON_RAMP_CREDENTIAL"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/UpdateFiatOnRampCredentialIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "UpdateFiatOnRampCredentialResult": { + "type": "object", + "properties": { + "fiatOnRampCredentialId": { + "type": "string", + "description": "Unique identifier of the Fiat On-Ramp credential that was updated" + } + }, + "required": ["fiatOnRampCredentialId"] + }, + "UpdateMfaPolicyIntent": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "The ID of the User to update the MFA Policy for." + }, + "mfaPolicyId": { + "type": "string", + "description": "Unique identifier for a given MFA Policy." + }, + "mfaPolicyName": { + "type": "string", + "x-nullable": true, + "description": "Human-readable name for a Policy." + }, + "condition": { + "type": "string", + "x-nullable": true, + "description": "A condition expression that evaluates to true or false, determining when this MFA policy applies." + }, + "requiredAuthenticationMethods": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/RequiredAuthenticationMethodParams" + }, + "description": "An ordered list of authentication requirements. Each requirement must be satisfied sequentially to complete MFA." + }, + "order": { + "type": "integer", + "format": "int64", + "x-nullable": true, + "description": "The order in which this MFA policy is evaluated, starting from 0, relative to other MFA policies. Lower order values are evaluated first." + }, + "notes": { + "type": "string", + "x-nullable": true, + "description": "Notes for an MFA Policy." + } + }, + "required": ["userId", "mfaPolicyId"] + }, + "UpdateMfaPolicyRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_UPDATE_MFA_POLICY"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/UpdateMfaPolicyIntent" + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "UpdateMfaPolicyResult": { + "type": "object", + "properties": { + "mfaPolicyId": { + "type": "string", + "description": "Unique identifier for a given MFA Policy." + } + }, + "required": ["mfaPolicyId"] + }, + "UpdateOauth2CredentialIntent": { + "type": "object", + "properties": { + "oauth2CredentialId": { + "type": "string", + "description": "The ID of the OAuth 2.0 credential to update" + }, + "provider": { + "$ref": "#/definitions/Oauth2Provider", + "description": "The OAuth 2.0 provider" + }, + "clientId": { + "type": "string", + "description": "The Client ID issued by the OAuth 2.0 provider" + }, + "encryptedClientSecret": { + "type": "string", + "description": "The client secret issued by the OAuth 2.0 provider encrypted to the TLS Fetcher quorum key" + } + }, + "required": [ + "oauth2CredentialId", + "provider", + "clientId", + "encryptedClientSecret" + ] + }, + "UpdateOauth2CredentialRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_UPDATE_OAUTH2_CREDENTIAL"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/UpdateOauth2CredentialIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "UpdateOauth2CredentialResult": { + "type": "object", + "properties": { + "oauth2CredentialId": { + "type": "string", + "description": "Unique identifier of the OAuth 2.0 credential that was updated" + } + }, + "required": ["oauth2CredentialId"] + }, + "UpdateOrganizationNameIntent": { + "type": "object", + "properties": { + "organizationName": { + "type": "string", + "description": "New name for the Organization." + } + }, + "required": ["organizationName"] + }, + "UpdateOrganizationNameRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_UPDATE_ORGANIZATION_NAME"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/UpdateOrganizationNameIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "UpdateOrganizationNameResult": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for the Organization." + }, + "organizationName": { + "type": "string", + "description": "The updated organization name." + } + }, + "required": ["organizationId", "organizationName"] + }, + "UpdatePolicyIntent": { + "type": "object", + "properties": { + "policyId": { + "type": "string", + "description": "Unique identifier for a given Policy." + }, + "policyName": { + "type": "string", + "x-nullable": true, + "description": "Human-readable name for a Policy." + }, + "policyEffect": { + "$ref": "#/definitions/Effect", + "x-nullable": true, + "description": "The instruction to DENY or ALLOW an activity (optional)." + }, + "policyCondition": { + "type": "string", + "x-nullable": true, + "description": "The condition expression that triggers the Effect (optional)." + }, + "policyConsensus": { + "type": "string", + "x-nullable": true, + "description": "The consensus expression that triggers the Effect (optional)." + }, + "policyNotes": { + "type": "string", + "x-nullable": true, + "description": "Accompanying notes for a Policy (optional)." + } + }, + "required": ["policyId"] + }, + "UpdatePolicyIntentV2": { + "type": "object", + "properties": { + "policyId": { + "type": "string", + "description": "Unique identifier for a given Policy." + }, + "policyName": { + "type": "string", + "x-nullable": true, + "description": "Human-readable name for a Policy." + }, + "policyEffect": { + "$ref": "#/definitions/Effect", + "x-nullable": true, + "description": "The instruction to DENY or ALLOW an activity (optional)." + }, + "policyCondition": { + "type": "string", + "x-nullable": true, + "description": "The condition expression that triggers the Effect (optional)." + }, + "policyConsensus": { + "type": "string", + "x-nullable": true, + "description": "The consensus expression that triggers the Effect (optional)." + }, + "policyNotes": { + "type": "string", + "x-nullable": true, + "description": "Accompanying notes for a Policy (optional)." + }, + "time": { + "type": "string", + "x-nullable": true, + "description": "The time expression that triggers the Effect (optional)." + } + }, + "required": ["policyId"] + }, + "UpdatePolicyRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_UPDATE_POLICY_V2"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/UpdatePolicyIntentV2" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "UpdatePolicyResult": { + "type": "object", + "properties": { + "policyId": { + "type": "string", + "description": "Unique identifier for a given Policy." + } + }, + "required": ["policyId"] + }, + "UpdatePolicyResultV2": { + "type": "object", + "properties": { + "policyId": { + "type": "string", + "description": "Unique identifier for a given Policy." + } + }, + "required": ["policyId"] + }, + "UpdatePrivateKeyTagIntent": { + "type": "object", + "properties": { + "privateKeyTagId": { + "type": "string", + "description": "Unique identifier for a given Private Key Tag." + }, + "newPrivateKeyTagName": { + "type": "string", + "x-nullable": true, + "description": "The new, human-readable name for the tag with the given ID." + }, + "addPrivateKeyIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of Private Keys IDs to add this tag to." + }, + "removePrivateKeyIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of Private Key IDs to remove this tag from." + } + }, + "required": ["privateKeyTagId", "addPrivateKeyIds", "removePrivateKeyIds"] + }, + "UpdatePrivateKeyTagRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_UPDATE_PRIVATE_KEY_TAG"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/UpdatePrivateKeyTagIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "UpdatePrivateKeyTagResult": { + "type": "object", + "properties": { + "privateKeyTagId": { + "type": "string", + "description": "Unique identifier for a given Private Key Tag." + } + }, + "required": ["privateKeyTagId"] + }, + "UpdateRootQuorumIntent": { + "type": "object", + "properties": { + "threshold": { + "type": "integer", + "format": "int32", + "description": "The threshold of unique approvals to reach quorum." + }, + "userIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The unique identifiers of users who comprise the quorum set." + } + }, + "required": ["threshold", "userIds"] + }, + "UpdateRootQuorumRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_UPDATE_ROOT_QUORUM"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/UpdateRootQuorumIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "UpdateRootQuorumResult": { + "type": "object" + }, + "UpdateTvcAppLiveDeploymentIntent": { + "type": "object", + "properties": { + "deploymentId": { + "type": "string", + "description": "The unique identifier of the TVC deployment to set as live for the app." + } + }, + "required": ["deploymentId"] + }, + "UpdateTvcAppLiveDeploymentRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_UPDATE_TVC_APP_LIVE_DEPLOYMENT"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/UpdateTvcAppLiveDeploymentIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "UpdateTvcAppLiveDeploymentResult": { + "type": "object" + }, + "UpdateUserEmailIntent": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "Unique identifier for a given User." + }, + "userEmail": { + "type": "string", + "description": "The user's email address. Setting this to an empty string will remove the user's email." + }, + "verificationToken": { + "type": "string", + "x-nullable": true, + "description": "Signed JWT containing a unique id, expiry, verification type, contact" + } + }, + "required": ["userId", "userEmail"] + }, + "UpdateUserEmailRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_UPDATE_USER_EMAIL"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/UpdateUserEmailIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "UpdateUserEmailResult": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "Unique identifier of the User whose email was updated." + } + }, + "required": ["userId"] + }, + "UpdateUserIntent": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "Unique identifier for a given User." + }, + "userName": { + "type": "string", + "x-nullable": true, + "description": "Human-readable name for a User." + }, + "userEmail": { + "type": "string", + "x-nullable": true, + "description": "The user's email address." + }, + "userTagIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "An updated list of User Tags to apply to this User. This field, if not needed, should be an empty array in your request body." + }, + "userPhoneNumber": { + "type": "string", + "x-nullable": true, + "description": "The user's phone number in E.164 format e.g. +13214567890" + } + }, + "required": ["userId"] + }, + "UpdateUserNameIntent": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "Unique identifier for a given User." + }, + "userName": { + "type": "string", + "description": "Human-readable name for a User." + } + }, + "required": ["userId", "userName"] + }, + "UpdateUserNameRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_UPDATE_USER_NAME"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/UpdateUserNameIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "UpdateUserNameResult": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "Unique identifier of the User whose name was updated." + } + }, + "required": ["userId"] + }, + "UpdateUserPhoneNumberIntent": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "Unique identifier for a given User." + }, + "userPhoneNumber": { + "type": "string", + "description": "The user's phone number in E.164 format e.g. +13214567890. Setting this to an empty string will remove the user's phone number." + }, + "verificationToken": { + "type": "string", + "x-nullable": true, + "description": "Signed JWT containing a unique id, expiry, verification type, contact" + } + }, + "required": ["userId", "userPhoneNumber"] + }, + "UpdateUserPhoneNumberRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_UPDATE_USER_PHONE_NUMBER"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/UpdateUserPhoneNumberIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "UpdateUserPhoneNumberResult": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "Unique identifier of the User whose phone number was updated." + } + }, + "required": ["userId"] + }, + "UpdateUserRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_UPDATE_USER"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/UpdateUserIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "UpdateUserResult": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "A User ID." + } + }, + "required": ["userId"] + }, + "UpdateUserTagIntent": { + "type": "object", + "properties": { + "userTagId": { + "type": "string", + "description": "Unique identifier for a given User Tag." + }, + "newUserTagName": { + "type": "string", + "x-nullable": true, + "description": "The new, human-readable name for the tag with the given ID." + }, + "addUserIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User IDs to add this tag to." + }, + "removeUserIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User IDs to remove this tag from." + } + }, + "required": ["userTagId", "addUserIds", "removeUserIds"] + }, + "UpdateUserTagRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_UPDATE_USER_TAG"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/UpdateUserTagIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "UpdateUserTagResult": { + "type": "object", + "properties": { + "userTagId": { + "type": "string", + "description": "Unique identifier for a given User Tag." + } + }, + "required": ["userTagId"] + }, + "UpdateWalletAccountNameIntent": { + "type": "object", + "properties": { + "walletAccountId": { + "type": "string", + "description": "Unique identifier for a given Wallet Account." + }, + "name": { + "type": "string", + "description": "Human-readable name for this Wallet Account." + } + }, + "required": ["walletAccountId", "name"] + }, + "UpdateWalletAccountNameResult": { + "type": "object", + "properties": { + "walletAccountId": { + "type": "string", + "description": "Unique identifier for a given Wallet Account." + } + }, + "required": ["walletAccountId"] + }, + "UpdateWalletIntent": { + "type": "object", + "properties": { + "walletId": { + "type": "string", + "description": "Unique identifier for a given Wallet." + }, + "walletName": { + "type": "string", + "description": "Human-readable name for a Wallet." + } + }, + "required": ["walletId"] + }, + "UpdateWalletRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_UPDATE_WALLET"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/UpdateWalletIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "UpdateWalletResult": { + "type": "object", + "properties": { + "walletId": { + "type": "string", + "description": "A Wallet ID." + } + }, + "required": ["walletId"] + }, + "UpdateWebhookEndpointIntent": { + "type": "object", + "properties": { + "endpointId": { + "type": "string", + "description": "Unique identifier of the webhook endpoint to update." + }, + "url": { + "type": "string", + "x-nullable": true, + "description": "Updated destination URL for webhook delivery." + }, + "name": { + "type": "string", + "x-nullable": true, + "description": "Updated human-readable name for this webhook endpoint." + }, + "isActive": { + "type": "boolean", + "x-nullable": true, + "description": "Whether this webhook endpoint is active." + } + }, + "required": ["endpointId"] + }, + "UpdateWebhookEndpointRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_UPDATE_WEBHOOK_ENDPOINT"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/UpdateWebhookEndpointIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "UpdateWebhookEndpointResult": { + "type": "object", + "properties": { + "endpointId": { + "type": "string", + "description": "Unique identifier of the updated webhook endpoint." + }, + "webhookEndpoint": { + "$ref": "#/definitions/WebhookEndpointData", + "description": "The updated webhook endpoint data." + } + }, + "required": ["endpointId", "webhookEndpoint"] + }, + "UpsertGasUsageConfigIntent": { + "type": "object", + "properties": { + "orgWindowLimitUsd": { + "type": "string", + "description": "Gas sponsorship USD limit for the billing organization window." + }, + "subOrgWindowLimitUsd": { + "type": "string", + "description": "Gas sponsorship USD limit for sub-organizations under the billing organization." + }, + "windowDurationMinutes": { + "type": "string", + "description": "Rolling sponsorship window duration, expressed in minutes. This value can't exceed 30 days (43200 minutes)." + }, + "enabled": { + "type": "boolean", + "x-nullable": true, + "description": "Whether gas sponsorship is enabled for the organization." + }, + "solanaConfig": { + "$ref": "#/definitions/SolanaConfig", + "description": "Optional Solana sponsorship settings. If omitted, the existing Solana sponsorship state is left unchanged." + } + }, + "required": [ + "orgWindowLimitUsd", + "subOrgWindowLimitUsd", + "windowDurationMinutes" + ] + }, + "UpsertGasUsageConfigResult": { + "type": "object", + "properties": { + "gasUsageConfigId": { + "type": "string", + "description": "Unique identifier for the gas usage configuration that was created or updated." + } + }, + "required": ["gasUsageConfigId"] + }, + "UpsertSwapConfigIntent": { + "type": "object", + "properties": { + "feeReceiverWalletAddress": { + "type": "string", + "x-nullable": true + }, + "feeBps": { + "type": "string", + "x-nullable": true, + "description": "Client fee in basis points applied to swaps; used for all pairs unless stable_fee_bps is set." + }, + "stableFeeBps": { + "type": "string", + "x-nullable": true, + "description": "Optional Enterprise-only override applied when both swap assets are stablecoins; falls back to fee_bps when unset. Non-Enterprise orgs may only set fee_bps." + } + } + }, + "UpsertSwapConfigRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_UPSERT_SWAP_CONFIG"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/UpsertSwapConfigIntent" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "UpsertSwapConfigResult": { + "type": "object", + "properties": { + "feeReceiverWalletAddress": { + "type": "string", + "x-nullable": true + }, + "feeBps": { + "type": "string", + "x-nullable": true + }, + "stableFeeBps": { + "type": "string", + "x-nullable": true + } + } + }, + "UsageType": { + "type": "string", + "enum": ["USAGE_TYPE_SIGNUP", "USAGE_TYPE_LOGIN"] + }, + "User": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "Unique identifier for a given User." + }, + "userName": { + "type": "string", + "description": "Human-readable name for a User." + }, + "userEmail": { + "type": "string", + "x-nullable": true, + "description": "The user's email address." + }, + "userPhoneNumber": { + "type": "string", + "x-nullable": true, + "description": "The user's phone number in E.164 format e.g. +13214567890" + }, + "authenticators": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/Authenticator" + }, + "description": "A list of Authenticator parameters." + }, + "apiKeys": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/ApiKey" + }, + "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." + }, + "userTags": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User Tag IDs." + }, + "oauthProviders": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/OauthProvider" + }, + "description": "A list of Oauth Providers." + }, + "createdAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + }, + "mfaPolicies": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/MfaPolicy" + }, + "description": "A list of MFA Policies that define multi-factor authentication requirements for this user." + } + }, + "required": [ + "userId", + "userName", + "authenticators", + "apiKeys", + "userTags", + "oauthProviders", + "createdAt", + "updatedAt", + "mfaPolicies" + ] + }, + "UserParams": { + "type": "object", + "properties": { + "userName": { + "type": "string", + "description": "Human-readable name for a User." + }, + "userEmail": { + "type": "string", + "x-nullable": true, + "description": "The user's email address." + }, + "accessType": { + "$ref": "#/definitions/AccessType", + "description": "The User's permissible access method(s)." + }, + "apiKeys": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/ApiKeyParams" + }, + "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." + }, + "authenticators": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/AuthenticatorParams" + }, + "description": "A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body." + }, + "userTags": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User Tag IDs. This field, if not needed, should be an empty array in your request body." + } + }, + "required": [ + "userName", + "accessType", + "apiKeys", + "authenticators", + "userTags" + ] + }, + "UserParamsV2": { + "type": "object", + "properties": { + "userName": { + "type": "string", + "description": "Human-readable name for a User." + }, + "userEmail": { + "type": "string", + "x-nullable": true, + "description": "The user's email address." + }, + "apiKeys": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/ApiKeyParams" + }, + "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." + }, + "authenticators": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/AuthenticatorParamsV2" + }, + "description": "A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body." + }, + "userTags": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User Tag IDs. This field, if not needed, should be an empty array in your request body." + } + }, + "required": ["userName", "apiKeys", "authenticators", "userTags"] + }, + "UserParamsV3": { + "type": "object", + "properties": { + "userName": { + "type": "string", + "description": "Human-readable name for a User." + }, + "userEmail": { + "type": "string", + "x-nullable": true, + "description": "The user's email address." + }, + "userPhoneNumber": { + "type": "string", + "x-nullable": true, + "description": "The user's phone number in E.164 format e.g. +13214567890" + }, + "apiKeys": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/ApiKeyParamsV2" + }, + "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." + }, + "authenticators": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/AuthenticatorParamsV2" + }, + "description": "A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body." + }, + "oauthProviders": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/OauthProviderParams" + }, + "description": "A list of Oauth providers. This field, if not needed, should be an empty array in your request body." + }, + "userTags": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User Tag IDs. This field, if not needed, should be an empty array in your request body." + } + }, + "required": [ + "userName", + "apiKeys", + "authenticators", + "oauthProviders", + "userTags" + ] + }, + "UserParamsV4": { + "type": "object", + "properties": { + "userName": { + "type": "string", + "description": "Human-readable name for a User." + }, + "userEmail": { + "type": "string", + "x-nullable": true, + "description": "The user's email address." + }, + "userPhoneNumber": { + "type": "string", + "x-nullable": true, + "description": "The user's phone number in E.164 format e.g. +13214567890" + }, + "apiKeys": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/ApiKeyParamsV2" + }, + "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." + }, + "authenticators": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/AuthenticatorParamsV2" + }, + "description": "A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body." + }, + "oauthProviders": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/OauthProviderParamsV2" + }, + "description": "A list of Oauth providers. This field, if not needed, should be an empty array in your request body." + }, + "userTags": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User Tag IDs. This field, if not needed, should be an empty array in your request body." + } + }, + "required": [ + "userName", + "apiKeys", + "authenticators", + "oauthProviders", + "userTags" + ] + }, + "ValidateTvcImageRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "pivotContainerImageUrl": { + "type": "string", + "description": "URL of the container image." + }, + "pivotContainerEncryptedPullSecret": { + "type": "string", + "x-nullable": true, + "description": "HPKE-encrypted pull secret for private images." + } + }, + "required": ["organizationId", "pivotContainerImageUrl"] + }, + "ValidateTvcImageResponse": { + "type": "object", + "properties": { + "resolvedImageDigest": { + "type": "string" + } + } + }, + "VerifyOtpIntent": { + "type": "object", + "properties": { + "otpId": { + "type": "string", + "description": "ID representing the result of an init OTP activity." + }, + "otpCode": { + "type": "string", + "description": "OTP sent out to a user's contact (email or SMS)" + }, + "expirationSeconds": { + "type": "string", + "x-nullable": true, + "description": "Expiration window (in seconds) indicating how long the verification token is valid for. If not provided, a default of 1 hour will be used. Maximum value is 86400 seconds (24 hours)" + }, + "publicKey": { + "type": "string", + "x-nullable": true, + "description": "Client-side public key generated by the user, which will be added to the JWT response and verified in subsequent requests via a client proof signature" + } + }, + "required": ["otpId", "otpCode"] + }, + "VerifyOtpIntentV2": { + "type": "object", + "properties": { + "otpId": { + "type": "string", + "description": "UUID representing an OTP flow. A new UUID is created for each init OTP activity." + }, + "encryptedOtpBundle": { + "type": "string", + "description": "Encrypted bundle containing the OTP code and a client-generated public key. Turnkey's secure enclaves will decrypt this bundle, verify the OTP code, and issue a new Verification Token. Encrypted using the target encryption key provided in the INIT_OTP activity result." + }, + "expirationSeconds": { + "type": "string", + "x-nullable": true, + "description": "Expiration window (in seconds) indicating how long the verification token is valid for. If not provided, a default of 1 hour will be used. Maximum value is 86400 seconds (24 hours)" + } + }, + "required": ["otpId", "encryptedOtpBundle"] + }, + "VerifyOtpRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": ["ACTIVITY_TYPE_VERIFY_OTP_V2"] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/definitions/VerifyOtpIntentV2" + }, + "generateAppProofs": { + "type": "boolean", + "x-nullable": true + } + }, + "required": ["type", "timestampMs", "organizationId", "parameters"] + }, + "VerifyOtpResult": { + "type": "object", + "properties": { + "verificationToken": { + "type": "string", + "description": "Signed JWT containing a unique id, expiry, verification type, contact. Verification status of a user is updated when the token is consumed (in OTP_LOGIN requests)" + } + }, + "required": ["verificationToken"] + }, + "Vote": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for a given Vote object." + }, + "userId": { + "type": "string", + "description": "Unique identifier for a given User." + }, + "user": { + "$ref": "#/definitions/User", + "description": "Web and/or API user within your Organization." + }, + "activityId": { + "type": "string", + "description": "Unique identifier for a given Activity object." + }, + "selection": { + "type": "string", + "enum": ["VOTE_SELECTION_APPROVED", "VOTE_SELECTION_REJECTED"] + }, + "message": { + "type": "string", + "description": "The raw message being signed within a Vote." + }, + "publicKey": { + "type": "string", + "description": "The public component of a cryptographic key pair used to sign messages and transactions." + }, + "signature": { + "type": "string", + "description": "The signature applied to a particular vote." + }, + "scheme": { + "type": "string", + "description": "Method used to produce a signature." + }, + "createdAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + } + }, + "required": [ + "id", + "userId", + "user", + "activityId", + "selection", + "message", + "publicKey", + "signature", + "scheme", + "createdAt" + ] + }, + "Wallet": { + "type": "object", + "properties": { + "walletId": { + "type": "string", + "description": "Unique identifier for a given Wallet." + }, + "walletName": { + "type": "string", + "description": "Human-readable name for a Wallet." + }, + "createdAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + }, + "exported": { + "type": "boolean", + "description": "True when a given Wallet is exported, false otherwise." + }, + "imported": { + "type": "boolean", + "description": "True when a given Wallet is imported, false otherwise." + } + }, + "required": [ + "walletId", + "walletName", + "createdAt", + "updatedAt", + "exported", + "imported" + ] + }, + "WalletAccount": { + "type": "object", + "properties": { + "walletAccountId": { + "type": "string", + "description": "Unique identifier for a given Wallet Account." + }, + "organizationId": { + "type": "string", + "description": "The Organization the Account belongs to." + }, + "walletId": { + "type": "string", + "description": "The Wallet the Account was derived from." + }, + "curve": { + "$ref": "#/definitions/Curve", + "description": "Cryptographic curve used to generate the Account." + }, + "pathFormat": { + "$ref": "#/definitions/PathFormat", + "description": "Path format used to generate the Account." + }, + "path": { + "type": "string", + "description": "Path used to generate the Account." + }, + "addressFormat": { + "$ref": "#/definitions/AddressFormat", + "description": "Address format used to generate the Account." + }, + "address": { + "type": "string", + "description": "Address generated using the Wallet seed and Account parameters." + }, + "createdAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + }, + "publicKey": { + "type": "string", + "x-nullable": true, + "description": "The public component of this wallet account's underlying cryptographic key pair." + }, + "walletDetails": { + "$ref": "#/definitions/Wallet", + "x-nullable": true, + "description": "Wallet details for this account. This is only present when include_wallet_details=true." + }, + "name": { + "type": "string", + "x-nullable": true, + "description": "Human-readable name for this Wallet Account, unique within the organization." + } + }, + "required": [ + "walletAccountId", + "organizationId", + "walletId", + "curve", + "pathFormat", + "path", + "addressFormat", + "address", + "createdAt", + "updatedAt" + ] + }, + "WalletAccountParams": { + "type": "object", + "properties": { + "curve": { + "$ref": "#/definitions/Curve", + "description": "Cryptographic curve used to generate a wallet Account." + }, + "pathFormat": { + "$ref": "#/definitions/PathFormat", + "description": "Path format used to generate a wallet Account." + }, + "path": { + "type": "string", + "description": "Path used to generate a wallet Account." + }, + "addressFormat": { + "$ref": "#/definitions/AddressFormat", + "description": "Address format used to generate a wallet Acccount." + }, + "name": { + "type": "string", + "x-nullable": true, + "description": "Optional human-readable name for the account." + } + }, + "required": ["curve", "pathFormat", "path", "addressFormat"] + }, + "WalletKitSettingsParams": { + "type": "object", + "properties": { + "enabledSocialProviders": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of enabled social login providers (e.g., 'apple', 'google', 'facebook')", + "title": "Enabled Social Providers" + }, + "oauthClientIds": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Mapping of social login providers to their Oauth client IDs.", + "title": "Oauth Client IDs" + }, + "oauthRedirectUrl": { + "type": "string", + "description": "Oauth redirect URL to be used for social login flows.", + "title": "Oauth Redirect URL" + } + } + }, + "WalletParams": { + "type": "object", + "properties": { + "walletName": { + "type": "string", + "description": "Human-readable name for a Wallet." + }, + "accounts": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/WalletAccountParams" + }, + "description": "A list of wallet Accounts. This field, if not needed, should be an empty array in your request body." + }, + "mnemonicLength": { + "type": "integer", + "format": "int32", + "x-nullable": true, + "description": "Length of mnemonic to generate the Wallet seed. Defaults to 12. Accepted values: 12, 15, 18, 21, 24." + } + }, + "required": ["walletName", "accounts"] + }, + "WalletResult": { + "type": "object", + "properties": { + "walletId": { + "type": "string" + }, + "addresses": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of account addresses." + } + }, + "required": ["walletId", "addresses"] + }, + "WebAuthnStamp": { + "type": "object", + "properties": { + "credentialId": { + "type": "string", + "description": "A base64 url encoded Unique identifier for a given credential." + }, + "clientDataJson": { + "type": "string", + "description": "A base64 encoded payload containing metadata about the signing context and the challenge." + }, + "authenticatorData": { + "type": "string", + "description": "A base64 encoded payload containing metadata about the authenticator." + }, + "signature": { + "type": "string", + "description": "The base64 url encoded signature bytes contained within the WebAuthn assertion response." + } + }, + "required": [ + "credentialId", + "clientDataJson", + "authenticatorData", + "signature" + ] + }, + "WebhookEndpointData": { + "type": "object", + "properties": { + "endpointId": { + "type": "string", + "description": "Unique identifier of the webhook endpoint." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "url": { + "type": "string", + "description": "The destination URL for webhook delivery." + }, + "name": { + "type": "string", + "description": "Human-readable name for this webhook endpoint." + }, + "isActive": { + "type": "boolean", + "description": "Whether this webhook endpoint is active." + }, + "subscriptions": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/WebhookSubscriptionParams" + }, + "description": "Current subscriptions attached to this endpoint." + } + }, + "required": ["endpointId", "organizationId", "url", "name", "isActive"] + }, + "WebhookSubscriptionParams": { + "type": "object", + "properties": { + "eventType": { + "type": "string", + "description": "The event type to subscribe to (for example, ACTIVITY_UPDATES, BALANCE_CONFIRMED_UPDATES, or BALANCE_FINALIZED_UPDATES)." + }, + "filtersJson": { + "type": "string", + "x-nullable": true, + "description": "JSON-encoded filter criteria for this subscription." + }, + "isActive": { + "type": "boolean", + "x-nullable": true, + "description": "Whether this subscription is active." + } + }, + "required": ["eventType"] + }, + "activity.v1.Address": { + "type": "object", + "properties": { + "format": { + "$ref": "#/definitions/AddressFormat" + }, + "address": { + "type": "string" + } + } + }, + "activity.v1.PolicyEvaluation": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for a given policy evaluation." + }, + "activityId": { + "type": "string", + "description": "Unique identifier for a given Activity." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for the Organization the Activity belongs to." + }, + "voteId": { + "type": "string", + "description": "Unique identifier for the Vote associated with this policy evaluation." + }, + "policyEvaluations": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/common.v1.PolicyEvaluation" + }, + "description": "Detailed evaluation result for each Policy that was run." + }, + "createdAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + } + }, + "required": [ + "id", + "activityId", + "organizationId", + "voteId", + "policyEvaluations", + "createdAt" + ] + }, + "common.v1.PolicyEvaluation": { + "type": "object", + "properties": { + "policyId": { + "type": "string" + }, + "outcome": { + "$ref": "#/definitions/Outcome" + } + } + }, + "data.v1.Address": { + "type": "object", + "properties": { + "format": { + "$ref": "#/definitions/AddressFormat" + }, + "address": { + "type": "string" + } + } + }, + "data.v1.SignatureScheme": { + "type": "string", + "enum": ["SIGNATURE_SCHEME_EPHEMERAL_KEY_P256"] + }, + "data.v1.SmartContractInterface": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "The Organization the Smart Contract Interface belongs to." + }, + "smartContractInterfaceId": { + "type": "string", + "description": "Unique identifier for a given Smart Contract Interface (ABI or IDL)." + }, + "smartContractAddress": { + "type": "string", + "description": "The address corresponding to the Smart Contract or Program." + }, + "smartContractInterface": { + "type": "string", + "description": "The JSON corresponding to the Smart Contract Interface (ABI or IDL)." + }, + "type": { + "type": "string", + "description": "The type corresponding to the Smart Contract Interface (either ETHEREUM or SOLANA)." + }, + "label": { + "type": "string", + "description": "The label corresponding to the Smart Contract Interface (either ETHEREUM or SOLANA)." + }, + "notes": { + "type": "string", + "description": "The notes corresponding to the Smart Contract Interface (either ETHEREUM or SOLANA)." + }, + "createdAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + } + }, + "required": [ + "organizationId", + "smartContractInterfaceId", + "smartContractAddress", + "smartContractInterface", + "type", + "label", + "notes", + "createdAt", + "updatedAt" + ] + }, + "external.data.v1.Credential": { + "type": "object", + "properties": { + "publicKey": { + "type": "string", + "description": "The public component of a cryptographic key pair used to sign messages and transactions." + }, + "type": { + "$ref": "#/definitions/CredentialType" + }, + "sessionProfileId": { + "type": "string", + "x-nullable": true, + "description": "The session profile associated with this credential, if any. This field is only applicable for credentials of type CREDENTIAL_TYPE_LOGIN." + } + }, + "required": ["publicKey", "type"] + }, + "external.data.v1.Quorum": { + "type": "object", + "properties": { + "threshold": { + "type": "integer", + "format": "int32", + "description": "Count of unique approvals required to meet quorum." + }, + "userIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Unique identifiers of quorum set members." + } + }, + "required": ["threshold", "userIds"] + }, + "external.data.v1.Timestamp": { + "type": "object", + "properties": { + "seconds": { + "type": "string" + }, + "nanos": { + "type": "string" + } + }, + "required": ["seconds", "nanos"] + }, + "v1.Tag": { + "type": "object", + "properties": { + "tagId": { + "type": "string", + "description": "Unique identifier for a given Tag." + }, + "tagName": { + "type": "string", + "description": "Human-readable name for a Tag." + }, + "tagType": { + "$ref": "#/definitions/TagType" + }, + "createdAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/definitions/external.data.v1.Timestamp" + } + }, + "required": ["tagId", "tagName", "tagType", "createdAt", "updatedAt"] + } + }, + "securityDefinitions": { + "ApiKeyAuth": { + "type": "apiKey", + "name": "X-Stamp", + "in": "header" + }, + "AttestedAuth": { + "type": "apiKey", + "name": "X-Stamp-Attested", + "in": "header" + }, + "AuthenticatorAuth": { + "type": "apiKey", + "name": "X-Stamp-WebAuthn", + "in": "header" + } + }, + "security": [ + { + "ApiKeyAuth": [] + }, + { + "AuthenticatorAuth": [] + } + ], + "x-tagGroups": [ + { + "name": "ORGANIZATIONS", + "tags": [ + "Organizations", + "Invitations", + "Policies", + "Features", + "IP Allowlist" + ] + }, + { + "name": "WALLETS AND PRIVATE KEYS", + "tags": ["Wallets", "Signing", "Private Keys", "Private Key Tags"] + }, + { + "name": "USERS", + "tags": ["Users", "User Tags", "User Recovery", "User Auth"] + }, + { + "name": "CREDENTIALS", + "tags": ["Authenticators", "API Keys", "Sessions"] + }, + { + "name": "ACTIVITIES", + "tags": ["Activities", "Consensus"] + } + ] +} diff --git a/scripts/openapi-gen/openapi.json b/scripts/openapi-gen/openapi.json index e69de29b..a85792ef 100644 --- a/scripts/openapi-gen/openapi.json +++ b/scripts/openapi-gen/openapi.json @@ -0,0 +1,23211 @@ +{ + "openapi": "3.0.1", + "info": { + "title": "API Reference", + "description": "Review our [API Introduction](../api-introduction) to get started.", + "contact": {}, + "version": "1.0" + }, + "servers": [ + { + "url": "https://api.turnkey.com" + } + ], + "security": [ + { + "ApiKeyAuth": [] + }, + { + "AuthenticatorAuth": [] + } + ], + "tags": [ + { + "name": "Organizations", + "description": "An Organization is the highest level of hierarchy in Turnkey. It can contain many Users, Private Keys, and Policies managed by a Root Quorum. The Root Quorum consists of a set of Users with a consensus threshold. This consensus threshold must be reached by Quorum members in order for any actions to take place.\n\nSee [Root Quorum](../concepts/users/root-quorum) for more information" + }, + { + "name": "Invitations", + "description": "Invitations allow you to invite Users into your Organization via email. Alternatively, Users can be added directly without an Invitation if their ApiKey or Authenticator credentials are known ahead of time.\n\nSee [Users](./api#tag/Users) for more information" + }, + { + "name": "Policies", + "description": "Policies allow for deep customization of the security of your Organization. They can be used to grant permissions or restrict usage of Users and Private Keys. The Policy Engine analyzes all of your Policies on each request to determine whether an Activity is allowed.\n\nSee [Policy Overview](../managing-policies/overview) for more information" + }, + { + "name": "Wallets", + "description": "Wallets contain collections of deterministically generated cryptographic public / private key pairs that share a common seed. Turnkey securely holds the common seed, but only you can access it. In most cases, Wallets should be preferred over Private Keys since they can be represented by a mnemonic phrase, used across a variety of cryptographic curves, and can derive many addresses.\n\nDerived addresses can be used to create digital signatures using the corresponding underlying private key. See [Signing](./api#tag/Signing) for more information" + }, + { + "name": "Signing", + "description": "Signers allow you to create digital signatures. Signatures are used to validate the authenticity and integrity of a digital message. Turnkey makes it easy to produce signatures by allowing you to sign with an address. If Turnkey doesn't yet support an address format you need, you can generate and sign with the public key instead by using the address format `ADDRESS_FORMAT_COMPRESSED`." + }, + { + "name": "Private Keys", + "description": "Private Keys are cryptographic public / private key pairs that can be used for cryptocurrency needs or more generalized encryption. Turnkey securely holds all private key materials for you, but only you can access them.\n\nThe Private Key ID or any derived address can be used to create digital signatures. See [Signing](./api#tag/Signing) for more information" + }, + { + "name": "Private Key Tags", + "description": "Private Key Tags allow you to easily group and permission Private Keys through Policies." + }, + { + "name": "Users", + "description": "Users are responsible for any action taken within an Organization. They can have ApiKey or Authenticator credentials, allowing you to onboard teammates to the Organization, or create API-only Users to run as part of your infrastructure." + }, + { + "name": "User Tags", + "description": "User Key Tags allow you to easily group and permission Users through Policies." + }, + { + "name": "Authenticators", + "description": "Authenticators are WebAuthN hardware devices, such as a Macbook TouchID or Yubikey, that can be used to authenticate requests." + }, + { + "name": "API Keys", + "description": "API Keys are used to authenticate requests\n\nSee our [CLI](https://github.com/tkhq/tkcli) for instructions on generating API Keys" + }, + { + "name": "Activities", + "description": "Activities encapsulate all the possible actions that can be taken with Turnkey. Some examples include adding a new user, creating a private key, and signing a transaction.\n\nActivities that modify your Organization are processed asynchronously. To confirm processing is complete and retrieve the Activity results, these activities must be polled until that status has been updated to a finalized state: `COMPLETED` when the activity is successful or `FAILED` when the activity has failed" + }, + { + "name": "Consensus", + "description": "Policies can enforce consensus requirements for Activities. For example, adding a new user requires two admins to approve the request.\n\nActivities that have been proposed, but don't yet meet the Consensus requirements will have the status: `REQUIRES_CONSENSUS`. Activities in this state can be approved or rejected using the unique fingerprint generated when an Activity is created." + }, + { + "name": "IP Allowlist", + "description": "IP Allowlists restrict API access to specific CIDR blocks. They can be configured at the organization level (applying to all API keys) or at the individual API key level (overriding organization-level allowlists).\n\nWhen no IP allowlist is configured, all IP addresses are allowed. Organization-level allowlists can be enabled or disabled, while API key-level allowlists are always enforced when present." + } + ], + "paths": { + "/public/v1/query/get_activity": { + "post": { + "tags": [ + "Activities" + ], + "summary": "Get activity", + "description": "Get details about an activity.", + "operationId": "GetActivity", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetActivityRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/query/get_api_key": { + "post": { + "tags": [ + "API keys" + ], + "summary": "Get API key", + "description": "Get details about an API key.", + "operationId": "GetApiKey", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetApiKeyRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetApiKeyResponse" + } + } + } + } + } + } + }, + "/public/v1/query/get_api_keys": { + "post": { + "tags": [ + "API keys" + ], + "summary": "Get API keys", + "description": "Get details about API keys for a user.", + "operationId": "GetApiKeys", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetApiKeysRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetApiKeysResponse" + } + } + } + } + } + } + }, + "/public/v1/query/get_app_status": { + "post": { + "tags": [ + "TVC" + ], + "summary": "Get TVC App status", + "description": "Get live runtime status for a TVC App from the cluster.", + "operationId": "GetAppStatus", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetAppStatusRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetAppStatusResponse" + } + } + } + } + } + } + }, + "/public/v1/query/get_authenticator": { + "post": { + "tags": [ + "Authenticators" + ], + "summary": "Get authenticator", + "description": "Get details about an authenticator.", + "operationId": "GetAuthenticator", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetAuthenticatorRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetAuthenticatorResponse" + } + } + } + } + } + } + }, + "/public/v1/query/get_authenticators": { + "post": { + "tags": [ + "Authenticators" + ], + "summary": "Get authenticators", + "description": "Get details about authenticators for a user.", + "operationId": "GetAuthenticators", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetAuthenticatorsRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetAuthenticatorsResponse" + } + } + } + } + } + } + }, + "/public/v1/query/get_boot_proof": { + "post": { + "tags": [ + "Boot Proof" + ], + "summary": "Get a specific boot proof", + "description": "Get the boot proof for a given ephemeral key.", + "operationId": "GetBootProof", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetBootProofRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BootProofResponse" + } + } + } + } + } + } + }, + "/public/v1/query/get_claim_earn_fees_status": { + "post": { + "tags": [ + "Earn" + ], + "summary": "Get Earn claim fees status", + "description": "Poll the status of a fee claim by its claim_request_id.", + "operationId": "GetClaimEarnFeesStatus", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetClaimEarnFeesStatusRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetClaimEarnFeesStatusResponse" + } + } + } + } + } + } + }, + "/public/v1/query/get_earn_deploy_status": { + "post": { + "tags": [ + "Earn" + ], + "summary": "Get Earn deploy status", + "description": "Poll the status of a wrapper deployment by its deploy_request_id.", + "operationId": "GetEarnDeployStatus", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetEarnDeployStatusRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetEarnDeployStatusResponse" + } + } + } + } + } + } + }, + "/public/v1/query/get_earn_deposit_status": { + "post": { + "tags": [ + "Earn" + ], + "summary": "Get Earn deposit status", + "description": "Poll the status of a deposit by its deposit_request_id (for the async/sponsored deposit path).", + "operationId": "GetEarnDepositStatus", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetEarnDepositStatusRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetEarnDepositStatusResponse" + } + } + } + } + } + } + }, + "/public/v1/query/get_earn_withdraw_status": { + "post": { + "tags": [ + "Earn" + ], + "summary": "Get Earn withdraw status", + "description": "Poll the status of a withdrawal by its withdraw_request_id.", + "operationId": "GetEarnWithdrawStatus", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetEarnWithdrawStatusRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetEarnWithdrawStatusResponse" + } + } + } + } + } + } + }, + "/public/v1/query/get_gas_usage": { + "post": { + "tags": [ + "Broadcasting" + ], + "summary": "Get gas usage", + "description": "Get gas usage and gas limits for either the parent organization or a sub-organization.", + "operationId": "GetGasUsage", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetGasUsageRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetGasUsageResponse" + } + } + } + } + } + } + }, + "/public/v1/query/get_ip_allowlist": { + "post": { + "tags": [ + "IP Allowlist" + ], + "summary": "Get IP Allowlist", + "description": "Get IP allowlist and rules for an organization.", + "operationId": "GetIpAllowlist", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetIpAllowlistRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetIpAllowlistResponse" + } + } + } + } + } + } + }, + "/public/v1/query/get_latest_boot_proof": { + "post": { + "tags": [ + "Boot Proof" + ], + "summary": "Get the latest boot proof for an app", + "description": "Get the latest boot proof for a given enclave app name.", + "operationId": "GetLatestBootProof", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetLatestBootProofRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BootProofResponse" + } + } + } + } + } + } + }, + "/public/v1/query/get_mfa_policies": { + "post": { + "tags": [ + "MFA Policies" + ], + "summary": "Get MFA policies", + "description": "Get all MFA policies for a user.", + "operationId": "GetMfaPolicies", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetMfaPoliciesRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetMfaPoliciesResponse" + } + } + } + } + } + } + }, + "/public/v1/query/get_mfa_policy": { + "post": { + "tags": [ + "MFA Policies" + ], + "summary": "Get MFA policy", + "description": "Get a single MFA policy for a user.", + "operationId": "GetMfaPolicy", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetMfaPolicyRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetMfaPolicyResponse" + } + } + } + } + } + } + }, + "/public/v1/query/get_mfa_status": { + "post": { + "tags": [ + "MFA Policies" + ], + "summary": "Get MFA status", + "description": "Get the MFA status of an activity for a specific user or all voting users.", + "operationId": "GetMfaStatus", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetMfaStatusRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetMfaStatusResponse" + } + } + } + } + } + } + }, + "/public/v1/query/get_nonces": { + "post": { + "tags": [ + "Broadcasting" + ], + "summary": "Get nonces", + "description": "Get nonce values for an address on a given network. Can fetch the standard on-chain nonce and/or the gas station nonce used for sponsored transactions.", + "operationId": "GetNonces", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetNoncesRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetNoncesResponse" + } + } + } + } + } + } + }, + "/public/v1/query/get_oauth2_credential": { + "post": { + "summary": "Get OAuth 2.0 credential", + "description": "Get details about an OAuth 2.0 credential.", + "operationId": "GetOauth2Credential", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetOauth2CredentialRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetOauth2CredentialResponse" + } + } + } + } + } + } + }, + "/public/v1/query/get_oauth_providers": { + "post": { + "tags": [ + "User Auth" + ], + "summary": "Get Oauth providers", + "description": "Get details about Oauth providers for a user.", + "operationId": "GetOauthProviders", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetOauthProvidersRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetOauthProvidersResponse" + } + } + } + } + } + } + }, + "/public/v1/query/get_onramp_transaction_status": { + "post": { + "tags": [ + "On Ramp" + ], + "summary": "Get On Ramp transaction status", + "description": "Get the status of an on ramp transaction.", + "operationId": "GetOnRampTransactionStatus", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetOnRampTransactionStatusRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetOnRampTransactionStatusResponse" + } + } + } + } + } + } + }, + "/public/v1/query/get_organization_configs": { + "post": { + "tags": [ + "Organizations" + ], + "summary": "Get configs", + "description": "Get quorum settings and features for an organization.", + "operationId": "GetOrganizationConfigs", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetOrganizationConfigsRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetOrganizationConfigsResponse" + } + } + } + } + } + } + }, + "/public/v1/query/get_policy": { + "post": { + "tags": [ + "Policies" + ], + "summary": "Get policy", + "description": "Get details about a policy.", + "operationId": "GetPolicy", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetPolicyRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetPolicyResponse" + } + } + } + } + } + } + }, + "/public/v1/query/get_policy_evaluations": { + "post": { + "tags": [ + "Activities" + ], + "summary": "Get policy evaluations", + "description": "Get the policy evaluations for an activity.", + "operationId": "GetPolicyEvaluations", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetPolicyEvaluationsRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetPolicyEvaluationsResponse" + } + } + } + } + } + } + }, + "/public/v1/query/get_private_key": { + "post": { + "tags": [ + "Private Keys" + ], + "summary": "Get private key", + "description": "Get details about a private key.", + "operationId": "GetPrivateKey", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetPrivateKeyRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetPrivateKeyResponse" + } + } + } + } + } + } + }, + "/public/v1/query/get_send_transaction_status": { + "post": { + "tags": [ + "Send Transactions" + ], + "summary": "Get send transaction status", + "description": "Get the status of a send transaction request.", + "operationId": "GetSendTransactionStatus", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetSendTransactionStatusRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetSendTransactionStatusResponse" + } + } + } + } + } + } + }, + "/public/v1/query/get_session_profile": { + "post": { + "tags": [ + "Session Profiles" + ], + "summary": "Get session profile", + "description": "Get a single session profile for an organization.", + "operationId": "GetSessionProfile", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetSessionProfileRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetSessionProfileResponse" + } + } + } + } + } + } + }, + "/public/v1/query/get_session_profiles": { + "post": { + "tags": [ + "Session Profiles" + ], + "summary": "Get session profiles", + "description": "Get all session profiles for an organization.", + "operationId": "GetSessionProfiles", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetSessionProfilesRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetSessionProfilesResponse" + } + } + } + } + } + } + }, + "/public/v1/query/get_smart_contract_interface": { + "post": { + "tags": [ + "Policies" + ], + "summary": "Get smart contract interface", + "description": "Get details about a smart contract interface.", + "operationId": "GetSmartContractInterface", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetSmartContractInterfaceRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetSmartContractInterfaceResponse" + } + } + } + } + } + } + }, + "/public/v1/query/get_swap_status": { + "post": { + "tags": [ + "Swaps" + ], + "summary": "Get swap status", + "description": "Poll the status of a swap by its swap_request_id. Covers same-chain and cross-chain swaps.", + "operationId": "GetSwapStatus", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetSwapStatusRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetSwapStatusResponse" + } + } + } + } + } + } + }, + "/public/v1/query/get_tvc_app": { + "post": { + "tags": [ + "TVC" + ], + "summary": "Get TVC App", + "description": "Get details about a single TVC App", + "operationId": "GetTvcApp", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetTvcAppRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetTvcAppResponse" + } + } + } + } + } + } + }, + "/public/v1/query/get_tvc_deployment": { + "post": { + "tags": [ + "TVC" + ], + "summary": "Get TVC Deployment", + "description": "Get details about a single TVC Deployment", + "operationId": "GetTvcDeployment", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetTvcDeploymentRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetTvcDeploymentResponse" + } + } + } + } + } + } + }, + "/public/v1/query/get_tvc_deployment_debug_logs": { + "post": { + "tags": [ + "TVC" + ], + "summary": "Get TVC Deployment debug logs", + "description": "Get a bounded window of application logs from a debug-mode TVC deployment. Returned lines are collected from every running replica and sorted by platform timestamp.", + "operationId": "GetTvcDeploymentDebugLogs", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetTvcDeploymentDebugLogsRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetTvcDeploymentDebugLogsResponse" + } + } + } + } + } + } + }, + "/public/v1/query/get_tvc_qos_versions": { + "post": { + "tags": [ + "TVC" + ], + "summary": "Get TVC QOS versions", + "description": "List QOS versions supported for new TVC deployments and the latest recommended QOS version.", + "operationId": "GetTvcQosVersions", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetTvcQosVersionsRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetTvcQosVersionsResponse" + } + } + } + } + } + } + }, + "/public/v1/query/get_user": { + "post": { + "tags": [ + "Users" + ], + "summary": "Get user", + "description": "Get details about a user.", + "operationId": "GetUser", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetUserRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetUserResponse" + } + } + } + } + } + } + }, + "/public/v1/query/get_wallet": { + "post": { + "tags": [ + "Wallets" + ], + "summary": "Get wallet", + "description": "Get details about a wallet.", + "operationId": "GetWallet", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetWalletRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetWalletResponse" + } + } + } + } + } + } + }, + "/public/v1/query/get_wallet_account": { + "post": { + "tags": [ + "Wallets" + ], + "summary": "Get wallet account", + "description": "Get a single wallet account.", + "operationId": "GetWalletAccount", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetWalletAccountRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetWalletAccountResponse" + } + } + } + } + } + } + }, + "/public/v1/query/get_wallet_address_balances": { + "post": { + "tags": [ + "Wallets" + ], + "summary": "Get balances", + "description": "Get balances of supported assets for an address on the specified network. Only non-zero balances are returned.", + "operationId": "GetWalletAddressBalances", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetWalletAddressBalancesRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetWalletAddressBalancesResponse" + } + } + } + } + } + } + }, + "/public/v1/query/list_activities": { + "post": { + "tags": [ + "Activities" + ], + "summary": "List activities", + "description": "List all activities within an organization.", + "operationId": "GetActivities", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetActivitiesRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetActivitiesResponse" + } + } + } + } + } + } + }, + "/public/v1/query/list_app_proofs": { + "post": { + "tags": [ + "App Proof" + ], + "summary": "List App Proofs for an activity", + "description": "List the App Proofs for the given activity.", + "operationId": "GetAppProofs", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetAppProofsRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetAppProofsResponse" + } + } + } + } + } + } + }, + "/public/v1/query/list_earn_enabled_vaults": { + "post": { + "tags": [ + "Earn" + ], + "summary": "Get Earn enabled vaults", + "description": "Get the organization's deployed wrappers with on-chain total deposited and live APY. The management view, distinct from per-wallet positions.", + "operationId": "ListEarnEnabledVaults", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListEarnEnabledVaultsRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListEarnEnabledVaultsResponse" + } + } + } + } + } + } + }, + "/public/v1/query/list_earn_positions": { + "post": { + "tags": [ + "Earn" + ], + "summary": "Get Earn positions", + "description": "Get the active Earn positions for a specific wallet, including current value, cost basis, yield, and projected fees.", + "operationId": "ListEarnPositions", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListEarnPositionsRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListEarnPositionsResponse" + } + } + } + } + } + } + }, + "/public/v1/query/list_earn_vaults": { + "post": { + "tags": [ + "Earn" + ], + "summary": "Get Earn vault catalog", + "description": "Get the catalog of all wrappable yield vaults across supported chains, enriched with live TVL and APY. Annotates which vaults the organization has already enabled.", + "operationId": "ListEarnVaults", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListEarnVaultsRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListEarnVaultsResponse" + } + } + } + } + } + } + }, + "/public/v1/query/list_email_events": { + "post": { + "tags": [ + "Email" + ], + "summary": "List email events", + "description": "List email events for the organization.", + "operationId": "ListEmailEvents", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListEmailEventsRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListEmailEventsResponse" + } + } + } + } + } + } + }, + "/public/v1/query/list_eth_transaction_history": { + "post": { + "tags": [ + "Wallets" + ], + "summary": "List Eth transaction history", + "description": "List Ethereum transaction history for a wallet address on the specified network.", + "operationId": "ListEthTransactionHistory", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListEthTransactionHistoryRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListEthTransactionHistoryResponse" + } + } + } + } + } + } + }, + "/public/v1/query/list_fiat_on_ramp_credentials": { + "post": { + "tags": [ + "On Ramp" + ], + "summary": "List Fiat On Ramp Credentials", + "description": "List all fiat on ramp provider credentials within an organization.", + "operationId": "ListFiatOnRampCredentials", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListFiatOnRampCredentialsRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListFiatOnRampCredentialsResponse" + } + } + } + } + } + } + }, + "/public/v1/query/list_oauth2_credentials": { + "post": { + "tags": [ + "User Auth" + ], + "summary": "List OAuth 2.0 Credentials", + "description": "List all OAuth 2.0 credentials within an organization.", + "operationId": "ListOauth2Credentials", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListOauth2CredentialsRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListOauth2CredentialsResponse" + } + } + } + } + } + } + }, + "/public/v1/query/list_policies": { + "post": { + "tags": [ + "Policies" + ], + "summary": "List policies", + "description": "List all policies within an organization.", + "operationId": "GetPolicies", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetPoliciesRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetPoliciesResponse" + } + } + } + } + } + } + }, + "/public/v1/query/list_private_key_tags": { + "post": { + "tags": [ + "Private Key Tags" + ], + "summary": "List private key tags", + "description": "List all private key tags within an organization.", + "operationId": "ListPrivateKeyTags", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListPrivateKeyTagsRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListPrivateKeyTagsResponse" + } + } + } + } + } + } + }, + "/public/v1/query/list_private_keys": { + "post": { + "tags": [ + "Private Keys" + ], + "summary": "List private keys", + "description": "List all private keys within an organization.", + "operationId": "GetPrivateKeys", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetPrivateKeysRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetPrivateKeysResponse" + } + } + } + } + } + } + }, + "/public/v1/query/list_smart_contract_interfaces": { + "post": { + "tags": [ + "Policies" + ], + "summary": "List smart contract interfaces", + "description": "List all smart contract interfaces within an organization.", + "operationId": "GetSmartContractInterfaces", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetSmartContractInterfacesRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetSmartContractInterfacesResponse" + } + } + } + } + } + } + }, + "/public/v1/query/list_sol_transaction_history": { + "post": { + "tags": [ + "Wallets" + ], + "summary": "List Sol transaction history", + "description": "List Solana transaction history for a wallet address on the specified network.", + "operationId": "ListSolTransactionHistory", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListSolTransactionHistoryRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListSolTransactionHistoryResponse" + } + } + } + } + } + } + }, + "/public/v1/query/list_suborgs": { + "post": { + "tags": [ + "Organizations" + ], + "summary": "Get sub-organizations", + "description": "Get all suborg IDs associated given a parent org ID and an optional filter.", + "operationId": "GetSubOrgIds", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetSubOrgIdsRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetSubOrgIdsResponse" + } + } + } + } + } + } + }, + "/public/v1/query/list_supported_assets": { + "post": { + "tags": [ + "Wallets" + ], + "summary": "List supported assets", + "description": "List supported assets for the specified network.", + "operationId": "ListSupportedAssets", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListSupportedAssetsRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListSupportedAssetsResponse" + } + } + } + } + } + } + }, + "/public/v1/query/list_tvc_app_deployments": { + "post": { + "tags": [ + "TVC" + ], + "summary": "List TVC Deployments", + "description": "List all deployments for a given TVC App", + "operationId": "GetTvcAppDeployments", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetTvcAppDeploymentsRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetTvcAppDeploymentsResponse" + } + } + } + } + } + } + }, + "/public/v1/query/list_tvc_apps": { + "post": { + "tags": [ + "TVC" + ], + "summary": "List TVC Apps", + "description": "List all TVC Apps within an organization.", + "operationId": "GetTvcApps", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetTvcAppsRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetTvcAppsResponse" + } + } + } + } + } + } + }, + "/public/v1/query/list_user_tags": { + "post": { + "tags": [ + "User Tags" + ], + "summary": "List user tags", + "description": "List all user tags within an organization.", + "operationId": "ListUserTags", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListUserTagsRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListUserTagsResponse" + } + } + } + } + } + } + }, + "/public/v1/query/list_users": { + "post": { + "tags": [ + "Users" + ], + "summary": "List users", + "description": "List all users within an organization.", + "operationId": "GetUsers", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetUsersRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetUsersResponse" + } + } + } + } + } + } + }, + "/public/v1/query/list_verified_suborgs": { + "post": { + "tags": [ + "Organizations" + ], + "summary": "Get verified sub-organizations", + "description": "Get all email or phone verified suborg IDs associated given a parent org ID.", + "operationId": "GetVerifiedSubOrgIds", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetVerifiedSubOrgIdsRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetVerifiedSubOrgIdsResponse" + } + } + } + } + } + } + }, + "/public/v1/query/list_wallet_accounts": { + "post": { + "tags": [ + "Wallets" + ], + "summary": "List wallets accounts", + "description": "List all accounts within a wallet.", + "operationId": "GetWalletAccounts", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetWalletAccountsRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetWalletAccountsResponse" + } + } + } + } + } + } + }, + "/public/v1/query/list_wallets": { + "post": { + "tags": [ + "Wallets" + ], + "summary": "List wallets", + "description": "List all wallets within an organization.", + "operationId": "GetWallets", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetWalletsRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetWalletsResponse" + } + } + } + } + } + } + }, + "/public/v1/query/list_webhook_endpoints": { + "post": { + "tags": [ + "Organizations" + ], + "summary": "List webhook endpoints", + "description": "List webhook endpoints within an organization.", + "operationId": "ListWebhookEndpoints", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListWebhookEndpointsRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListWebhookEndpointsResponse" + } + } + } + } + } + } + }, + "/public/v1/query/validate_tvc_image": { + "post": { + "tags": [ + "TVC" + ], + "summary": "Validate Container Image for TVC", + "description": "Validate a container image URL and pull secret for TVC deployment", + "operationId": "ValidateTvcImage", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidateTvcImageRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidateTvcImageResponse" + } + } + } + } + } + } + }, + "/public/v1/query/whoami": { + "post": { + "tags": [ + "Sessions" + ], + "summary": "Who am I?", + "description": "Get basic information about your current API or WebAuthN user and their organization. Affords sub-organization look ups via parent organization for WebAuthN or API key users.", + "operationId": "GetWhoami", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetWhoamiRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetWhoamiResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/approve_activity": { + "post": { + "tags": [ + "Consensus" + ], + "summary": "Approve activity", + "description": "Approve an activity.", + "operationId": "ApproveActivity", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApproveActivityRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/claim_earn_fees": { + "post": { + "tags": [ + "Earn" + ], + "summary": "Claim earn fees", + "description": "Claim earn fees through the activity pipeline.", + "operationId": "ClaimEarnFees", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ClaimEarnFeesRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/claim_swap_fees": { + "post": { + "tags": [ + "Swaps" + ], + "summary": "Claim swap fees", + "description": "Claim swap fees through the activity pipeline.", + "operationId": "ClaimSwapFees", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ClaimSwapFeesRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/create_api_keys": { + "post": { + "tags": [ + "API Keys" + ], + "summary": "Create API keys", + "description": "Add API keys to an existing user.", + "operationId": "CreateApiKeys", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateApiKeysRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/create_authenticators": { + "post": { + "tags": [ + "Authenticators" + ], + "summary": "Create authenticators", + "description": "Create authenticators to authenticate requests to Turnkey.", + "operationId": "CreateAuthenticators", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateAuthenticatorsRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/create_fiat_on_ramp_credential": { + "post": { + "tags": [ + "On Ramp" + ], + "summary": "Create a Fiat On Ramp Credential", + "description": "Create a fiat on ramp provider credential", + "operationId": "CreateFiatOnRampCredential", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateFiatOnRampCredentialRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/create_invitations": { + "post": { + "tags": [ + "Invitations" + ], + "summary": "Create invitations", + "description": "Create invitations to join an existing organization.", + "operationId": "CreateInvitations", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateInvitationsRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/create_mfa_policy": { + "post": { + "tags": [ + "MFA Policies" + ], + "summary": "Create MFA policy", + "description": "Create a new MFA policy for a user.", + "operationId": "CreateMfaPolicy", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateMfaPolicyRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/create_oauth2_credential": { + "post": { + "tags": [ + "User Auth" + ], + "summary": "Create an OAuth 2.0 Credential", + "description": "Enable authentication for end users with an OAuth 2.0 provider", + "operationId": "CreateOauth2Credential", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateOauth2CredentialRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/create_oauth_providers": { + "post": { + "tags": [ + "User Auth" + ], + "summary": "Create Oauth providers", + "description": "Create Oauth providers for a specified user.", + "operationId": "CreateOauthProviders", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateOauthProvidersRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/create_policies": { + "post": { + "tags": [ + "Policies" + ], + "summary": "Create policies", + "description": "Create new policies.", + "operationId": "CreatePolicies", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreatePoliciesRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/create_policy": { + "post": { + "tags": [ + "Policies" + ], + "summary": "Create policy", + "description": "Create a new policy.", + "operationId": "CreatePolicy", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreatePolicyRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/create_private_key_tag": { + "post": { + "tags": [ + "Private Key Tags" + ], + "summary": "Create private key tag", + "description": "Create a private key tag and add it to private keys.", + "operationId": "CreatePrivateKeyTag", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreatePrivateKeyTagRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/create_private_keys": { + "post": { + "tags": [ + "Private Keys" + ], + "summary": "Create private keys", + "description": "Create new private keys.", + "operationId": "CreatePrivateKeys", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreatePrivateKeysRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/create_read_only_session": { + "post": { + "tags": [ + "Sessions" + ], + "summary": "Create read only session", + "description": "Create a read only session for a user (valid for 1 hour).", + "operationId": "CreateReadOnlySession", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateReadOnlySessionRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/create_read_write_session": { + "post": { + "tags": [ + "Sessions" + ], + "summary": "Create read write session", + "description": "Create a read write session for a user.", + "operationId": "CreateReadWriteSession", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateReadWriteSessionRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/create_session_profile": { + "post": { + "tags": [ + "Session Profiles" + ], + "summary": "Create session profile", + "description": "Create a new session profile for an organization.", + "operationId": "CreateSessionProfile", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateSessionProfileRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/create_smart_contract_interface": { + "post": { + "tags": [ + "Policies" + ], + "summary": "Create smart contract interface", + "description": "Create an ABI/IDL in JSON.", + "operationId": "CreateSmartContractInterface", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateSmartContractInterfaceRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/create_sub_organization": { + "post": { + "tags": [ + "Organizations" + ], + "summary": "Create sub-organization", + "description": "Create a new sub-organization. Each root user must have at least one valid credential: an API key, an authenticator, an OAuth provider, or an email or phone number with a login method enabled on the sub-organization (email, email OTP, or SMS).", + "operationId": "CreateSubOrganization", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateSubOrganizationRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/create_tvc_app": { + "post": { + "tags": [ + "TVC" + ], + "summary": "Create a TVC App", + "description": "Create a new TVC application", + "operationId": "CreateTvcApp", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateTvcAppRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/create_tvc_deployment": { + "post": { + "tags": [ + "TVC" + ], + "summary": "Create a TVC Deployment", + "description": "Create a new TVC Deployment", + "operationId": "CreateTvcDeployment", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateTvcDeploymentRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/create_tvc_manifest_approvals": { + "post": { + "tags": [ + "TVC" + ], + "summary": "Create TVC Manifest Approvals", + "description": "Post one or more manifest approvals for a TVC Manifest", + "operationId": "CreateTvcManifestApprovals", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateTvcManifestApprovalsRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/create_user_tag": { + "post": { + "tags": [ + "User Tags" + ], + "summary": "Create user tag", + "description": "Create a user tag and add it to users.", + "operationId": "CreateUserTag", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateUserTagRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/create_users": { + "post": { + "tags": [ + "Users" + ], + "summary": "Create users", + "description": "Create users in an existing organization. Each user must have at least one valid credential: an API key, an authenticator, an OAuth provider, or an email or phone number with a login method enabled on the organization (email, email OTP, or SMS).", + "operationId": "CreateUsers", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateUsersRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/create_wallet": { + "post": { + "tags": [ + "Wallets" + ], + "summary": "Create wallet", + "description": "Create a wallet and derive addresses.", + "operationId": "CreateWallet", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateWalletRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/create_wallet_accounts": { + "post": { + "tags": [ + "Wallets" + ], + "summary": "Create wallet accounts", + "description": "Derive additional addresses using an existing wallet.", + "operationId": "CreateWalletAccounts", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateWalletAccountsRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/create_webhook_endpoint": { + "post": { + "tags": [ + "Organizations" + ], + "summary": "Create webhook endpoint", + "description": "Create a webhook endpoint for an organization.", + "operationId": "CreateWebhookEndpoint", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateWebhookEndpointRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/delete_api_keys": { + "post": { + "tags": [ + "API Keys" + ], + "summary": "Delete API keys", + "description": "Remove api keys from a user.", + "operationId": "DeleteApiKeys", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeleteApiKeysRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/delete_authenticators": { + "post": { + "tags": [ + "Authenticators" + ], + "summary": "Delete authenticators", + "description": "Remove authenticators from a user.", + "operationId": "DeleteAuthenticators", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeleteAuthenticatorsRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/delete_fiat_on_ramp_credential": { + "post": { + "tags": [ + "On Ramp" + ], + "summary": "Delete a Fiat On Ramp Credential", + "description": "Delete a fiat on ramp provider credential", + "operationId": "DeleteFiatOnRampCredential", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeleteFiatOnRampCredentialRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/delete_invitation": { + "post": { + "tags": [ + "Invitations" + ], + "summary": "Delete invitation", + "description": "Delete an existing invitation.", + "operationId": "DeleteInvitation", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeleteInvitationRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/delete_mfa_policy": { + "post": { + "tags": [ + "MFA Policies" + ], + "summary": "Delete MFA policy", + "description": "Delete an MFA policy for a user.", + "operationId": "DeleteMfaPolicy", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeleteMfaPolicyRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/delete_oauth2_credential": { + "post": { + "tags": [ + "User Auth" + ], + "summary": "Delete an OAuth 2.0 Credential", + "description": "Disable authentication for end users with an OAuth 2.0 provider", + "operationId": "DeleteOauth2Credential", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeleteOauth2CredentialRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/delete_oauth_providers": { + "post": { + "tags": [ + "User Auth" + ], + "summary": "Delete Oauth providers", + "description": "Remove Oauth providers for a specified user.", + "operationId": "DeleteOauthProviders", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeleteOauthProvidersRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/delete_policies": { + "post": { + "tags": [ + "Policies" + ], + "summary": "Delete policies", + "description": "Delete existing policies.", + "operationId": "DeletePolicies", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeletePoliciesRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/delete_policy": { + "post": { + "tags": [ + "Policies" + ], + "summary": "Delete policy", + "description": "Delete an existing policy.", + "operationId": "DeletePolicy", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeletePolicyRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/delete_private_key_tags": { + "post": { + "tags": [ + "Private Key Tags" + ], + "summary": "Delete private key tags", + "description": "Delete private key tags within an organization.", + "operationId": "DeletePrivateKeyTags", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeletePrivateKeyTagsRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/delete_private_keys": { + "post": { + "tags": [ + "Private Keys" + ], + "summary": "Delete private keys", + "description": "Delete private keys for an organization.", + "operationId": "DeletePrivateKeys", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeletePrivateKeysRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/delete_smart_contract_interface": { + "post": { + "tags": [ + "Policies" + ], + "summary": "Delete smart contract interface", + "description": "Delete a smart contract interface.", + "operationId": "DeleteSmartContractInterface", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeleteSmartContractInterfaceRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/delete_sub_organization": { + "post": { + "tags": [ + "Organizations" + ], + "summary": "Delete sub-organization", + "description": "Delete a sub-organization.", + "operationId": "DeleteSubOrganization", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeleteSubOrganizationRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/delete_tvc_app_and_deployments": { + "post": { + "tags": [ + "TVC" + ], + "summary": "Delete a TVC App and all of its deployments", + "description": "Delete a TVC App and all of its deployments", + "operationId": "DeleteTvcAppAndDeployments", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeleteTvcAppAndDeploymentsRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/delete_tvc_deployment": { + "post": { + "tags": [ + "TVC" + ], + "summary": "Delete a TVC Deployment", + "description": "Delete a TVC Deployment", + "operationId": "DeleteTvcDeployment", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeleteTvcDeploymentRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/delete_user_tags": { + "post": { + "tags": [ + "User Tags" + ], + "summary": "Delete user tags", + "description": "Delete user tags within an organization.", + "operationId": "DeleteUserTags", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeleteUserTagsRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/delete_users": { + "post": { + "tags": [ + "Users" + ], + "summary": "Delete users", + "description": "Delete users within an organization.", + "operationId": "DeleteUsers", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeleteUsersRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/delete_wallet_accounts": { + "post": { + "tags": [ + "Wallets" + ], + "summary": "Delete wallet accounts", + "description": "Delete wallet accounts for an organization.", + "operationId": "DeleteWalletAccounts", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeleteWalletAccountsRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/delete_wallets": { + "post": { + "tags": [ + "Wallets" + ], + "summary": "Delete wallets", + "description": "Delete wallets for an organization.", + "operationId": "DeleteWallets", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeleteWalletsRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/delete_webhook_endpoint": { + "post": { + "tags": [ + "Organizations" + ], + "summary": "Delete webhook endpoint", + "description": "Delete a webhook endpoint for an organization.", + "operationId": "DeleteWebhookEndpoint", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeleteWebhookEndpointRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/earn_deploy_wrapper": { + "post": { + "tags": [ + "Earn" + ], + "summary": "Deploy Earn wrapper", + "description": "Enable a yield vault for an organization by deploying its fee wrapper. Must be called before any deposits into the vault.", + "operationId": "EarnDeployWrapper", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EarnDeployWrapperRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/earn_deposit": { + "post": { + "tags": [ + "Earn" + ], + "summary": "Deposit into Earn vault", + "description": "Deposit assets from a wallet into an enabled yield vault.", + "operationId": "EarnDeposit", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EarnDepositRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/earn_set_wrapper_state": { + "post": { + "tags": [ + "Earn" + ], + "summary": "Set Earn wrapper state", + "description": "Enable or disable deposits to a deployed Earn wrapper. Withdrawals are always allowed.", + "operationId": "EarnSetWrapperState", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EarnSetWrapperStateRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/earn_withdraw": { + "post": { + "tags": [ + "Earn" + ], + "summary": "Withdraw from Earn vault", + "description": "Withdraw assets or redeem shares from an enabled yield vault.", + "operationId": "EarnWithdraw", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EarnWithdrawRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/email_auth": { + "post": { + "tags": [ + "User Auth" + ], + "summary": "Perform email auth", + "description": "Authenticate a user via email.", + "operationId": "EmailAuth", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EmailAuthRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/eth_send_transaction": { + "post": { + "tags": [ + "Broadcasting" + ], + "summary": "Broadcast EVM transaction", + "description": "Submit a transaction intent describing an EVM transaction you would like to broadcast.", + "operationId": "EthSendTransaction", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EthSendTransactionRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/eth_undelegate_7702": { + "post": { + "tags": [ + "Broadcasting" + ], + "summary": "Undelegate an EVM account", + "description": "Submit an EIP-7702 undelegation transaction.", + "operationId": "EthUndelegate7702", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EthUndelegate7702Request" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/export_private_key": { + "post": { + "tags": [ + "Private Keys" + ], + "summary": "Export private key", + "description": "Export a private key.", + "operationId": "ExportPrivateKey", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ExportPrivateKeyRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/export_wallet": { + "post": { + "tags": [ + "Wallets" + ], + "summary": "Export wallet", + "description": "Export a wallet.", + "operationId": "ExportWallet", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ExportWalletRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/export_wallet_account": { + "post": { + "tags": [ + "Wallets" + ], + "summary": "Export wallet account", + "description": "Export a wallet account.", + "operationId": "ExportWalletAccount", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ExportWalletAccountRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/import_private_key": { + "post": { + "tags": [ + "Private Keys" + ], + "summary": "Import private key", + "description": "Import a private key.", + "operationId": "ImportPrivateKey", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ImportPrivateKeyRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/import_secrets": { + "post": { + "tags": [ + "Secrets" + ], + "summary": "Import secrets", + "description": "Import secrets encrypted to target keys returned from InitImportSecrets.", + "operationId": "ImportSecrets", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ImportSecretsRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/import_wallet": { + "post": { + "tags": [ + "Wallets" + ], + "summary": "Import wallet", + "description": "Import a wallet.", + "operationId": "ImportWallet", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ImportWalletRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/init_fiat_on_ramp": { + "post": { + "tags": [ + "On Ramp" + ], + "summary": "Init fiat on ramp", + "description": "Initiate a fiat on ramp flow.", + "operationId": "InitFiatOnRamp", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InitFiatOnRampRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/init_import_private_key": { + "post": { + "tags": [ + "Private Keys" + ], + "summary": "Init import private key", + "description": "Initialize a new private key import.", + "operationId": "InitImportPrivateKey", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InitImportPrivateKeyRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/init_import_wallet": { + "post": { + "tags": [ + "Wallets" + ], + "summary": "Init import wallet", + "description": "Initialize a new wallet import.", + "operationId": "InitImportWallet", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InitImportWalletRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/init_otp": { + "post": { + "tags": [ + "User Verification" + ], + "summary": "Init generic OTP", + "description": "Initiate a generic OTP activity.", + "operationId": "InitOtp", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InitOtpRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/init_otp_auth": { + "post": { + "tags": [ + "User Auth" + ], + "summary": "Init OTP auth", + "description": "Initiate an OTP auth activity.", + "operationId": "InitOtpAuth", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InitOtpAuthRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/init_user_email_recovery": { + "post": { + "tags": [ + "User Recovery" + ], + "summary": "Init email recovery", + "description": "Initialize a new email recovery.", + "operationId": "InitUserEmailRecovery", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InitUserEmailRecoveryRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/oauth": { + "post": { + "tags": [ + "User Auth" + ], + "summary": "Oauth", + "description": "Authenticate a user with an OIDC token (Oauth).", + "operationId": "Oauth", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OauthRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/oauth2_authenticate": { + "post": { + "tags": [ + "User Auth" + ], + "summary": "OAuth 2.0 authentication", + "description": "Authenticate a user with an OAuth 2.0 provider and receive an OIDC token to use with the LoginWithOAuth or CreateSubOrganization activities", + "operationId": "Oauth2Authenticate", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Oauth2AuthenticateRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/oauth_login": { + "post": { + "tags": [ + "Sessions" + ], + "summary": "Login with Oauth", + "description": "Create an Oauth session for a user.", + "operationId": "OauthLogin", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OauthLoginRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/otp_auth": { + "post": { + "tags": [ + "User Auth" + ], + "summary": "OTP auth", + "description": "Authenticate a user with an OTP code sent via email or SMS.", + "operationId": "OtpAuth", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OtpAuthRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/otp_login": { + "post": { + "tags": [ + "Sessions" + ], + "summary": "Login with OTP", + "description": "Create an OTP session for a user.", + "operationId": "OtpLogin", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OtpLoginRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/recover_user": { + "post": { + "tags": [ + "User Recovery" + ], + "summary": "Recover a user", + "description": "Complete the process of recovering a user by adding an authenticator.", + "operationId": "RecoverUser", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RecoverUserRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/reject_activity": { + "post": { + "tags": [ + "Consensus" + ], + "summary": "Reject activity", + "description": "Reject an activity.", + "operationId": "RejectActivity", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RejectActivityRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/remove_ip_allowlist": { + "post": { + "tags": [ + "IP Allowlist" + ], + "summary": "Remove IP Allowlist", + "description": "Delete IP allowlist and all associated rules for organization or API key. After removal, access will be determined by organization-level allowlist (for API keys) or allowed from all IPs (for organizations).", + "operationId": "RemoveIpAllowlist", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RemoveIpAllowlistRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/remove_organization_feature": { + "post": { + "tags": [ + "Features" + ], + "summary": "Remove organization feature", + "description": "Remove an organization feature. This activity must be approved by the current root quorum.", + "operationId": "RemoveOrganizationFeature", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RemoveOrganizationFeatureRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/restore_tvc_deployment": { + "post": { + "tags": [ + "TVC" + ], + "summary": "Restore a TVC Deployment", + "description": "Restore a deleted TVC Deployment", + "operationId": "RestoreTvcDeployment", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RestoreTvcDeploymentRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/set_ip_allowlist": { + "post": { + "tags": [ + "IP Allowlist" + ], + "summary": "Set IP Allowlist", + "description": "Create or update IP allowlist and rules for organization or API key. The IP allowlist restricts API access to specific CIDR blocks. Organization-level allowlists apply to all API keys unless overridden by a key-specific allowlist.", + "operationId": "SetIpAllowlist", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SetIpAllowlistRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/set_organization_feature": { + "post": { + "tags": [ + "Features" + ], + "summary": "Set organization feature", + "description": "Set an organization feature. This activity must be approved by the current root quorum.", + "operationId": "SetOrganizationFeature", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SetOrganizationFeatureRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/set_tvc_app_live_deployment": { + "post": { + "tags": [ + "TVC" + ], + "summary": "Set TVC App live deployment", + "description": "Set the live deployment for a TVC App", + "operationId": "UpdateTvcAppLiveDeployment", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateTvcAppLiveDeploymentRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/sign_raw_payload": { + "post": { + "tags": [ + "Signing" + ], + "summary": "Sign raw payload", + "description": "Sign a raw payload.", + "operationId": "SignRawPayload", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SignRawPayloadRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/sign_raw_payloads": { + "post": { + "tags": [ + "Signing" + ], + "summary": "Sign raw payloads", + "description": "Sign multiple raw payloads with the same signing parameters.", + "operationId": "SignRawPayloads", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SignRawPayloadsRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/sign_transaction": { + "post": { + "tags": [ + "Signing" + ], + "summary": "Sign transaction", + "description": "Sign a transaction.", + "operationId": "SignTransaction", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SignTransactionRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/sol_send_transaction": { + "post": { + "tags": [ + "Broadcasting" + ], + "summary": "Broadcast SVM transaction", + "description": "Submit a transaction intent describing an SVM transaction you would like to broadcast. Supports single- and multi-signer intents via activity type versioning.", + "operationId": "SolSendTransaction", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SolSendTransactionRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/spark_claim_transfer": { + "post": { + "tags": [ + "Signing" + ], + "summary": "Claim Spark transfer", + "description": "Construct receiver-side encrypted operator packages to claim a Spark transfer. Does not perform FROST signing.", + "operationId": "SparkClaimTransfer", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SparkClaimTransferRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/spark_prepare_lightning_receive": { + "post": { + "tags": [ + "Signing" + ], + "summary": "Spark prepare Lightning receive", + "description": "Generate a Lightning preimage and distribute Feldman shares to operators for a Spark Lightning receive. Does not perform FROST signing.", + "operationId": "SparkPrepareLightningReceive", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SparkPrepareLightningReceiveRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/spark_prepare_transfer": { + "post": { + "tags": [ + "Signing" + ], + "summary": "Prepare Spark transfer", + "description": "Construct sender-side encrypted operator packages for a Spark BTC transfer. Does not perform FROST signing.", + "operationId": "SparkPrepareTransfer", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SparkPrepareTransferRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/spark_sign_frost": { + "post": { + "tags": [ + "Signing" + ], + "summary": "Sign Frost Spark", + "description": "Perform pure FROST partial signing for a Spark wallet. Produces partial signatures without constructing operator packages.", + "operationId": "SparkSignFrost", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SparkSignFrostRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/stamp_login": { + "post": { + "tags": [ + "Sessions" + ], + "summary": "Login with a stamp", + "description": "Create a session for a user through stamping client side (API key, wallet client, or passkey client).", + "operationId": "StampLogin", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StampLoginRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/update_fiat_on_ramp_credential": { + "post": { + "tags": [ + "On Ramp" + ], + "summary": "Update a Fiat On Ramp Credential", + "description": "Update a fiat on ramp provider credential", + "operationId": "UpdateFiatOnRampCredential", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateFiatOnRampCredentialRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/update_mfa_policy": { + "post": { + "tags": [ + "MFA Policies" + ], + "summary": "Update MFA policy", + "description": "Update an MFA policy for a user.", + "operationId": "UpdateMfaPolicy", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateMfaPolicyRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/update_oauth2_credential": { + "post": { + "tags": [ + "User Auth" + ], + "summary": "Update an OAuth 2.0 Credential", + "description": "Update an OAuth 2.0 provider credential", + "operationId": "UpdateOauth2Credential", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateOauth2CredentialRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/update_organization_name": { + "post": { + "tags": [ + "Organizations" + ], + "summary": "Update organization name", + "description": "Update the name of an organization.", + "operationId": "UpdateOrganizationName", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateOrganizationNameRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/update_policy": { + "post": { + "tags": [ + "Policies" + ], + "summary": "Update policy", + "description": "Update an existing policy.", + "operationId": "UpdatePolicy", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdatePolicyRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/update_private_key_tag": { + "post": { + "tags": [ + "Private Key Tags" + ], + "summary": "Update private key tag", + "description": "Update human-readable name or associated private keys. Note that this activity is atomic: all of the updates will succeed at once, or all of them will fail.", + "operationId": "UpdatePrivateKeyTag", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdatePrivateKeyTagRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/update_root_quorum": { + "post": { + "tags": [ + "Organizations" + ], + "summary": "Update root quorum", + "description": "Set the threshold and members of the root quorum. This activity must be approved by the current root quorum.", + "operationId": "UpdateRootQuorum", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateRootQuorumRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/update_user": { + "post": { + "tags": [ + "Users" + ], + "summary": "Update user", + "description": "Update a user in an existing organization.", + "operationId": "UpdateUser", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateUserRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/update_user_email": { + "post": { + "tags": [ + "Users" + ], + "summary": "Update user's email", + "description": "Update a user's email in an existing organization.", + "operationId": "UpdateUserEmail", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateUserEmailRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/update_user_name": { + "post": { + "tags": [ + "Users" + ], + "summary": "Update user's name", + "description": "Update a user's name in an existing organization.", + "operationId": "UpdateUserName", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateUserNameRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/update_user_phone_number": { + "post": { + "tags": [ + "Users" + ], + "summary": "Update user's phone number", + "description": "Update a user's phone number in an existing organization.", + "operationId": "UpdateUserPhoneNumber", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateUserPhoneNumberRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/update_user_tag": { + "post": { + "tags": [ + "User Tags" + ], + "summary": "Update user tag", + "description": "Update human-readable name or associated users. Note that this activity is atomic: all of the updates will succeed at once, or all of them will fail.", + "operationId": "UpdateUserTag", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateUserTagRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/update_wallet": { + "post": { + "tags": [ + "Wallets" + ], + "summary": "Update wallet", + "description": "Update a wallet for an organization.", + "operationId": "UpdateWallet", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateWalletRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/update_webhook_endpoint": { + "post": { + "tags": [ + "Organizations" + ], + "summary": "Update webhook endpoint", + "description": "Update a webhook endpoint for an organization.", + "operationId": "UpdateWebhookEndpoint", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateWebhookEndpointRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/upsert_swap_config": { + "post": { + "tags": [ + "Swaps" + ], + "summary": "Upsert swap config", + "description": "Enable or disable swap configuration for an organization.", + "operationId": "UpsertSwapConfig", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpsertSwapConfigRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/public/v1/submit/verify_otp": { + "post": { + "tags": [ + "User Verification" + ], + "summary": "Verify generic OTP", + "description": "Verify a generic OTP.", + "operationId": "VerifyOtp", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VerifyOtpRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ActivityResponse" + } + } + } + } + } + } + }, + "/tkhq/api/v1/noop-codegen-anchor": { + "post": { + "operationId": "NOOPCodegenAnchor", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NOOPCodegenAnchorResponse" + } + } + } + } + } + } + } + }, + "components": { + "securitySchemes": { + "ApiKeyAuth": { + "type": "apiKey", + "name": "X-Stamp", + "in": "header" + }, + "AttestedAuth": { + "type": "apiKey", + "name": "X-Stamp-Attested", + "in": "header" + }, + "AuthenticatorAuth": { + "type": "apiKey", + "name": "X-Stamp-WebAuthn", + "in": "header" + } + }, + "schemas": { + "AcceptInvitationIntent": { + "type": "object", + "properties": { + "invitationId": { + "type": "string", + "description": "Unique identifier for a given Invitation object." + }, + "userId": { + "type": "string", + "description": "Unique identifier for a given User." + }, + "authenticator": { + "$ref": "#/components/schemas/AuthenticatorParams" + } + }, + "required": [ + "invitationId", + "userId", + "authenticator" + ] + }, + "AcceptInvitationIntentV2": { + "type": "object", + "properties": { + "invitationId": { + "type": "string", + "description": "Unique identifier for a given Invitation object." + }, + "userId": { + "type": "string", + "description": "Unique identifier for a given User." + }, + "authenticator": { + "$ref": "#/components/schemas/AuthenticatorParamsV2" + } + }, + "required": [ + "invitationId", + "userId", + "authenticator" + ] + }, + "AcceptInvitationResult": { + "type": "object", + "properties": { + "invitationId": { + "type": "string", + "description": "Unique identifier for a given Invitation." + }, + "userId": { + "type": "string", + "description": "Unique identifier for a given User." + } + }, + "required": [ + "invitationId", + "userId" + ] + }, + "AccessType": { + "type": "string", + "enum": [ + "ACCESS_TYPE_WEB", + "ACCESS_TYPE_API", + "ACCESS_TYPE_ALL" + ] + }, + "ActivateBillingTierIntent": { + "type": "object", + "properties": { + "productId": { + "type": "string", + "description": "The product that the customer wants to subscribe to." + }, + "orbPlanId": { + "type": "string", + "nullable": true + } + }, + "required": [ + "productId" + ] + }, + "ActivateBillingTierResult": { + "type": "object", + "properties": { + "productId": { + "type": "string", + "description": "The id of the product being subscribed to." + } + }, + "required": [ + "productId" + ] + }, + "Activity": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for a given Activity object." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "status": { + "$ref": "#/components/schemas/ActivityStatus" + }, + "type": { + "$ref": "#/components/schemas/ActivityType" + }, + "intent": { + "$ref": "#/components/schemas/Intent" + }, + "result": { + "$ref": "#/components/schemas/Result" + }, + "votes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Vote" + }, + "description": "A list of objects representing a particular User's approval or rejection of a Consensus request, including all relevant metadata." + }, + "appProofs": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AppProof" + }, + "description": "A list of App Proofs generated by enclaves during activity execution, providing verifiable attestations of performed operations." + }, + "fingerprint": { + "type": "string", + "description": "An artifact verifying a User's action." + }, + "canApprove": { + "type": "boolean" + }, + "canReject": { + "type": "boolean" + }, + "createdAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + }, + "failure": { + "$ref": "#/components/schemas/Status" + } + }, + "required": [ + "id", + "organizationId", + "status", + "type", + "intent", + "result", + "votes", + "fingerprint", + "canApprove", + "canReject", + "createdAt", + "updatedAt" + ] + }, + "ActivityResponse": { + "type": "object", + "properties": { + "activity": { + "$ref": "#/components/schemas/Activity" + } + }, + "required": [ + "activity" + ] + }, + "ActivityStatus": { + "type": "string", + "enum": [ + "ACTIVITY_STATUS_CREATED", + "ACTIVITY_STATUS_PENDING", + "ACTIVITY_STATUS_COMPLETED", + "ACTIVITY_STATUS_FAILED", + "ACTIVITY_STATUS_CONSENSUS_NEEDED", + "ACTIVITY_STATUS_REJECTED", + "ACTIVITY_STATUS_AUTHENTICATORS_NEEDED" + ] + }, + "ActivityType": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_CREATE_API_KEYS", + "ACTIVITY_TYPE_CREATE_USERS", + "ACTIVITY_TYPE_CREATE_PRIVATE_KEYS", + "ACTIVITY_TYPE_SIGN_RAW_PAYLOAD", + "ACTIVITY_TYPE_CREATE_INVITATIONS", + "ACTIVITY_TYPE_ACCEPT_INVITATION", + "ACTIVITY_TYPE_CREATE_POLICY", + "ACTIVITY_TYPE_DISABLE_PRIVATE_KEY", + "ACTIVITY_TYPE_DELETE_USERS", + "ACTIVITY_TYPE_DELETE_API_KEYS", + "ACTIVITY_TYPE_DELETE_INVITATION", + "ACTIVITY_TYPE_DELETE_ORGANIZATION", + "ACTIVITY_TYPE_DELETE_POLICY", + "ACTIVITY_TYPE_CREATE_USER_TAG", + "ACTIVITY_TYPE_DELETE_USER_TAGS", + "ACTIVITY_TYPE_CREATE_ORGANIZATION", + "ACTIVITY_TYPE_SIGN_TRANSACTION", + "ACTIVITY_TYPE_APPROVE_ACTIVITY", + "ACTIVITY_TYPE_REJECT_ACTIVITY", + "ACTIVITY_TYPE_DELETE_AUTHENTICATORS", + "ACTIVITY_TYPE_CREATE_AUTHENTICATORS", + "ACTIVITY_TYPE_CREATE_PRIVATE_KEY_TAG", + "ACTIVITY_TYPE_DELETE_PRIVATE_KEY_TAGS", + "ACTIVITY_TYPE_SET_PAYMENT_METHOD", + "ACTIVITY_TYPE_ACTIVATE_BILLING_TIER", + "ACTIVITY_TYPE_DELETE_PAYMENT_METHOD", + "ACTIVITY_TYPE_CREATE_POLICY_V2", + "ACTIVITY_TYPE_CREATE_POLICY_V3", + "ACTIVITY_TYPE_CREATE_API_ONLY_USERS", + "ACTIVITY_TYPE_UPDATE_ROOT_QUORUM", + "ACTIVITY_TYPE_UPDATE_USER_TAG", + "ACTIVITY_TYPE_UPDATE_PRIVATE_KEY_TAG", + "ACTIVITY_TYPE_CREATE_AUTHENTICATORS_V2", + "ACTIVITY_TYPE_CREATE_ORGANIZATION_V2", + "ACTIVITY_TYPE_CREATE_USERS_V2", + "ACTIVITY_TYPE_ACCEPT_INVITATION_V2", + "ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION", + "ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V2", + "ACTIVITY_TYPE_UPDATE_ALLOWED_ORIGINS", + "ACTIVITY_TYPE_CREATE_PRIVATE_KEYS_V2", + "ACTIVITY_TYPE_UPDATE_USER", + "ACTIVITY_TYPE_UPDATE_POLICY", + "ACTIVITY_TYPE_SET_PAYMENT_METHOD_V2", + "ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V3", + "ACTIVITY_TYPE_CREATE_WALLET", + "ACTIVITY_TYPE_CREATE_WALLET_ACCOUNTS", + "ACTIVITY_TYPE_INIT_USER_EMAIL_RECOVERY", + "ACTIVITY_TYPE_RECOVER_USER", + "ACTIVITY_TYPE_SET_ORGANIZATION_FEATURE", + "ACTIVITY_TYPE_REMOVE_ORGANIZATION_FEATURE", + "ACTIVITY_TYPE_SIGN_RAW_PAYLOAD_V2", + "ACTIVITY_TYPE_SIGN_TRANSACTION_V2", + "ACTIVITY_TYPE_EXPORT_PRIVATE_KEY", + "ACTIVITY_TYPE_EXPORT_WALLET", + "ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V4", + "ACTIVITY_TYPE_EMAIL_AUTH", + "ACTIVITY_TYPE_EXPORT_WALLET_ACCOUNT", + "ACTIVITY_TYPE_INIT_IMPORT_WALLET", + "ACTIVITY_TYPE_IMPORT_WALLET", + "ACTIVITY_TYPE_INIT_IMPORT_PRIVATE_KEY", + "ACTIVITY_TYPE_IMPORT_PRIVATE_KEY", + "ACTIVITY_TYPE_CREATE_POLICIES", + "ACTIVITY_TYPE_SIGN_RAW_PAYLOADS", + "ACTIVITY_TYPE_CREATE_READ_ONLY_SESSION", + "ACTIVITY_TYPE_CREATE_OAUTH_PROVIDERS", + "ACTIVITY_TYPE_DELETE_OAUTH_PROVIDERS", + "ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V5", + "ACTIVITY_TYPE_OAUTH", + "ACTIVITY_TYPE_CREATE_API_KEYS_V2", + "ACTIVITY_TYPE_CREATE_READ_WRITE_SESSION", + "ACTIVITY_TYPE_EMAIL_AUTH_V2", + "ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V6", + "ACTIVITY_TYPE_DELETE_PRIVATE_KEYS", + "ACTIVITY_TYPE_DELETE_WALLETS", + "ACTIVITY_TYPE_CREATE_READ_WRITE_SESSION_V2", + "ACTIVITY_TYPE_DELETE_SUB_ORGANIZATION", + "ACTIVITY_TYPE_INIT_OTP_AUTH", + "ACTIVITY_TYPE_OTP_AUTH", + "ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V7", + "ACTIVITY_TYPE_UPDATE_WALLET", + "ACTIVITY_TYPE_UPDATE_POLICY_V2", + "ACTIVITY_TYPE_CREATE_USERS_V3", + "ACTIVITY_TYPE_INIT_OTP_AUTH_V2", + "ACTIVITY_TYPE_INIT_OTP", + "ACTIVITY_TYPE_VERIFY_OTP", + "ACTIVITY_TYPE_OTP_LOGIN", + "ACTIVITY_TYPE_STAMP_LOGIN", + "ACTIVITY_TYPE_OAUTH_LOGIN", + "ACTIVITY_TYPE_UPDATE_USER_NAME", + "ACTIVITY_TYPE_UPDATE_USER_EMAIL", + "ACTIVITY_TYPE_UPDATE_USER_PHONE_NUMBER", + "ACTIVITY_TYPE_INIT_FIAT_ON_RAMP", + "ACTIVITY_TYPE_CREATE_SMART_CONTRACT_INTERFACE", + "ACTIVITY_TYPE_DELETE_SMART_CONTRACT_INTERFACE", + "ACTIVITY_TYPE_ENABLE_AUTH_PROXY", + "ACTIVITY_TYPE_DISABLE_AUTH_PROXY", + "ACTIVITY_TYPE_UPDATE_AUTH_PROXY_CONFIG", + "ACTIVITY_TYPE_CREATE_OAUTH2_CREDENTIAL", + "ACTIVITY_TYPE_UPDATE_OAUTH2_CREDENTIAL", + "ACTIVITY_TYPE_DELETE_OAUTH2_CREDENTIAL", + "ACTIVITY_TYPE_OAUTH2_AUTHENTICATE", + "ACTIVITY_TYPE_DELETE_WALLET_ACCOUNTS", + "ACTIVITY_TYPE_DELETE_POLICIES", + "ACTIVITY_TYPE_ETH_SEND_RAW_TRANSACTION", + "ACTIVITY_TYPE_ETH_SEND_TRANSACTION", + "ACTIVITY_TYPE_CREATE_FIAT_ON_RAMP_CREDENTIAL", + "ACTIVITY_TYPE_UPDATE_FIAT_ON_RAMP_CREDENTIAL", + "ACTIVITY_TYPE_DELETE_FIAT_ON_RAMP_CREDENTIAL", + "ACTIVITY_TYPE_EMAIL_AUTH_V3", + "ACTIVITY_TYPE_INIT_USER_EMAIL_RECOVERY_V2", + "ACTIVITY_TYPE_INIT_OTP_AUTH_V3", + "ACTIVITY_TYPE_INIT_OTP_V2", + "ACTIVITY_TYPE_UPSERT_GAS_USAGE_CONFIG", + "ACTIVITY_TYPE_CREATE_TVC_APP", + "ACTIVITY_TYPE_CREATE_TVC_DEPLOYMENT", + "ACTIVITY_TYPE_CREATE_TVC_MANIFEST_APPROVALS", + "ACTIVITY_TYPE_SOL_SEND_TRANSACTION", + "ACTIVITY_TYPE_INIT_OTP_V3", + "ACTIVITY_TYPE_VERIFY_OTP_V2", + "ACTIVITY_TYPE_OTP_LOGIN_V2", + "ACTIVITY_TYPE_UPDATE_ORGANIZATION_NAME", + "ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V8", + "ACTIVITY_TYPE_CREATE_OAUTH_PROVIDERS_V2", + "ACTIVITY_TYPE_CREATE_USERS_V4", + "ACTIVITY_TYPE_CREATE_WEBHOOK_ENDPOINT", + "ACTIVITY_TYPE_UPDATE_WEBHOOK_ENDPOINT", + "ACTIVITY_TYPE_DELETE_WEBHOOK_ENDPOINT", + "ACTIVITY_TYPE_SET_IP_ALLOWLIST", + "ACTIVITY_TYPE_REMOVE_IP_ALLOWLIST", + "ACTIVITY_TYPE_UPDATE_TVC_APP_LIVE_DEPLOYMENT", + "ACTIVITY_TYPE_DELETE_TVC_DEPLOYMENT", + "ACTIVITY_TYPE_DELETE_TVC_APP_AND_DEPLOYMENTS", + "ACTIVITY_TYPE_RESTORE_TVC_DEPLOYMENT", + "ACTIVITY_TYPE_SPARK_SIGN_FROST", + "ACTIVITY_TYPE_SPARK_PREPARE_TRANSFER", + "ACTIVITY_TYPE_SPARK_CLAIM_TRANSFER", + "ACTIVITY_TYPE_SPARK_PREPARE_LIGHTNING_RECEIVE", + "ACTIVITY_TYPE_POST_TVC_QUORUM_KEY_SHARE", + "ACTIVITY_TYPE_ETH_SEND_TRANSACTION_V2", + "ACTIVITY_TYPE_CREATE_MFA_POLICY", + "ACTIVITY_TYPE_UPDATE_MFA_POLICY", + "ACTIVITY_TYPE_DELETE_MFA_POLICY", + "ACTIVITY_TYPE_CREATE_SESSION_PROFILE", + "ACTIVITY_TYPE_EARN_DEPLOY_WRAPPER", + "ACTIVITY_TYPE_EARN_DEPOSIT", + "ACTIVITY_TYPE_EARN_WITHDRAW", + "ACTIVITY_TYPE_EXECUTE_SWAP", + "ACTIVITY_TYPE_UPSERT_SWAP_CONFIG", + "ACTIVITY_TYPE_CREATE_TVC_OPERATOR", + "ACTIVITY_TYPE_CREATE_TVC_QUORUM_KEY", + "ACTIVITY_TYPE_RE_ENCRYPT_TVC_QUORUM_KEY_SHARE", + "ACTIVITY_TYPE_INIT_IMPORT_SECRETS", + "ACTIVITY_TYPE_SOL_SEND_TRANSACTION_V2", + "ACTIVITY_TYPE_CLAIM_SWAP_FEES", + "ACTIVITY_TYPE_EARN_SET_WRAPPER_STATE", + "ACTIVITY_TYPE_CLAIM_EARN_FEES", + "ACTIVITY_TYPE_UPDATE_WALLET_ACCOUNT_NAME", + "ACTIVITY_TYPE_ETH_UNDELEGATE_7702", + "ACTIVITY_TYPE_EXECUTE_SWAP_V2", + "ACTIVITY_TYPE_CREATE_SWAP_QUOTE", + "ACTIVITY_TYPE_IMPORT_SECRETS" + ] + }, + "AddressFormat": { + "type": "string", + "enum": [ + "ADDRESS_FORMAT_UNCOMPRESSED", + "ADDRESS_FORMAT_COMPRESSED", + "ADDRESS_FORMAT_ETHEREUM", + "ADDRESS_FORMAT_SOLANA", + "ADDRESS_FORMAT_COSMOS", + "ADDRESS_FORMAT_TRON", + "ADDRESS_FORMAT_SUI", + "ADDRESS_FORMAT_APTOS", + "ADDRESS_FORMAT_BITCOIN_MAINNET_P2PKH", + "ADDRESS_FORMAT_BITCOIN_MAINNET_P2SH", + "ADDRESS_FORMAT_BITCOIN_MAINNET_P2WPKH", + "ADDRESS_FORMAT_BITCOIN_MAINNET_P2WSH", + "ADDRESS_FORMAT_BITCOIN_MAINNET_P2TR", + "ADDRESS_FORMAT_BITCOIN_TESTNET_P2PKH", + "ADDRESS_FORMAT_BITCOIN_TESTNET_P2SH", + "ADDRESS_FORMAT_BITCOIN_TESTNET_P2WPKH", + "ADDRESS_FORMAT_BITCOIN_TESTNET_P2WSH", + "ADDRESS_FORMAT_BITCOIN_TESTNET_P2TR", + "ADDRESS_FORMAT_BITCOIN_SIGNET_P2PKH", + "ADDRESS_FORMAT_BITCOIN_SIGNET_P2SH", + "ADDRESS_FORMAT_BITCOIN_SIGNET_P2WPKH", + "ADDRESS_FORMAT_BITCOIN_SIGNET_P2WSH", + "ADDRESS_FORMAT_BITCOIN_SIGNET_P2TR", + "ADDRESS_FORMAT_BITCOIN_REGTEST_P2PKH", + "ADDRESS_FORMAT_BITCOIN_REGTEST_P2SH", + "ADDRESS_FORMAT_BITCOIN_REGTEST_P2WPKH", + "ADDRESS_FORMAT_BITCOIN_REGTEST_P2WSH", + "ADDRESS_FORMAT_BITCOIN_REGTEST_P2TR", + "ADDRESS_FORMAT_SEI", + "ADDRESS_FORMAT_XLM", + "ADDRESS_FORMAT_DOGE_MAINNET", + "ADDRESS_FORMAT_DOGE_TESTNET", + "ADDRESS_FORMAT_TON_V3R2", + "ADDRESS_FORMAT_TON_V4R2", + "ADDRESS_FORMAT_TON_V5R1", + "ADDRESS_FORMAT_XRP", + "ADDRESS_FORMAT_SPARK_MAINNET", + "ADDRESS_FORMAT_SPARK_REGTEST" + ] + }, + "Any": { + "type": "object", + "properties": { + "@type": { + "type": "string" + } + }, + "additionalProperties": {} + }, + "ApiKey": { + "type": "object", + "properties": { + "credential": { + "$ref": "#/components/schemas/external.data.v1.Credential" + }, + "apiKeyId": { + "type": "string", + "description": "Unique identifier for a given API Key." + }, + "apiKeyName": { + "type": "string", + "description": "Human-readable name for an API Key." + }, + "createdAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + }, + "expirationSeconds": { + "type": "string", + "format": "uint64", + "description": "Optional window (in seconds) indicating how long the API Key should last.", + "nullable": true + } + }, + "required": [ + "credential", + "apiKeyId", + "apiKeyName", + "createdAt", + "updatedAt" + ] + }, + "ApiKeyCurve": { + "type": "string", + "enum": [ + "API_KEY_CURVE_P256", + "API_KEY_CURVE_SECP256K1", + "API_KEY_CURVE_ED25519" + ] + }, + "ApiKeyParams": { + "type": "object", + "properties": { + "apiKeyName": { + "type": "string", + "description": "Human-readable name for an API Key." + }, + "publicKey": { + "type": "string", + "description": "The public component of a cryptographic key pair used to sign messages and transactions." + }, + "expirationSeconds": { + "type": "string", + "description": "Optional window (in seconds) indicating how long the API Key should last.", + "nullable": true + } + }, + "required": [ + "apiKeyName", + "publicKey" + ] + }, + "ApiKeyParamsV2": { + "type": "object", + "properties": { + "apiKeyName": { + "type": "string", + "description": "Human-readable name for an API Key." + }, + "publicKey": { + "type": "string", + "description": "The public component of a cryptographic key pair used to sign messages and transactions." + }, + "curveType": { + "$ref": "#/components/schemas/ApiKeyCurve" + }, + "expirationSeconds": { + "type": "string", + "description": "Optional window (in seconds) indicating how long the API Key should last.", + "nullable": true + } + }, + "required": [ + "apiKeyName", + "publicKey", + "curveType" + ] + }, + "ApiOnlyUserParams": { + "type": "object", + "properties": { + "userName": { + "type": "string", + "description": "The name of the new API-only User." + }, + "userEmail": { + "type": "string", + "description": "The email address for this API-only User (optional).", + "nullable": true + }, + "userTags": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of tags assigned to the new API-only User. This field, if not needed, should be an empty array in your request body." + }, + "apiKeys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ApiKeyParams" + }, + "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." + } + }, + "required": [ + "userName", + "userTags", + "apiKeys" + ] + }, + "AppProof": { + "type": "object", + "properties": { + "scheme": { + "$ref": "#/components/schemas/data.v1.SignatureScheme" + }, + "publicKey": { + "type": "string", + "description": "Ephemeral public key." + }, + "proofPayload": { + "type": "string", + "description": "JSON serialized AppProofPayload." + }, + "signature": { + "type": "string", + "description": "Signature over hashed proof_payload." + } + }, + "required": [ + "scheme", + "publicKey", + "proofPayload", + "signature" + ] + }, + "AppStatus": { + "type": "object", + "properties": { + "appId": { + "type": "string", + "description": "Unique identifier for this TVC App" + }, + "deployments": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DeploymentStatus" + }, + "description": "List of deployment statuses for this app" + }, + "targetedDeploymentId": { + "type": "string", + "description": "The deployment ID currently serving traffic for this app" + } + }, + "required": [ + "appId", + "deployments", + "targetedDeploymentId" + ] + }, + "ApproveActivityIntent": { + "type": "object", + "properties": { + "fingerprint": { + "type": "string", + "description": "An artifact verifying a User's action." + } + }, + "required": [ + "fingerprint" + ] + }, + "ApproveActivityRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_APPROVE_ACTIVITY" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/ApproveActivityIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "AssetBalance": { + "type": "object", + "properties": { + "caip19": { + "type": "string", + "description": "The caip-19 asset identifier" + }, + "symbol": { + "type": "string", + "description": "The asset symbol" + }, + "balance": { + "type": "string", + "description": "The balance in atomic units" + }, + "decimals": { + "type": "integer", + "format": "int32", + "description": "The number of decimals this asset uses" + }, + "display": { + "$ref": "#/components/schemas/AssetBalanceDisplay" + }, + "name": { + "type": "string", + "description": "The asset name" + } + } + }, + "AssetBalanceDisplay": { + "type": "object", + "properties": { + "usd": { + "type": "string", + "description": "USD value for display purposes only. Do not do any arithmetic or calculations with these, as the results could be imprecise." + }, + "crypto": { + "type": "string", + "description": "Normalized crypto value for display purposes only. Do not do any arithmetic or calculations with these, as the results could be imprecise." + } + } + }, + "AssetMetadata": { + "type": "object", + "properties": { + "caip19": { + "type": "string", + "description": "The caip-19 asset identifier" + }, + "symbol": { + "type": "string", + "description": "The asset symbol" + }, + "decimals": { + "type": "integer", + "format": "int32", + "description": "The number of decimals this asset uses" + }, + "logoUrl": { + "type": "string", + "description": "The url of the asset logo" + }, + "name": { + "type": "string", + "description": "The asset name" + }, + "stable": { + "type": "boolean", + "description": "Whether this asset is on Turnkey's stablecoin list (used for stablepair swap fee pricing)." + } + } + }, + "Attestation": { + "type": "object", + "properties": { + "credentialId": { + "type": "string", + "description": "The cbor encoded then base64 url encoded id of the credential." + }, + "clientDataJson": { + "type": "string", + "description": "A base64 url encoded payload containing metadata about the signing context and the challenge." + }, + "attestationObject": { + "type": "string", + "description": "A base64 url encoded payload containing authenticator data and any attestation the webauthn provider chooses." + }, + "transports": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AuthenticatorTransport" + }, + "description": "The type of authenticator transports." + } + }, + "required": [ + "credentialId", + "clientDataJson", + "attestationObject", + "transports" + ] + }, + "AuthenticationMethod": { + "type": "object", + "properties": { + "type": { + "$ref": "#/components/schemas/AuthenticationType" + }, + "id": { + "type": "string", + "description": "Optional specific authenticator ID required (e.g., for requiring a specific session profile id)", + "nullable": true + } + }, + "required": [ + "type" + ] + }, + "AuthenticationMethodParams": { + "type": "object", + "properties": { + "type": { + "$ref": "#/components/schemas/AuthenticationType" + }, + "id": { + "type": "string", + "description": "Optional specific authenticator ID required (e.g., UUID of a passkey authenticator). If not provided, any authenticator of the specified type can be used.", + "nullable": true + } + }, + "required": [ + "type" + ] + }, + "AuthenticationType": { + "type": "string", + "enum": [ + "AUTHENTICATION_TYPE_EMAIL_OTP", + "AUTHENTICATION_TYPE_SMS_OTP", + "AUTHENTICATION_TYPE_PASSKEY", + "AUTHENTICATION_TYPE_API_KEY", + "AUTHENTICATION_TYPE_OAUTH", + "AUTHENTICATION_TYPE_SESSION" + ] + }, + "Authenticator": { + "type": "object", + "properties": { + "transports": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AuthenticatorTransport" + }, + "description": "Types of transports that may be used by an Authenticator (e.g., USB, NFC, BLE)." + }, + "attestationType": { + "type": "string" + }, + "aaguid": { + "type": "string", + "description": "Identifier indicating the type of the Security Key." + }, + "credentialId": { + "type": "string", + "description": "Unique identifier for a WebAuthn credential." + }, + "model": { + "type": "string", + "description": "The type of Authenticator device." + }, + "credential": { + "$ref": "#/components/schemas/external.data.v1.Credential" + }, + "authenticatorId": { + "type": "string", + "description": "Unique identifier for a given Authenticator." + }, + "authenticatorName": { + "type": "string", + "description": "Human-readable name for an Authenticator." + }, + "createdAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + } + }, + "required": [ + "transports", + "attestationType", + "aaguid", + "credentialId", + "model", + "credential", + "authenticatorId", + "authenticatorName", + "createdAt", + "updatedAt" + ] + }, + "AuthenticatorAttestationResponse": { + "type": "object", + "properties": { + "clientDataJson": { + "type": "string" + }, + "attestationObject": { + "type": "string" + }, + "transports": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AuthenticatorTransport" + } + }, + "authenticatorAttachment": { + "type": "string", + "enum": [ + "cross-platform", + "platform" + ], + "nullable": true + } + }, + "required": [ + "clientDataJson", + "attestationObject" + ] + }, + "AuthenticatorParams": { + "type": "object", + "properties": { + "authenticatorName": { + "type": "string", + "description": "Human-readable name for an Authenticator." + }, + "userId": { + "type": "string", + "description": "Unique identifier for a given User." + }, + "attestation": { + "$ref": "#/components/schemas/PublicKeyCredentialWithAttestation" + }, + "challenge": { + "type": "string", + "description": "Challenge presented for authentication purposes." + } + }, + "required": [ + "authenticatorName", + "userId", + "attestation", + "challenge" + ] + }, + "AuthenticatorParamsV2": { + "type": "object", + "properties": { + "authenticatorName": { + "type": "string", + "description": "Human-readable name for an Authenticator." + }, + "challenge": { + "type": "string", + "description": "Challenge presented for authentication purposes." + }, + "attestation": { + "$ref": "#/components/schemas/Attestation" + } + }, + "required": [ + "authenticatorName", + "challenge", + "attestation" + ] + }, + "AuthenticatorTransport": { + "type": "string", + "enum": [ + "AUTHENTICATOR_TRANSPORT_BLE", + "AUTHENTICATOR_TRANSPORT_INTERNAL", + "AUTHENTICATOR_TRANSPORT_NFC", + "AUTHENTICATOR_TRANSPORT_USB", + "AUTHENTICATOR_TRANSPORT_HYBRID" + ] + }, + "BootProof": { + "type": "object", + "properties": { + "ephemeralPublicKeyHex": { + "type": "string", + "description": "The hex encoded Ephemeral Public Key." + }, + "awsAttestationDocB64": { + "type": "string", + "description": "The DER encoded COSE Sign1 struct Attestation doc." + }, + "qosManifestB64": { + "type": "string", + "description": "The base64 encoded QOS manifest. Encoding depends on qos_manifest_version." + }, + "qosManifestEnvelopeB64": { + "type": "string", + "description": "The base64 encoded QOS manifest envelope. Encoding depends on qos_manifest_version." + }, + "deploymentLabel": { + "type": "string", + "description": "The label under which the enclave app was deployed." + }, + "enclaveApp": { + "type": "string", + "description": "Name of the enclave app" + }, + "owner": { + "type": "string", + "description": "Owner of the app i.e. 'tkhq'" + }, + "createdAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + }, + "qosManifestVersion": { + "type": "string", + "description": "QOS manifest schema version.", + "nullable": true + } + }, + "required": [ + "ephemeralPublicKeyHex", + "awsAttestationDocB64", + "qosManifestB64", + "qosManifestEnvelopeB64", + "deploymentLabel", + "enclaveApp", + "owner", + "createdAt" + ] + }, + "BootProofResponse": { + "type": "object", + "properties": { + "bootProof": { + "$ref": "#/components/schemas/BootProof" + } + }, + "required": [ + "bootProof" + ] + }, + "ClaimEarnFeesIntent": { + "type": "object", + "properties": { + "wrapperAddress": { + "type": "string", + "description": "Address of the deployed Earn wrapper to claim fees for. Must be one of the org's deployed wrappers." + } + }, + "required": [ + "wrapperAddress" + ] + }, + "ClaimEarnFeesRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_CLAIM_EARN_FEES" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/ClaimEarnFeesIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "ClaimEarnFeesResult": { + "type": "object", + "properties": { + "claimRequestId": { + "type": "string", + "description": "Identifier to poll claim status and tx hash via GetClaimEarnFeesStatus." + } + }, + "required": [ + "claimRequestId" + ] + }, + "ClaimSwapFeesIntent": { + "type": "object" + }, + "ClaimSwapFeesRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_CLAIM_SWAP_FEES" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/ClaimSwapFeesIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "ClaimSwapFeesResult": { + "type": "object", + "properties": { + "requestId": { + "type": "string", + "description": "Relay claim request ID submitted through the permit endpoint." + } + }, + "required": [ + "requestId" + ] + }, + "ClientSignature": { + "type": "object", + "properties": { + "publicKey": { + "type": "string", + "description": "The public component of a cryptographic key pair used to create the signature." + }, + "scheme": { + "$ref": "#/components/schemas/ClientSignatureScheme" + }, + "message": { + "type": "string", + "description": "The message that was signed." + }, + "signature": { + "type": "string", + "description": "The cryptographic signature over the message." + } + }, + "required": [ + "publicKey", + "scheme", + "message", + "signature" + ] + }, + "ClientSignatureScheme": { + "type": "string", + "enum": [ + "CLIENT_SIGNATURE_SCHEME_API_P256" + ] + }, + "Config": { + "type": "object", + "properties": { + "features": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Feature" + } + }, + "quorum": { + "$ref": "#/components/schemas/external.data.v1.Quorum" + } + } + }, + "CreateApiKeysIntent": { + "type": "object", + "properties": { + "apiKeys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ApiKeyParams" + }, + "description": "A list of API Keys." + }, + "userId": { + "type": "string", + "description": "Unique identifier for a given User." + } + }, + "required": [ + "apiKeys", + "userId" + ] + }, + "CreateApiKeysIntentV2": { + "type": "object", + "properties": { + "apiKeys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ApiKeyParamsV2" + }, + "description": "A list of API Keys." + }, + "userId": { + "type": "string", + "description": "Unique identifier for a given User." + } + }, + "required": [ + "apiKeys", + "userId" + ] + }, + "CreateApiKeysRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_CREATE_API_KEYS_V2" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/CreateApiKeysIntentV2" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "CreateApiKeysResult": { + "type": "object", + "properties": { + "apiKeyIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of API Key IDs." + } + }, + "required": [ + "apiKeyIds" + ] + }, + "CreateApiOnlyUsersIntent": { + "type": "object", + "properties": { + "apiOnlyUsers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ApiOnlyUserParams" + }, + "description": "A list of API-only Users to create." + } + }, + "required": [ + "apiOnlyUsers" + ] + }, + "CreateApiOnlyUsersResult": { + "type": "object", + "properties": { + "userIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of API-only User IDs." + } + }, + "required": [ + "userIds" + ] + }, + "CreateAuthenticatorsIntent": { + "type": "object", + "properties": { + "authenticators": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AuthenticatorParams" + }, + "description": "A list of Authenticators." + }, + "userId": { + "type": "string", + "description": "Unique identifier for a given User." + } + }, + "required": [ + "authenticators", + "userId" + ] + }, + "CreateAuthenticatorsIntentV2": { + "type": "object", + "properties": { + "authenticators": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AuthenticatorParamsV2" + }, + "description": "A list of Authenticators." + }, + "userId": { + "type": "string", + "description": "Unique identifier for a given User." + } + }, + "required": [ + "authenticators", + "userId" + ] + }, + "CreateAuthenticatorsRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_CREATE_AUTHENTICATORS_V2" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/CreateAuthenticatorsIntentV2" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "CreateAuthenticatorsResult": { + "type": "object", + "properties": { + "authenticatorIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of Authenticator IDs." + } + }, + "required": [ + "authenticatorIds" + ] + }, + "CreateFiatOnRampCredentialIntent": { + "type": "object", + "properties": { + "onrampProvider": { + "$ref": "#/components/schemas/FiatOnRampProvider" + }, + "projectId": { + "type": "string", + "description": "Project ID for the on-ramp provider. Some providers, like Coinbase, require this additional identifier", + "nullable": true + }, + "publishableApiKey": { + "type": "string", + "description": "Publishable API key for the on-ramp provider" + }, + "encryptedSecretApiKey": { + "type": "string", + "description": "Secret API key for the on-ramp provider encrypted to our on-ramp encryption public key" + }, + "encryptedPrivateApiKey": { + "type": "string", + "description": "Private API key for the on-ramp provider encrypted to our on-ramp encryption public key. Some providers, like Coinbase, require this additional key.", + "nullable": true + }, + "sandboxMode": { + "type": "boolean", + "description": "If the on-ramp credential is a sandbox credential" + } + }, + "required": [ + "onrampProvider", + "publishableApiKey", + "encryptedSecretApiKey" + ] + }, + "CreateFiatOnRampCredentialRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_CREATE_FIAT_ON_RAMP_CREDENTIAL" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/CreateFiatOnRampCredentialIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "CreateFiatOnRampCredentialResult": { + "type": "object", + "properties": { + "fiatOnRampCredentialId": { + "type": "string", + "description": "Unique identifier of the Fiat On-Ramp credential that was created" + } + }, + "required": [ + "fiatOnRampCredentialId" + ] + }, + "CreateInvitationsIntent": { + "type": "object", + "properties": { + "invitations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/InvitationParams" + }, + "description": "A list of Invitations." + } + }, + "required": [ + "invitations" + ] + }, + "CreateInvitationsRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_CREATE_INVITATIONS" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/CreateInvitationsIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "CreateInvitationsResult": { + "type": "object", + "properties": { + "invitationIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of Invitation IDs" + } + }, + "required": [ + "invitationIds" + ] + }, + "CreateMfaPolicyIntent": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "The ID of the User to add the MFA Policy to." + }, + "mfaPolicyName": { + "type": "string", + "description": "Human-readable name for a Policy." + }, + "condition": { + "type": "string", + "description": "A condition expression that evaluates to true or false, determining when this MFA policy applies." + }, + "requiredAuthenticationMethods": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RequiredAuthenticationMethodParams" + }, + "description": "An ordered list of authentication requirements. Each requirement must be satisfied sequentially to complete MFA." + }, + "order": { + "type": "integer", + "format": "int64", + "description": "The order in which this MFA policy is evaluated, starting from 0, relative to other MFA policies. Lower order values are evaluated first." + }, + "notes": { + "type": "string", + "description": "Notes for an MFA Policy.", + "nullable": true + } + }, + "required": [ + "userId", + "mfaPolicyName", + "condition", + "requiredAuthenticationMethods", + "order" + ] + }, + "CreateMfaPolicyRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_CREATE_MFA_POLICY" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/CreateMfaPolicyIntent" + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "CreateMfaPolicyResult": { + "type": "object", + "properties": { + "mfaPolicyId": { + "type": "string", + "description": "Unique identifier for a given MFA Policy." + } + }, + "required": [ + "mfaPolicyId" + ] + }, + "CreateOauth2CredentialIntent": { + "type": "object", + "properties": { + "provider": { + "$ref": "#/components/schemas/Oauth2Provider" + }, + "clientId": { + "type": "string", + "description": "The Client ID issued by the OAuth 2.0 provider" + }, + "encryptedClientSecret": { + "type": "string", + "description": "The client secret issued by the OAuth 2.0 provider encrypted to the TLS Fetcher quorum key" + } + }, + "required": [ + "provider", + "clientId", + "encryptedClientSecret" + ] + }, + "CreateOauth2CredentialRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_CREATE_OAUTH2_CREDENTIAL" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/CreateOauth2CredentialIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "CreateOauth2CredentialResult": { + "type": "object", + "properties": { + "oauth2CredentialId": { + "type": "string", + "description": "Unique identifier of the OAuth 2.0 credential that was created" + } + }, + "required": [ + "oauth2CredentialId" + ] + }, + "CreateOauthProvidersIntent": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "The ID of the User to add an Oauth provider to" + }, + "oauthProviders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OauthProviderParams" + }, + "description": "A list of Oauth providers." + } + }, + "required": [ + "userId", + "oauthProviders" + ] + }, + "CreateOauthProvidersIntentV2": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "The ID of the User to add an Oauth provider to" + }, + "oauthProviders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OauthProviderParamsV2" + }, + "description": "A list of Oauth providers." + } + }, + "required": [ + "userId", + "oauthProviders" + ] + }, + "CreateOauthProvidersRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_CREATE_OAUTH_PROVIDERS_V2" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/CreateOauthProvidersIntentV2" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "CreateOauthProvidersResult": { + "type": "object", + "properties": { + "providerIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of unique identifiers for Oauth Providers" + } + }, + "required": [ + "providerIds" + ] + }, + "CreateOauthProvidersResultV2": { + "type": "object", + "properties": { + "providerIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of unique identifiers for Oauth Providers" + } + }, + "required": [ + "providerIds" + ] + }, + "CreateOrganizationIntent": { + "type": "object", + "properties": { + "organizationName": { + "type": "string", + "description": "Human-readable name for an Organization." + }, + "rootEmail": { + "type": "string", + "description": "The root user's email address." + }, + "rootAuthenticator": { + "$ref": "#/components/schemas/AuthenticatorParams" + }, + "rootUserId": { + "type": "string", + "description": "Unique identifier for the root user object.", + "nullable": true + } + }, + "required": [ + "organizationName", + "rootEmail", + "rootAuthenticator" + ] + }, + "CreateOrganizationIntentV2": { + "type": "object", + "properties": { + "organizationName": { + "type": "string", + "description": "Human-readable name for an Organization." + }, + "rootEmail": { + "type": "string", + "description": "The root user's email address." + }, + "rootAuthenticator": { + "$ref": "#/components/schemas/AuthenticatorParamsV2" + }, + "rootUserId": { + "type": "string", + "description": "Unique identifier for the root user object.", + "nullable": true + } + }, + "required": [ + "organizationName", + "rootEmail", + "rootAuthenticator" + ] + }, + "CreateOrganizationResult": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + } + }, + "required": [ + "organizationId" + ] + }, + "CreatePoliciesIntent": { + "type": "object", + "properties": { + "policies": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CreatePolicyIntentV3" + }, + "description": "An array of policy intents to be created." + } + }, + "required": [ + "policies" + ] + }, + "CreatePoliciesRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_CREATE_POLICIES" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/CreatePoliciesIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "CreatePoliciesResult": { + "type": "object", + "properties": { + "policyIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of unique identifiers for the created policies." + } + }, + "required": [ + "policyIds" + ] + }, + "CreatePolicyIntent": { + "type": "object", + "properties": { + "policyName": { + "type": "string", + "description": "Human-readable name for a Policy." + }, + "selectors": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Selector" + }, + "description": "A list of simple functions each including a subject, target and boolean. See Policy Engine Language section for additional details." + }, + "effect": { + "$ref": "#/components/schemas/Effect" + }, + "notes": { + "type": "string" + } + }, + "required": [ + "policyName", + "selectors", + "effect" + ] + }, + "CreatePolicyIntentV2": { + "type": "object", + "properties": { + "policyName": { + "type": "string", + "description": "Human-readable name for a Policy." + }, + "selectors": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SelectorV2" + }, + "description": "A list of simple functions each including a subject, target and boolean. See Policy Engine Language section for additional details." + }, + "effect": { + "$ref": "#/components/schemas/Effect" + }, + "notes": { + "type": "string" + } + }, + "required": [ + "policyName", + "selectors", + "effect" + ] + }, + "CreatePolicyIntentV3": { + "type": "object", + "properties": { + "policyName": { + "type": "string", + "description": "Human-readable name for a Policy." + }, + "effect": { + "$ref": "#/components/schemas/Effect" + }, + "condition": { + "type": "string", + "description": "The condition expression that triggers the Effect", + "nullable": true + }, + "consensus": { + "type": "string", + "description": "The consensus expression that triggers the Effect", + "nullable": true + }, + "notes": { + "type": "string", + "description": "Notes for a Policy." + }, + "time": { + "type": "string", + "description": "The time expression that triggers the Effect", + "nullable": true + } + }, + "required": [ + "policyName", + "effect", + "notes" + ] + }, + "CreatePolicyRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_CREATE_POLICY_V3" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/CreatePolicyIntentV3" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "CreatePolicyResult": { + "type": "object", + "properties": { + "policyId": { + "type": "string", + "description": "Unique identifier for a given Policy." + } + }, + "required": [ + "policyId" + ] + }, + "CreatePrivateKeyTagIntent": { + "type": "object", + "properties": { + "privateKeyTagName": { + "type": "string", + "description": "Human-readable name for a Private Key Tag." + }, + "privateKeyIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of Private Key IDs." + } + }, + "required": [ + "privateKeyTagName", + "privateKeyIds" + ] + }, + "CreatePrivateKeyTagRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_CREATE_PRIVATE_KEY_TAG" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/CreatePrivateKeyTagIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "CreatePrivateKeyTagResult": { + "type": "object", + "properties": { + "privateKeyTagId": { + "type": "string", + "description": "Unique identifier for a given Private Key Tag." + }, + "privateKeyIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of Private Key IDs." + } + }, + "required": [ + "privateKeyTagId", + "privateKeyIds" + ] + }, + "CreatePrivateKeysIntent": { + "type": "object", + "properties": { + "privateKeys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PrivateKeyParams" + }, + "description": "A list of Private Keys." + } + }, + "required": [ + "privateKeys" + ] + }, + "CreatePrivateKeysIntentV2": { + "type": "object", + "properties": { + "privateKeys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PrivateKeyParams" + }, + "description": "A list of Private Keys." + } + }, + "required": [ + "privateKeys" + ] + }, + "CreatePrivateKeysRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_CREATE_PRIVATE_KEYS_V2" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/CreatePrivateKeysIntentV2" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "CreatePrivateKeysResult": { + "type": "object", + "properties": { + "privateKeyIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of Private Key IDs." + } + }, + "required": [ + "privateKeyIds" + ] + }, + "CreatePrivateKeysResultV2": { + "type": "object", + "properties": { + "privateKeys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PrivateKeyResult" + }, + "description": "A list of Private Key IDs and addresses." + } + }, + "required": [ + "privateKeys" + ] + }, + "CreateReadOnlySessionIntent": { + "type": "object" + }, + "CreateReadOnlySessionRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_CREATE_READ_ONLY_SESSION" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/CreateReadOnlySessionIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "CreateReadOnlySessionResult": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization. If the request is being made by a user and their Sub-Organization ID is unknown, this can be the Parent Organization ID. However, using the Sub-Organization ID is preferred due to performance reasons." + }, + "organizationName": { + "type": "string", + "description": "Human-readable name for an Organization." + }, + "userId": { + "type": "string", + "description": "Unique identifier for a given User." + }, + "username": { + "type": "string", + "description": "Human-readable name for a User." + }, + "session": { + "type": "string", + "description": "String representing a read only session" + }, + "sessionExpiry": { + "type": "string", + "format": "uint64", + "description": "UTC timestamp in seconds representing the expiry time for the read only session." + } + }, + "required": [ + "organizationId", + "organizationName", + "userId", + "username", + "session", + "sessionExpiry" + ] + }, + "CreateReadWriteSessionIntent": { + "type": "object", + "properties": { + "targetPublicKey": { + "type": "string", + "description": "Client-side public key generated by the user, to which the read write session bundle (credentials) will be encrypted." + }, + "email": { + "type": "string", + "description": "Email of the user to create a read write session for" + }, + "apiKeyName": { + "type": "string", + "description": "Optional human-readable name for an API Key. If none provided, default to Read Write Session - ", + "nullable": true + }, + "expirationSeconds": { + "type": "string", + "description": "Expiration window (in seconds) indicating how long the API key is valid for. If not provided, a default of 15 minutes will be used.", + "nullable": true + } + }, + "required": [ + "targetPublicKey", + "email" + ] + }, + "CreateReadWriteSessionIntentV2": { + "type": "object", + "properties": { + "targetPublicKey": { + "type": "string", + "description": "Client-side public key generated by the user, to which the read write session bundle (credentials) will be encrypted." + }, + "userId": { + "type": "string", + "description": "Optional unique identifier for a given User. If none provided, the read write session will be created for the user who is making the request.", + "nullable": true + }, + "apiKeyName": { + "type": "string", + "description": "Optional human-readable name for an API Key. If none provided, default to Read Write Session - ", + "nullable": true + }, + "expirationSeconds": { + "type": "string", + "description": "Expiration window (in seconds) indicating how long the API key is valid for. If not provided, a default of 15 minutes will be used.", + "nullable": true + }, + "invalidateExisting": { + "type": "boolean", + "description": "Invalidate all other previously generated ReadWriteSession API keys", + "nullable": true + } + }, + "required": [ + "targetPublicKey" + ] + }, + "CreateReadWriteSessionRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_CREATE_READ_WRITE_SESSION_V2" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/CreateReadWriteSessionIntentV2" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "CreateReadWriteSessionResult": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization. If the request is being made by a user and their Sub-Organization ID is unknown, this can be the Parent Organization ID. However, using the Sub-Organization ID is preferred due to performance reasons." + }, + "organizationName": { + "type": "string", + "description": "Human-readable name for an Organization." + }, + "userId": { + "type": "string", + "description": "Unique identifier for a given User." + }, + "username": { + "type": "string", + "description": "Human-readable name for a User." + }, + "apiKeyId": { + "type": "string", + "description": "Unique identifier for the created API key." + }, + "credentialBundle": { + "type": "string", + "description": "HPKE encrypted credential bundle" + } + }, + "required": [ + "organizationId", + "organizationName", + "userId", + "username", + "apiKeyId", + "credentialBundle" + ] + }, + "CreateReadWriteSessionResultV2": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization. If the request is being made by a user and their Sub-Organization ID is unknown, this can be the Parent Organization ID. However, using the Sub-Organization ID is preferred due to performance reasons." + }, + "organizationName": { + "type": "string", + "description": "Human-readable name for an Organization." + }, + "userId": { + "type": "string", + "description": "Unique identifier for a given User." + }, + "username": { + "type": "string", + "description": "Human-readable name for a User." + }, + "apiKeyId": { + "type": "string", + "description": "Unique identifier for the created API key." + }, + "credentialBundle": { + "type": "string", + "description": "HPKE encrypted credential bundle" + } + }, + "required": [ + "organizationId", + "organizationName", + "userId", + "username", + "apiKeyId", + "credentialBundle" + ] + }, + "CreateSessionProfileIntent": { + "type": "object", + "properties": { + "sessionProfileName": { + "type": "string", + "description": "Human-readable name for a Session Profile." + }, + "scope": { + "type": "string", + "description": "The scope string that defines the permissions for this Session Profile." + }, + "expirationSeconds": { + "type": "string", + "description": "The duration in seconds for which sessions created with this Session Profile are valid. If not set, expiration will be determined by the value passed in to the intent of login activities.", + "nullable": true + }, + "notes": { + "type": "string", + "description": "Notes for a Session Profile.", + "nullable": true + } + }, + "required": [ + "sessionProfileName", + "scope" + ] + }, + "CreateSessionProfileRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_CREATE_SESSION_PROFILE" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/CreateSessionProfileIntent" + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "CreateSessionProfileResult": { + "type": "object", + "properties": { + "sessionProfileId": { + "type": "string", + "description": "Unique identifier for a given Session Profile." + } + }, + "required": [ + "sessionProfileId" + ] + }, + "CreateSmartContractInterfaceIntent": { + "type": "object", + "properties": { + "smartContractAddress": { + "type": "string", + "description": "Corresponding contract address or program ID" + }, + "smartContractInterface": { + "type": "string", + "description": "ABI/IDL as a JSON string. Limited to 400kb" + }, + "type": { + "$ref": "#/components/schemas/SmartContractInterfaceType" + }, + "label": { + "type": "string", + "description": "Human-readable name for a Smart Contract Interface." + }, + "notes": { + "type": "string", + "description": "Notes for a Smart Contract Interface." + } + }, + "required": [ + "smartContractAddress", + "smartContractInterface", + "type", + "label" + ] + }, + "CreateSmartContractInterfaceRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_CREATE_SMART_CONTRACT_INTERFACE" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/CreateSmartContractInterfaceIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "CreateSmartContractInterfaceResult": { + "type": "object", + "properties": { + "smartContractInterfaceId": { + "type": "string", + "description": "The ID of the created Smart Contract Interface." + } + }, + "required": [ + "smartContractInterfaceId" + ] + }, + "CreateSubOrganizationIntent": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name for this sub-organization" + }, + "rootAuthenticator": { + "$ref": "#/components/schemas/AuthenticatorParamsV2" + } + }, + "required": [ + "name", + "rootAuthenticator" + ] + }, + "CreateSubOrganizationIntentV2": { + "type": "object", + "properties": { + "subOrganizationName": { + "type": "string", + "description": "Name for this sub-organization" + }, + "rootUsers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RootUserParams" + }, + "description": "Root users to create within this sub-organization" + }, + "rootQuorumThreshold": { + "type": "integer", + "format": "int32", + "description": "The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users" + } + }, + "required": [ + "subOrganizationName", + "rootUsers", + "rootQuorumThreshold" + ] + }, + "CreateSubOrganizationIntentV3": { + "type": "object", + "properties": { + "subOrganizationName": { + "type": "string", + "description": "Name for this sub-organization" + }, + "rootUsers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RootUserParams" + }, + "description": "Root users to create within this sub-organization" + }, + "rootQuorumThreshold": { + "type": "integer", + "format": "int32", + "description": "The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users" + }, + "privateKeys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PrivateKeyParams" + }, + "description": "A list of Private Keys." + } + }, + "required": [ + "subOrganizationName", + "rootUsers", + "rootQuorumThreshold", + "privateKeys" + ] + }, + "CreateSubOrganizationIntentV4": { + "type": "object", + "properties": { + "subOrganizationName": { + "type": "string", + "description": "Name for this sub-organization" + }, + "rootUsers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RootUserParams" + }, + "description": "Root users to create within this sub-organization" + }, + "rootQuorumThreshold": { + "type": "integer", + "format": "int32", + "description": "The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users" + }, + "wallet": { + "$ref": "#/components/schemas/WalletParams" + }, + "disableEmailRecovery": { + "type": "boolean", + "description": "Disable email recovery for the sub-organization", + "nullable": true + }, + "disableEmailAuth": { + "type": "boolean", + "description": "Disable email auth for the sub-organization", + "nullable": true + } + }, + "required": [ + "subOrganizationName", + "rootUsers", + "rootQuorumThreshold" + ] + }, + "CreateSubOrganizationIntentV5": { + "type": "object", + "properties": { + "subOrganizationName": { + "type": "string", + "description": "Name for this sub-organization" + }, + "rootUsers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RootUserParamsV2" + }, + "description": "Root users to create within this sub-organization" + }, + "rootQuorumThreshold": { + "type": "integer", + "format": "int32", + "description": "The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users" + }, + "wallet": { + "$ref": "#/components/schemas/WalletParams" + }, + "disableEmailRecovery": { + "type": "boolean", + "description": "Disable email recovery for the sub-organization", + "nullable": true + }, + "disableEmailAuth": { + "type": "boolean", + "description": "Disable email auth for the sub-organization", + "nullable": true + } + }, + "required": [ + "subOrganizationName", + "rootUsers", + "rootQuorumThreshold" + ] + }, + "CreateSubOrganizationIntentV6": { + "type": "object", + "properties": { + "subOrganizationName": { + "type": "string", + "description": "Name for this sub-organization" + }, + "rootUsers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RootUserParamsV3" + }, + "description": "Root users to create within this sub-organization" + }, + "rootQuorumThreshold": { + "type": "integer", + "format": "int32", + "description": "The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users" + }, + "wallet": { + "$ref": "#/components/schemas/WalletParams" + }, + "disableEmailRecovery": { + "type": "boolean", + "description": "Disable email recovery for the sub-organization", + "nullable": true + }, + "disableEmailAuth": { + "type": "boolean", + "description": "Disable email auth for the sub-organization", + "nullable": true + } + }, + "required": [ + "subOrganizationName", + "rootUsers", + "rootQuorumThreshold" + ] + }, + "CreateSubOrganizationIntentV7": { + "type": "object", + "properties": { + "subOrganizationName": { + "type": "string", + "description": "Name for this sub-organization" + }, + "rootUsers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RootUserParamsV4" + }, + "description": "Root users to create within this sub-organization" + }, + "rootQuorumThreshold": { + "type": "integer", + "format": "int32", + "description": "The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users" + }, + "wallet": { + "$ref": "#/components/schemas/WalletParams" + }, + "disableEmailRecovery": { + "type": "boolean", + "description": "Disable email recovery for the sub-organization", + "nullable": true + }, + "disableEmailAuth": { + "type": "boolean", + "description": "Disable email auth for the sub-organization", + "nullable": true + }, + "disableSmsAuth": { + "type": "boolean", + "description": "Disable OTP SMS auth for the sub-organization", + "nullable": true + }, + "disableOtpEmailAuth": { + "type": "boolean", + "description": "Disable OTP email auth for the sub-organization", + "nullable": true + }, + "verificationToken": { + "type": "string", + "description": "Signed JWT containing a unique id, expiry, verification type, contact", + "nullable": true + }, + "clientSignature": { + "$ref": "#/components/schemas/ClientSignature" + } + }, + "required": [ + "subOrganizationName", + "rootUsers", + "rootQuorumThreshold" + ] + }, + "CreateSubOrganizationIntentV8": { + "type": "object", + "properties": { + "subOrganizationName": { + "type": "string", + "description": "Name for this sub-organization" + }, + "rootUsers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RootUserParamsV5" + }, + "description": "Root users to create within this sub-organization" + }, + "rootQuorumThreshold": { + "type": "integer", + "format": "int32", + "description": "The threshold of unique approvals to reach root quorum. This value must be less than or equal to the number of root users" + }, + "wallet": { + "$ref": "#/components/schemas/WalletParams" + }, + "disableEmailRecovery": { + "type": "boolean", + "description": "Disable email recovery for the sub-organization", + "nullable": true + }, + "disableEmailAuth": { + "type": "boolean", + "description": "Disable email auth for the sub-organization", + "nullable": true + }, + "disableSmsAuth": { + "type": "boolean", + "description": "Disable OTP SMS auth for the sub-organization", + "nullable": true + }, + "disableOtpEmailAuth": { + "type": "boolean", + "description": "Disable OTP email auth for the sub-organization", + "nullable": true + }, + "verificationToken": { + "type": "string", + "description": "Signed JWT containing a unique id, expiry, verification type, contact", + "nullable": true + }, + "clientSignature": { + "$ref": "#/components/schemas/ClientSignature" + } + }, + "required": [ + "subOrganizationName", + "rootUsers", + "rootQuorumThreshold" + ] + }, + "CreateSubOrganizationRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V8" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/CreateSubOrganizationIntentV8" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "CreateSubOrganizationResult": { + "type": "object", + "properties": { + "subOrganizationId": { + "type": "string" + }, + "rootUserIds": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "subOrganizationId" + ] + }, + "CreateSubOrganizationResultV3": { + "type": "object", + "properties": { + "subOrganizationId": { + "type": "string" + }, + "privateKeys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PrivateKeyResult" + }, + "description": "A list of Private Key IDs and addresses." + }, + "rootUserIds": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "subOrganizationId", + "privateKeys" + ] + }, + "CreateSubOrganizationResultV4": { + "type": "object", + "properties": { + "subOrganizationId": { + "type": "string" + }, + "wallet": { + "$ref": "#/components/schemas/WalletResult" + }, + "rootUserIds": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "subOrganizationId" + ] + }, + "CreateSubOrganizationResultV5": { + "type": "object", + "properties": { + "subOrganizationId": { + "type": "string" + }, + "wallet": { + "$ref": "#/components/schemas/WalletResult" + }, + "rootUserIds": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "subOrganizationId" + ] + }, + "CreateSubOrganizationResultV6": { + "type": "object", + "properties": { + "subOrganizationId": { + "type": "string" + }, + "wallet": { + "$ref": "#/components/schemas/WalletResult" + }, + "rootUserIds": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "subOrganizationId" + ] + }, + "CreateSubOrganizationResultV7": { + "type": "object", + "properties": { + "subOrganizationId": { + "type": "string" + }, + "wallet": { + "$ref": "#/components/schemas/WalletResult" + }, + "rootUserIds": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "subOrganizationId" + ] + }, + "CreateSubOrganizationResultV8": { + "type": "object", + "properties": { + "subOrganizationId": { + "type": "string" + }, + "wallet": { + "$ref": "#/components/schemas/WalletResult" + }, + "rootUserIds": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "subOrganizationId" + ] + }, + "CreateSwapQuoteIntent": { + "type": "object", + "properties": { + "signWith": { + "type": "string", + "description": "Wallet account or Private Key address used to price the executable provider quote. Private Key identifiers are not supported." + }, + "inputToken": { + "type": "string", + "description": "CAIP-19 asset ID for the input asset. The chain is derived from this value." + }, + "outputToken": { + "type": "string", + "description": "CAIP-19 asset ID for the output asset." + }, + "inputAmount": { + "type": "string", + "description": "Base-unit amount of the input asset." + }, + "slippageBps": { + "type": "string", + "description": "Provider-neutral maximum allowed slippage in basis points. Turnkey converts this value to each provider's request format. When omitted, each provider applies its default slippage behavior.", + "nullable": true + } + }, + "required": [ + "signWith", + "inputToken", + "outputToken", + "inputAmount" + ] + }, + "CreateSwapQuoteResult": { + "type": "object", + "properties": { + "quotes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SwapQuote" + }, + "description": "One or more provider quotes for this request. Today this contains a single Relay quote; pass quotes[i].quoteId to execute_swap_v2 to bind execution." + } + }, + "required": [ + "quotes" + ] + }, + "CreateTvcAppIntent": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The name of the new TVC application" + }, + "quorumPublicKey": { + "type": "string", + "description": "Quorum public key to use for this application" + }, + "manifestSetId": { + "type": "string", + "description": "Unique identifier for an existing TVC operator set to use as the Manifest Set for this TVC application. If left empty, a new Manifest Set configuration is required", + "nullable": true + }, + "manifestSetParams": { + "$ref": "#/components/schemas/TvcOperatorSetParams" + }, + "shareSetId": { + "type": "string", + "description": "Unique identifier for an existing TVC operator set to use as the Share Set for this TVC application. If left empty, a new Share Set configuration is required", + "nullable": true + }, + "shareSetParams": { + "$ref": "#/components/schemas/TvcOperatorSetParams" + }, + "enableEgress": { + "type": "boolean", + "description": "Enables network egress for this TVC app. Default if not provided: false.", + "nullable": true + }, + "enableDebugModeDeployments": { + "type": "boolean", + "description": "When true, this app may create deployments in debug-mode. Debug-mode deployments expose logs and emit zero'd attestation PCRs, so remote attestation cannot succeed. Cannot be changed after app creation. Setting this true means the app's quorum key is considered permanently insecure, and a new app with a fresh quorum key must be created. Default if not provided: false.", + "nullable": true + } + }, + "required": [ + "name", + "quorumPublicKey" + ] + }, + "CreateTvcAppRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_CREATE_TVC_APP" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/CreateTvcAppIntent" + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "CreateTvcAppResult": { + "type": "object", + "properties": { + "appId": { + "type": "string", + "description": "The unique identifier for the TVC application" + }, + "manifestSetId": { + "type": "string", + "description": "The unique identifier for the TVC manifest set" + }, + "manifestSetOperatorIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The unique identifier(s) of the manifest set operators" + }, + "manifestSetThreshold": { + "type": "integer", + "format": "int64", + "description": "The required number of approvals for the manifest set" + }, + "shareSetId": { + "type": "string", + "description": "The unique identifier for the TVC share set" + }, + "shareSetOperatorIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The unique identifiers of the share set operators" + }, + "shareSetThreshold": { + "type": "integer", + "format": "int64", + "description": "The required number of approvals for the share set" + } + }, + "required": [ + "appId", + "manifestSetId", + "manifestSetOperatorIds", + "manifestSetThreshold", + "shareSetId", + "shareSetOperatorIds", + "shareSetThreshold" + ] + }, + "CreateTvcDeploymentIntent": { + "type": "object", + "properties": { + "appId": { + "type": "string", + "description": "The unique identifier of the to-be-deployed TVC application" + }, + "qosVersion": { + "type": "string", + "description": "The QuorumOS version to use to deploy this application" + }, + "pivotContainerImageUrl": { + "type": "string", + "description": "URL of the container containing the pivot binary" + }, + "pivotPath": { + "type": "string", + "description": "Location of the binary in the pivot container" + }, + "pivotArgs": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Arguments to pass to the pivot binary at startup. Encoded as a list of strings, for example [\"--foo\", \"bar\"]" + }, + "expectedPivotDigest": { + "type": "string", + "description": "Digest of the pivot binary in the pivot container. This value will be inserted in the QOS manifest to ensure application integrity." + }, + "nonce": { + "type": "integer", + "format": "int64", + "description": "Optional nonce to ensure uniqueness of the deployment manifest. If not provided, it defaults to the current Unix timestamp in seconds.", + "nullable": true + }, + "pivotContainerEncryptedPullSecret": { + "type": "string", + "description": "Optional encrypted pull secret to authorize Turnkey to pull the pivot container image. If your image is public, leave this empty.", + "nullable": true + }, + "debugMode": { + "type": "boolean", + "description": "Optional flag to indicate whether to deploy the TVC app in debug mode, which includes additional logging and debugging tools. Default is false.", + "nullable": true + }, + "healthCheckType": { + "$ref": "#/components/schemas/TvcHealthCheckType" + }, + "healthCheckPort": { + "type": "integer", + "format": "int64", + "description": "Port to use for health checks." + }, + "publicIngressPort": { + "type": "integer", + "format": "int64", + "description": "Port to use for public ingress." + }, + "replicas": { + "type": "integer", + "format": "int64", + "description": "Optional desired replica count for this deployment.", + "nullable": true + } + }, + "required": [ + "appId", + "qosVersion", + "pivotContainerImageUrl", + "pivotPath", + "pivotArgs", + "expectedPivotDigest", + "healthCheckType", + "healthCheckPort", + "publicIngressPort" + ] + }, + "CreateTvcDeploymentRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_CREATE_TVC_DEPLOYMENT" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/CreateTvcDeploymentIntent" + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "CreateTvcDeploymentResult": { + "type": "object", + "properties": { + "deploymentId": { + "type": "string", + "description": "The unique identifier for the TVC deployment" + }, + "manifestId": { + "type": "string", + "description": "The unique identifier for the TVC manifest" + } + }, + "required": [ + "deploymentId", + "manifestId" + ] + }, + "CreateTvcManifestApprovalsIntent": { + "type": "object", + "properties": { + "manifestId": { + "type": "string", + "description": "Unique identifier of the TVC deployment to approve" + }, + "approvals": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TvcManifestApproval" + }, + "description": "List of manifest approvals" + } + }, + "required": [ + "manifestId", + "approvals" + ] + }, + "CreateTvcManifestApprovalsRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_CREATE_TVC_MANIFEST_APPROVALS" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/CreateTvcManifestApprovalsIntent" + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "CreateTvcManifestApprovalsResult": { + "type": "object", + "properties": { + "approvalIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The unique identifier(s) for the manifest approvals" + } + }, + "required": [ + "approvalIds" + ] + }, + "CreateTvcOperatorIntent": { + "type": "object", + "properties": { + "walletName": { + "type": "string", + "description": "Human-readable name for a new wallet created for this TVC operator", + "nullable": true + }, + "walletId": { + "type": "string", + "description": "Unique identifier for an existing wallet to reuse for this TVC operator", + "nullable": true + }, + "path": { + "type": "string", + "description": "Base derivation path for creating TVC operator wallet accounts" + }, + "operatorName": { + "type": "string", + "description": "Human-readable name for this new TVC operator" + } + }, + "required": [ + "path", + "operatorName" + ] + }, + "CreateTvcOperatorResult": { + "type": "object", + "properties": { + "walletId": { + "type": "string", + "description": "The unique identifier for the wallet containing TVC operator accounts" + }, + "operatorId": { + "type": "string", + "description": "The unique identifier for the TVC operator" + }, + "encryptPublicKey": { + "type": "string", + "description": "Public encryption key for this TVC operator" + }, + "signPublicKey": { + "type": "string", + "description": "Public signing key for this TVC operator" + } + }, + "required": [ + "walletId", + "operatorId", + "encryptPublicKey", + "signPublicKey" + ] + }, + "CreateTvcQuorumKeyIntent": { + "type": "object", + "properties": { + "threshold": { + "type": "integer", + "format": "int64", + "description": "The threshold of operators needed to reassemble this TVC quorum key" + }, + "operatorEncryptKeys": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Operator public keys used to encrypt and later approve the generated TVC quorum key shares" + } + }, + "required": [ + "threshold", + "operatorEncryptKeys" + ] + }, + "CreateTvcQuorumKeyResult": { + "type": "object", + "properties": { + "quorumKeyId": { + "type": "string", + "description": "The unique identifier for the TVC quorum key" + }, + "quorumPublicKey": { + "type": "string", + "description": "Public key for the generated TVC quorum key" + }, + "shareIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The unique identifier(s) for the generated TVC quorum key shares" + } + }, + "required": [ + "quorumKeyId", + "quorumPublicKey", + "shareIds" + ] + }, + "CreateUserTagIntent": { + "type": "object", + "properties": { + "userTagName": { + "type": "string", + "description": "Human-readable name for a User Tag." + }, + "userIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User IDs." + } + }, + "required": [ + "userTagName", + "userIds" + ] + }, + "CreateUserTagRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_CREATE_USER_TAG" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/CreateUserTagIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "CreateUserTagResult": { + "type": "object", + "properties": { + "userTagId": { + "type": "string", + "description": "Unique identifier for a given User Tag." + }, + "userIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User IDs." + } + }, + "required": [ + "userTagId", + "userIds" + ] + }, + "CreateUsersIntent": { + "type": "object", + "properties": { + "users": { + "type": "array", + "items": { + "$ref": "#/components/schemas/UserParams" + }, + "description": "A list of Users." + } + }, + "required": [ + "users" + ] + }, + "CreateUsersIntentV2": { + "type": "object", + "properties": { + "users": { + "type": "array", + "items": { + "$ref": "#/components/schemas/UserParamsV2" + }, + "description": "A list of Users." + } + }, + "required": [ + "users" + ] + }, + "CreateUsersIntentV3": { + "type": "object", + "properties": { + "users": { + "type": "array", + "items": { + "$ref": "#/components/schemas/UserParamsV3" + }, + "description": "A list of Users." + } + }, + "required": [ + "users" + ] + }, + "CreateUsersIntentV4": { + "type": "object", + "properties": { + "users": { + "type": "array", + "items": { + "$ref": "#/components/schemas/UserParamsV4" + }, + "description": "A list of Users." + } + }, + "required": [ + "users" + ] + }, + "CreateUsersRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_CREATE_USERS_V4" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/CreateUsersIntentV4" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "CreateUsersResult": { + "type": "object", + "properties": { + "userIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User IDs." + } + }, + "required": [ + "userIds" + ] + }, + "CreateWalletAccountsIntent": { + "type": "object", + "properties": { + "walletId": { + "type": "string", + "description": "Unique identifier for a given Wallet." + }, + "accounts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/WalletAccountParams" + }, + "description": "A list of wallet Accounts." + }, + "persist": { + "type": "boolean", + "description": "Indicates if the wallet accounts should be persisted. This is helpful if you'd like to see the addresses of different derivation paths without actually creating the accounts. Defaults to true.", + "nullable": true + } + }, + "required": [ + "walletId", + "accounts" + ] + }, + "CreateWalletAccountsRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_CREATE_WALLET_ACCOUNTS" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/CreateWalletAccountsIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "CreateWalletAccountsResult": { + "type": "object", + "properties": { + "addresses": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of derived addresses." + } + }, + "required": [ + "addresses" + ] + }, + "CreateWalletIntent": { + "type": "object", + "properties": { + "walletName": { + "type": "string", + "description": "Human-readable name for a Wallet." + }, + "accounts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/WalletAccountParams" + }, + "description": "A list of wallet Accounts. This field, if not needed, should be an empty array in your request body." + }, + "mnemonicLength": { + "type": "integer", + "format": "int32", + "description": "Length of mnemonic to generate the Wallet seed. Defaults to 12. Accepted values: 12, 15, 18, 21, 24.", + "nullable": true + } + }, + "required": [ + "walletName", + "accounts" + ] + }, + "CreateWalletRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_CREATE_WALLET" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/CreateWalletIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "CreateWalletResult": { + "type": "object", + "properties": { + "walletId": { + "type": "string", + "description": "Unique identifier for a Wallet." + }, + "addresses": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of account addresses." + } + }, + "required": [ + "walletId", + "addresses" + ] + }, + "CreateWebhookEndpointIntent": { + "type": "object", + "properties": { + "url": { + "type": "string", + "description": "The destination URL for webhook delivery." + }, + "name": { + "type": "string", + "description": "Human-readable name for this webhook endpoint." + }, + "subscriptions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/WebhookSubscriptionParams" + }, + "description": "Event subscriptions to create for this endpoint." + } + }, + "required": [ + "url", + "name" + ] + }, + "CreateWebhookEndpointRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_CREATE_WEBHOOK_ENDPOINT" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/CreateWebhookEndpointIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "CreateWebhookEndpointResult": { + "type": "object", + "properties": { + "endpointId": { + "type": "string", + "description": "Unique identifier of the created webhook endpoint." + }, + "webhookEndpoint": { + "$ref": "#/components/schemas/WebhookEndpointData" + } + }, + "required": [ + "endpointId", + "webhookEndpoint" + ] + }, + "CredPropsAuthenticationExtensionsClientOutputs": { + "type": "object", + "properties": { + "rk": { + "type": "boolean" + } + }, + "required": [ + "rk" + ] + }, + "CredentialType": { + "type": "string", + "enum": [ + "CREDENTIAL_TYPE_WEBAUTHN_AUTHENTICATOR", + "CREDENTIAL_TYPE_API_KEY_P256", + "CREDENTIAL_TYPE_RECOVER_USER_KEY_P256", + "CREDENTIAL_TYPE_API_KEY_SECP256K1", + "CREDENTIAL_TYPE_EMAIL_AUTH_KEY_P256", + "CREDENTIAL_TYPE_API_KEY_ED25519", + "CREDENTIAL_TYPE_OTP_AUTH_KEY_P256", + "CREDENTIAL_TYPE_READ_WRITE_SESSION_KEY_P256", + "CREDENTIAL_TYPE_OAUTH_KEY_P256", + "CREDENTIAL_TYPE_LOGIN" + ] + }, + "Curve": { + "type": "string", + "enum": [ + "CURVE_SECP256K1", + "CURVE_ED25519", + "CURVE_P256" + ] + }, + "CustomRevertError": { + "type": "object", + "properties": { + "errorName": { + "type": "string", + "description": "The name of the custom error.", + "nullable": true + }, + "paramsJson": { + "type": "string", + "description": "The decoded parameters as a JSON object.", + "nullable": true + } + } + }, + "DeleteApiKeysIntent": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "Unique identifier for a given User." + }, + "apiKeyIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of API Key IDs." + } + }, + "required": [ + "userId", + "apiKeyIds" + ] + }, + "DeleteApiKeysRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_DELETE_API_KEYS" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/DeleteApiKeysIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "DeleteApiKeysResult": { + "type": "object", + "properties": { + "apiKeyIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of API Key IDs." + } + }, + "required": [ + "apiKeyIds" + ] + }, + "DeleteAuthenticatorsIntent": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "Unique identifier for a given User." + }, + "authenticatorIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of Authenticator IDs." + } + }, + "required": [ + "userId", + "authenticatorIds" + ] + }, + "DeleteAuthenticatorsRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_DELETE_AUTHENTICATORS" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/DeleteAuthenticatorsIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "DeleteAuthenticatorsResult": { + "type": "object", + "properties": { + "authenticatorIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Unique identifier for a given Authenticator." + } + }, + "required": [ + "authenticatorIds" + ] + }, + "DeleteFiatOnRampCredentialIntent": { + "type": "object", + "properties": { + "fiatOnrampCredentialId": { + "type": "string", + "description": "The ID of the fiat on-ramp credential to delete" + } + }, + "required": [ + "fiatOnrampCredentialId" + ] + }, + "DeleteFiatOnRampCredentialRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_DELETE_FIAT_ON_RAMP_CREDENTIAL" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/DeleteFiatOnRampCredentialIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "DeleteFiatOnRampCredentialResult": { + "type": "object", + "properties": { + "fiatOnRampCredentialId": { + "type": "string", + "description": "Unique identifier of the Fiat On-Ramp credential that was deleted" + } + }, + "required": [ + "fiatOnRampCredentialId" + ] + }, + "DeleteInvitationIntent": { + "type": "object", + "properties": { + "invitationId": { + "type": "string", + "description": "Unique identifier for a given Invitation object." + } + }, + "required": [ + "invitationId" + ] + }, + "DeleteInvitationRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_DELETE_INVITATION" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/DeleteInvitationIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "DeleteInvitationResult": { + "type": "object", + "properties": { + "invitationId": { + "type": "string", + "description": "Unique identifier for a given Invitation." + } + }, + "required": [ + "invitationId" + ] + }, + "DeleteMfaPolicyIntent": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "The ID of the User to delete the MFA Policy from." + }, + "mfaPolicyId": { + "type": "string", + "description": "Unique identifier for a given MFA Policy." + } + }, + "required": [ + "userId", + "mfaPolicyId" + ] + }, + "DeleteMfaPolicyRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_DELETE_MFA_POLICY" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/DeleteMfaPolicyIntent" + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "DeleteMfaPolicyResult": { + "type": "object", + "properties": { + "mfaPolicyId": { + "type": "string", + "description": "Unique identifier for a given MFA Policy." + } + }, + "required": [ + "mfaPolicyId" + ] + }, + "DeleteOauth2CredentialIntent": { + "type": "object", + "properties": { + "oauth2CredentialId": { + "type": "string", + "description": "The ID of the OAuth 2.0 credential to delete" + } + }, + "required": [ + "oauth2CredentialId" + ] + }, + "DeleteOauth2CredentialRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_DELETE_OAUTH2_CREDENTIAL" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/DeleteOauth2CredentialIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "DeleteOauth2CredentialResult": { + "type": "object", + "properties": { + "oauth2CredentialId": { + "type": "string", + "description": "Unique identifier of the OAuth 2.0 credential that was deleted" + } + }, + "required": [ + "oauth2CredentialId" + ] + }, + "DeleteOauthProvidersIntent": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "The ID of the User to remove an Oauth provider from" + }, + "providerIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Unique identifier for a given Provider." + } + }, + "required": [ + "userId", + "providerIds" + ] + }, + "DeleteOauthProvidersRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_DELETE_OAUTH_PROVIDERS" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/DeleteOauthProvidersIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "DeleteOauthProvidersResult": { + "type": "object", + "properties": { + "providerIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of unique identifiers for Oauth Providers" + } + }, + "required": [ + "providerIds" + ] + }, + "DeleteOrganizationIntent": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + } + }, + "required": [ + "organizationId" + ] + }, + "DeleteOrganizationResult": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + } + }, + "required": [ + "organizationId" + ] + }, + "DeletePaymentMethodIntent": { + "type": "object", + "properties": { + "paymentMethodId": { + "type": "string", + "description": "The payment method that the customer wants to remove.", + "nullable": true + } + }, + "required": [ + "paymentMethodId" + ] + }, + "DeletePaymentMethodResult": { + "type": "object", + "properties": { + "paymentMethodId": { + "type": "string", + "description": "The payment method that was removed." + } + }, + "required": [ + "paymentMethodId" + ] + }, + "DeletePoliciesIntent": { + "type": "object", + "properties": { + "policyIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of unique identifiers for policies within an organization" + } + }, + "required": [ + "policyIds" + ] + }, + "DeletePoliciesRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_DELETE_POLICIES" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/DeletePoliciesIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "DeletePoliciesResult": { + "type": "object", + "properties": { + "policyIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of unique identifiers for the deleted policies." + } + }, + "required": [ + "policyIds" + ] + }, + "DeletePolicyIntent": { + "type": "object", + "properties": { + "policyId": { + "type": "string", + "description": "Unique identifier for a given Policy." + } + }, + "required": [ + "policyId" + ] + }, + "DeletePolicyRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_DELETE_POLICY" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/DeletePolicyIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "DeletePolicyResult": { + "type": "object", + "properties": { + "policyId": { + "type": "string", + "description": "Unique identifier for a given Policy." + } + }, + "required": [ + "policyId" + ] + }, + "DeletePrivateKeyTagsIntent": { + "type": "object", + "properties": { + "privateKeyTagIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of Private Key Tag IDs." + } + }, + "required": [ + "privateKeyTagIds" + ] + }, + "DeletePrivateKeyTagsRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_DELETE_PRIVATE_KEY_TAGS" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/DeletePrivateKeyTagsIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "DeletePrivateKeyTagsResult": { + "type": "object", + "properties": { + "privateKeyTagIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of Private Key Tag IDs." + }, + "privateKeyIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of Private Key IDs." + } + }, + "required": [ + "privateKeyTagIds", + "privateKeyIds" + ] + }, + "DeletePrivateKeysIntent": { + "type": "object", + "properties": { + "privateKeyIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of unique identifiers for private keys within an organization" + }, + "deleteWithoutExport": { + "type": "boolean", + "description": "Optional parameter for deleting the private keys, even if any have not been previously exported. If they have been exported, this field is ignored.", + "nullable": true + } + }, + "required": [ + "privateKeyIds" + ] + }, + "DeletePrivateKeysRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_DELETE_PRIVATE_KEYS" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/DeletePrivateKeysIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "DeletePrivateKeysResult": { + "type": "object", + "properties": { + "privateKeyIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of private key unique identifiers that were removed" + } + }, + "required": [ + "privateKeyIds" + ] + }, + "DeleteSmartContractInterfaceIntent": { + "type": "object", + "properties": { + "smartContractInterfaceId": { + "type": "string", + "description": "The ID of a Smart Contract Interface intended for deletion." + } + }, + "required": [ + "smartContractInterfaceId" + ] + }, + "DeleteSmartContractInterfaceRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_DELETE_SMART_CONTRACT_INTERFACE" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/DeleteSmartContractInterfaceIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "DeleteSmartContractInterfaceResult": { + "type": "object", + "properties": { + "smartContractInterfaceId": { + "type": "string", + "description": "The ID of the deleted Smart Contract Interface." + } + }, + "required": [ + "smartContractInterfaceId" + ] + }, + "DeleteSubOrganizationIntent": { + "type": "object", + "properties": { + "deleteWithoutExport": { + "type": "boolean", + "description": "Sub-organization deletion, by default, requires associated wallets and private keys to be exported for security reasons. Set this boolean to true to force sub-organization deletion even if some wallets or private keys within it have not been exported yet. Default: false.", + "nullable": true + } + } + }, + "DeleteSubOrganizationRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_DELETE_SUB_ORGANIZATION" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/DeleteSubOrganizationIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "DeleteSubOrganizationResult": { + "type": "object", + "properties": { + "subOrganizationUuid": { + "type": "string", + "description": "Unique identifier of the sub organization that was removed" + } + }, + "required": [ + "subOrganizationUuid" + ] + }, + "DeleteTvcAppAndDeploymentsIntent": { + "type": "object", + "properties": { + "appId": { + "type": "string", + "description": "The unique identifier of the TVC app to delete. The app and all associated deployments will be removed." + } + }, + "required": [ + "appId" + ] + }, + "DeleteTvcAppAndDeploymentsRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_DELETE_TVC_APP_AND_DEPLOYMENTS" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/DeleteTvcAppAndDeploymentsIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "DeleteTvcAppAndDeploymentsResult": { + "type": "object", + "properties": { + "appId": { + "type": "string", + "description": "The unique identifier of the deleted TVC app." + } + }, + "required": [ + "appId" + ] + }, + "DeleteTvcDeploymentIntent": { + "type": "object", + "properties": { + "deploymentId": { + "type": "string", + "description": "The unique identifier of the TVC deployment to delete." + } + }, + "required": [ + "deploymentId" + ] + }, + "DeleteTvcDeploymentRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_DELETE_TVC_DEPLOYMENT" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/DeleteTvcDeploymentIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "DeleteTvcDeploymentResult": { + "type": "object", + "properties": { + "deploymentId": { + "type": "string", + "description": "The unique identifier of the deleted TVC deployment." + } + }, + "required": [ + "deploymentId" + ] + }, + "DeleteUserTagsIntent": { + "type": "object", + "properties": { + "userTagIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User Tag IDs." + } + }, + "required": [ + "userTagIds" + ] + }, + "DeleteUserTagsRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_DELETE_USER_TAGS" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/DeleteUserTagsIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "DeleteUserTagsResult": { + "type": "object", + "properties": { + "userTagIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User Tag IDs." + }, + "userIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User IDs." + } + }, + "required": [ + "userTagIds", + "userIds" + ] + }, + "DeleteUsersIntent": { + "type": "object", + "properties": { + "userIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User IDs." + } + }, + "required": [ + "userIds" + ] + }, + "DeleteUsersRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_DELETE_USERS" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/DeleteUsersIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "DeleteUsersResult": { + "type": "object", + "properties": { + "userIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User IDs." + } + }, + "required": [ + "userIds" + ] + }, + "DeleteWalletAccountsIntent": { + "type": "object", + "properties": { + "walletAccountIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of unique identifiers for wallet accounts within an organization" + }, + "deleteWithoutExport": { + "type": "boolean", + "description": "Optional parameter for deleting the wallet accounts, even if any have not been previously exported. If they have been exported, this field is ignored.", + "nullable": true + } + }, + "required": [ + "walletAccountIds" + ] + }, + "DeleteWalletAccountsRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_DELETE_WALLET_ACCOUNTS" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/DeleteWalletAccountsIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "DeleteWalletAccountsResult": { + "type": "object", + "properties": { + "walletAccountIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of wallet account unique identifiers that were removed" + } + }, + "required": [ + "walletAccountIds" + ] + }, + "DeleteWalletsIntent": { + "type": "object", + "properties": { + "walletIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of unique identifiers for wallets within an organization" + }, + "deleteWithoutExport": { + "type": "boolean", + "description": "Optional parameter for deleting the wallets, even if any have not been previously exported. If they have been exported, this field is ignored.", + "nullable": true + } + }, + "required": [ + "walletIds" + ] + }, + "DeleteWalletsRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_DELETE_WALLETS" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/DeleteWalletsIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "DeleteWalletsResult": { + "type": "object", + "properties": { + "walletIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of wallet unique identifiers that were removed" + } + }, + "required": [ + "walletIds" + ] + }, + "DeleteWebhookEndpointIntent": { + "type": "object", + "properties": { + "endpointId": { + "type": "string", + "description": "Unique identifier of the webhook endpoint to delete." + } + }, + "required": [ + "endpointId" + ] + }, + "DeleteWebhookEndpointRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_DELETE_WEBHOOK_ENDPOINT" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/DeleteWebhookEndpointIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "DeleteWebhookEndpointResult": { + "type": "object", + "properties": { + "endpointId": { + "type": "string", + "description": "Unique identifier of the deleted webhook endpoint." + } + }, + "required": [ + "endpointId" + ] + }, + "DeploymentStatus": { + "type": "object", + "properties": { + "deploymentId": { + "type": "string", + "description": "Unique identifier for this deployment (corresponds to k8s deployment label)" + }, + "readyReplicas": { + "type": "integer", + "format": "int32", + "description": "Number of ready replicas" + }, + "desiredReplicas": { + "type": "integer", + "format": "int32", + "description": "Desired number of replicas" + }, + "lastUpdatedTime": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + } + }, + "required": [ + "deploymentId", + "readyReplicas", + "desiredReplicas", + "lastUpdatedTime" + ] + }, + "DisableAuthProxyIntent": { + "type": "object" + }, + "DisableAuthProxyResult": { + "type": "object" + }, + "DisablePrivateKeyIntent": { + "type": "object", + "properties": { + "privateKeyId": { + "type": "string", + "description": "Unique identifier for a given Private Key." + } + }, + "required": [ + "privateKeyId" + ] + }, + "DisablePrivateKeyResult": { + "type": "object", + "properties": { + "privateKeyId": { + "type": "string", + "description": "Unique identifier for a given Private Key." + } + }, + "required": [ + "privateKeyId" + ] + }, + "EarnDeployWrapperIntent": { + "type": "object", + "properties": { + "vaultAddress": { + "type": "string", + "description": "Address of the underlying yield vault to wrap (from the ListEarnVaults catalog)." + }, + "chainCaip2": { + "type": "string", + "enum": [ + "eip155:1", + "eip155:8453", + "eip155:42161", + "eip155:137", + "eip155:56", + "eip155:4217" + ], + "description": "CAIP-2 chain ID the vault lives on (e.g., 'eip155:8453' for Base)." + }, + "clientFeeBps": { + "type": "string", + "description": "Your fee on gross yield, in basis points (e.g., '2000' for 20%). Maximum is 4000 (40%)." + }, + "clientFeeWallet": { + "type": "string", + "description": "The wallet address that receives the client's fee payouts on-chain. Must be a Turnkey-managed wallet address." + } + }, + "required": [ + "vaultAddress", + "chainCaip2", + "clientFeeBps", + "clientFeeWallet" + ] + }, + "EarnDeployWrapperRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_EARN_DEPLOY_WRAPPER" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/EarnDeployWrapperIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "EarnDeployWrapperResult": { + "type": "object", + "properties": { + "wrapperAddress": { + "type": "string", + "description": "Address of the deployed fee wrapper (the deposit target)." + }, + "splitterAddress": { + "type": "string", + "description": "Address of the deployed fee splitter (PaymentSplitter for Morpho, RevenueSplitterOwner for Aave)." + }, + "deployRequestId": { + "type": "string", + "description": "Identifier to poll deploy status." + } + }, + "required": [ + "wrapperAddress", + "splitterAddress", + "deployRequestId" + ] + }, + "EarnDepositIntent": { + "type": "object", + "properties": { + "wrapperAddress": { + "type": "string", + "description": "Address of the deployed Earn wrapper to deposit into, from ListEarnVaults/ListEarnPositions. Must be one of the org's deployed wrappers." + }, + "signWith": { + "type": "string", + "description": "A Wallet account address or Private Key address to deposit from and sign with. Must be an on-chain address; Private Key identifiers are not supported." + }, + "assets": { + "type": "string", + "description": "Amount of the underlying asset to deposit, in raw on-chain units (e.g., '1000000' for 1 USDC at 6 decimals)." + }, + "chainCaip2": { + "type": "string", + "enum": [ + "eip155:1", + "eip155:8453", + "eip155:42161", + "eip155:137", + "eip155:56", + "eip155:4217" + ], + "description": "CAIP-2 chain ID the vault lives on (e.g., 'eip155:8453' for Base)." + }, + "sponsor": { + "type": "boolean", + "description": "Whether to sponsor this transaction via Gas Station.", + "nullable": true + } + }, + "required": [ + "wrapperAddress", + "signWith", + "assets", + "chainCaip2" + ] + }, + "EarnDepositRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_EARN_DEPOSIT" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/EarnDepositIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "EarnDepositResult": { + "type": "object", + "properties": { + "depositRequestId": { + "type": "string", + "description": "Identifier to poll deposit status and tx hash via GetEarnDepositStatus." + } + }, + "required": [ + "depositRequestId" + ] + }, + "EarnEnabledVault": { + "type": "object", + "properties": { + "vaultAddress": { + "type": "string", + "description": "Address of the underlying yield vault." + }, + "wrapperAddress": { + "type": "string", + "description": "Address of the deployed fee wrapper (the deposit target)." + }, + "provider": { + "$ref": "#/components/schemas/EarnProvider" + }, + "caip19": { + "type": "string", + "description": "CAIP-19 asset ID of the vault's underlying asset (e.g. 'eip155:8453/erc20:0x833589...'); the chain is encoded in the identifier." + }, + "apyPct": { + "type": "string", + "description": "Gross annual percentage yield, expressed as a decimal fraction (before fees)." + }, + "totalDeposited": { + "type": "string", + "description": "Total deposited through this wrapper (wrapper TVL), in raw on-chain units of the underlying asset." + }, + "display": { + "$ref": "#/components/schemas/EarnValueDisplay" + }, + "netApyPct": { + "type": "string", + "description": "Annual percentage yield net of fees, expressed as a decimal fraction." + }, + "clientFeeBps": { + "type": "string", + "description": "Client fee taken on yield, in basis points." + }, + "depositsDisabled": { + "type": "boolean", + "description": "When true, deposits to this wrapper are rejected; withdrawals are unaffected. Toggled via EarnSetWrapperState." + }, + "name": { + "type": "string", + "description": "Human-readable vault name from the provider (e.g. 'Steakhouse Prime USDC' for Morpho; the reserve symbol for Aave)." + }, + "curator": { + "type": "string", + "description": "Vault curator name(s), comma-separated when a vault has multiple. Empty for providers without curators (e.g. Aave)." + }, + "claimableClientFee": { + "type": "string", + "description": "The client's claimable fee (releasable now), in raw on-chain units of the underlying asset (the caip19 asset). Turnkey's fee is excluded. Only returned to the parent org; unset when a sub-org queries.", + "nullable": true + }, + "claimableClientFeeDisplay": { + "$ref": "#/components/schemas/EarnValueDisplay" + }, + "clientFeeWallet": { + "type": "string", + "description": "The wallet address that receives the client's fee payouts on-chain. Unset when a sub-org queries.", + "nullable": true + } + } + }, + "EarnPosition": { + "type": "object", + "properties": { + "vaultAddress": { + "type": "string", + "description": "Address of the underlying yield vault." + }, + "wrapperAddress": { + "type": "string", + "description": "Address of the fee wrapper holding the position." + }, + "provider": { + "$ref": "#/components/schemas/EarnProvider" + }, + "caip19": { + "type": "string", + "description": "CAIP-19 asset ID of the vault's underlying asset (e.g. 'eip155:8453/erc20:0x833589...'); the chain is encoded in the identifier." + }, + "currentValue": { + "type": "string", + "description": "Current value of the position in the underlying asset, in raw on-chain units (already net of the wrapper fee)." + }, + "totalDeposited": { + "type": "string", + "description": "Lifetime total deposited into this position, in raw on-chain units." + }, + "totalWithdrawn": { + "type": "string", + "description": "Lifetime total withdrawn from this position, in raw on-chain units." + }, + "display": { + "$ref": "#/components/schemas/EarnPositionDisplay" + }, + "depositsDisabled": { + "type": "boolean", + "description": "When true, deposits to this wrapper are rejected; withdrawals are unaffected. Toggled via EarnSetWrapperState." + } + } + }, + "EarnPositionDisplay": { + "type": "object", + "properties": { + "currentValueUsd": { + "type": "string", + "description": "Current value in USD, for display only." + }, + "totalDepositedUsd": { + "type": "string", + "description": "Total deposited in USD, for display only." + }, + "totalWithdrawnUsd": { + "type": "string", + "description": "Total withdrawn in USD, for display only." + }, + "currentValueCrypto": { + "type": "string", + "description": "Current value in the asset's own units, for display only." + }, + "totalDepositedCrypto": { + "type": "string", + "description": "Total deposited in the asset's own units, for display only." + }, + "totalWithdrawnCrypto": { + "type": "string", + "description": "Total withdrawn in the asset's own units, for display only." + } + } + }, + "EarnProvider": { + "type": "string", + "enum": [ + "EARN_PROVIDER_MORPHO", + "EARN_PROVIDER_AAVE" + ] + }, + "EarnSetWrapperStateIntent": { + "type": "object", + "properties": { + "wrapperAddress": { + "type": "string", + "description": "Address of the deployed Earn wrapper to update, from ListEarnVaults/ListEarnPositions. Must be one of the org's deployed wrappers." + }, + "depositsDisabled": { + "type": "boolean", + "description": "When true, deposits to this wrapper are rejected; withdrawals are unaffected. Set to false to re-enable deposits.", + "nullable": true + } + }, + "required": [ + "wrapperAddress", + "depositsDisabled" + ] + }, + "EarnSetWrapperStateRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_EARN_SET_WRAPPER_STATE" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/EarnSetWrapperStateIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "EarnSetWrapperStateResult": { + "type": "object", + "properties": { + "wrapperAddress": { + "type": "string", + "description": "Address of the updated Earn wrapper." + }, + "depositsDisabled": { + "type": "boolean", + "description": "The wrapper's deposit state after this activity." + } + }, + "required": [ + "wrapperAddress", + "depositsDisabled" + ] + }, + "EarnValueDisplay": { + "type": "object", + "properties": { + "usd": { + "type": "string", + "description": "USD value, for display only." + }, + "crypto": { + "type": "string", + "description": "Normalized amount in the asset's own units, for display only." + } + } + }, + "EarnVault": { + "type": "object", + "properties": { + "vaultAddress": { + "type": "string", + "description": "Address of the underlying yield vault." + }, + "provider": { + "$ref": "#/components/schemas/EarnProvider" + }, + "caip19": { + "type": "string", + "description": "CAIP-19 asset ID of the vault's underlying asset (e.g. 'eip155:8453/erc20:0x833589...'); the chain is encoded in the identifier." + }, + "tvl": { + "type": "string", + "description": "Total value locked in the vault, in raw on-chain units of the underlying asset. The catalog is sorted by the USD value of this." + }, + "apyPct": { + "type": "string", + "description": "Current annual percentage yield, expressed as a decimal fraction (e.g., '0.0812' for 8.12%)." + }, + "enabled": { + "type": "boolean", + "description": "Whether the organization has enabled this vault." + }, + "display": { + "$ref": "#/components/schemas/EarnValueDisplay" + }, + "name": { + "type": "string", + "description": "Human-readable vault name from the provider (e.g. 'Steakhouse Prime USDC' for Morpho; the reserve symbol for Aave)." + }, + "curator": { + "type": "string", + "description": "Vault curator name(s), comma-separated when a vault has multiple. Empty for providers without curators (e.g. Aave)." + } + } + }, + "EarnWithdrawIntent": { + "type": "object", + "properties": { + "wrapperAddress": { + "type": "string", + "description": "Address of the deployed Earn wrapper holding the position to withdraw from, from ListEarnPositions. Must be one of the org's deployed wrappers." + }, + "signWith": { + "type": "string", + "description": "A Wallet account address or Private Key address to withdraw to and sign with. Must be an on-chain address; Private Key identifiers are not supported." + }, + "chainCaip2": { + "type": "string", + "enum": [ + "eip155:1", + "eip155:8453", + "eip155:42161", + "eip155:137", + "eip155:56", + "eip155:4217" + ], + "description": "CAIP-2 chain ID the vault lives on (e.g., 'eip155:8453' for Base)." + }, + "sponsor": { + "type": "boolean", + "description": "Whether to sponsor this transaction via Gas Station.", + "nullable": true + }, + "amountValue": { + "type": "string", + "description": "The amount of the underlying asset to withdraw, in raw on-chain units. Pass 'MAX' to withdraw the entire position." + } + }, + "required": [ + "wrapperAddress", + "signWith", + "chainCaip2", + "amountValue" + ] + }, + "EarnWithdrawRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_EARN_WITHDRAW" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/EarnWithdrawIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "EarnWithdrawResult": { + "type": "object", + "properties": { + "withdrawRequestId": { + "type": "string", + "description": "Identifier to poll withdrawal status and tx hash via GetEarnWithdrawStatus." + } + }, + "required": [ + "withdrawRequestId" + ] + }, + "Effect": { + "type": "string", + "enum": [ + "EFFECT_ALLOW", + "EFFECT_DENY" + ] + }, + "EmailAuthCustomizationParams": { + "type": "object", + "properties": { + "appName": { + "type": "string", + "description": "The name of the application. This field is required and will be used in email notifications if an email template is not provided." + }, + "logoUrl": { + "type": "string", + "description": "A URL pointing to a logo in PNG format. Note this logo will be resized to fit into 340px x 124px.", + "nullable": true + }, + "magicLinkTemplate": { + "type": "string", + "description": "A template for the URL to be used in a magic link button, e.g. `https://dapp.xyz/%s`. The auth bundle will be interpolated into the `%s`.", + "nullable": true + }, + "templateVariables": { + "type": "string", + "description": "JSON object containing key/value pairs to be used with custom templates.", + "nullable": true + }, + "templateId": { + "type": "string", + "description": "Unique identifier for a given Email Template. If not specified, the default is the most recent Email Template.", + "nullable": true + } + }, + "required": [ + "appName" + ] + }, + "EmailAuthIntent": { + "type": "object", + "properties": { + "email": { + "type": "string", + "description": "Email of the authenticating user." + }, + "targetPublicKey": { + "type": "string", + "description": "Client-side public key generated by the user, to which the email auth bundle (credentials) will be encrypted." + }, + "apiKeyName": { + "type": "string", + "description": "Optional human-readable name for an API Key. If none provided, default to Email Auth - ", + "nullable": true + }, + "expirationSeconds": { + "type": "string", + "description": "Expiration window (in seconds) indicating how long the API key is valid for. If not provided, a default of 15 minutes will be used.", + "nullable": true + }, + "emailCustomization": { + "$ref": "#/components/schemas/EmailCustomizationParams" + }, + "invalidateExisting": { + "type": "boolean", + "description": "Invalidate all other previously generated Email Auth API keys", + "nullable": true + }, + "sendFromEmailAddress": { + "type": "string", + "description": "Optional custom email address from which to send the email", + "nullable": true + }, + "sendFromEmailSenderName": { + "type": "string", + "description": "Optional custom sender name for use with sendFromEmailAddress; if left empty, will default to 'Notifications'", + "nullable": true + }, + "replyToEmailAddress": { + "type": "string", + "description": "Optional custom email address to use as reply-to", + "nullable": true + } + }, + "required": [ + "email", + "targetPublicKey" + ] + }, + "EmailAuthIntentV2": { + "type": "object", + "properties": { + "email": { + "type": "string", + "description": "Email of the authenticating user." + }, + "targetPublicKey": { + "type": "string", + "description": "Client-side public key generated by the user, to which the email auth bundle (credentials) will be encrypted." + }, + "apiKeyName": { + "type": "string", + "description": "Optional human-readable name for an API Key. If none provided, default to Email Auth - ", + "nullable": true + }, + "expirationSeconds": { + "type": "string", + "description": "Expiration window (in seconds) indicating how long the API key is valid for. If not provided, a default of 15 minutes will be used.", + "nullable": true + }, + "emailCustomization": { + "$ref": "#/components/schemas/EmailCustomizationParams" + }, + "invalidateExisting": { + "type": "boolean", + "description": "Invalidate all other previously generated Email Auth API keys", + "nullable": true + }, + "sendFromEmailAddress": { + "type": "string", + "description": "Optional custom email address from which to send the email", + "nullable": true + }, + "sendFromEmailSenderName": { + "type": "string", + "description": "Optional custom sender name for use with sendFromEmailAddress; if left empty, will default to 'Notifications'", + "nullable": true + }, + "replyToEmailAddress": { + "type": "string", + "description": "Optional custom email address to use as reply-to", + "nullable": true + } + }, + "required": [ + "email", + "targetPublicKey" + ] + }, + "EmailAuthIntentV3": { + "type": "object", + "properties": { + "email": { + "type": "string", + "description": "Email of the authenticating user." + }, + "targetPublicKey": { + "type": "string", + "description": "Client-side public key generated by the user, to which the email auth bundle (credentials) will be encrypted." + }, + "apiKeyName": { + "type": "string", + "description": "Optional human-readable name for an API Key. If none provided, default to Email Auth - ", + "nullable": true + }, + "expirationSeconds": { + "type": "string", + "description": "Expiration window (in seconds) indicating how long the API key is valid for. If not provided, a default of 15 minutes will be used.", + "nullable": true + }, + "emailCustomization": { + "$ref": "#/components/schemas/EmailAuthCustomizationParams" + }, + "invalidateExisting": { + "type": "boolean", + "description": "Invalidate all other previously generated Email Auth API keys", + "nullable": true + }, + "sendFromEmailAddress": { + "type": "string", + "description": "Optional custom email address from which to send the email", + "nullable": true + }, + "sendFromEmailSenderName": { + "type": "string", + "description": "Optional custom sender name for use with sendFromEmailAddress; if left empty, will default to 'Notifications'", + "nullable": true + }, + "replyToEmailAddress": { + "type": "string", + "description": "Optional custom email address to use as reply-to", + "nullable": true + } + }, + "required": [ + "email", + "targetPublicKey", + "emailCustomization" + ] + }, + "EmailAuthRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_EMAIL_AUTH_V3" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/EmailAuthIntentV3" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "EmailAuthResult": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "Unique identifier for the authenticating User." + }, + "apiKeyId": { + "type": "string", + "description": "Unique identifier for the created API key." + } + }, + "required": [ + "userId", + "apiKeyId" + ] + }, + "EmailCustomizationParams": { + "type": "object", + "properties": { + "appName": { + "type": "string", + "description": "The name of the application.", + "nullable": true + }, + "logoUrl": { + "type": "string", + "description": "A URL pointing to a logo in PNG format. Note this logo will be resized to fit into 340px x 124px.", + "nullable": true + }, + "magicLinkTemplate": { + "type": "string", + "description": "A template for the URL to be used in a magic link button, e.g. `https://dapp.xyz/%s`. The auth bundle will be interpolated into the `%s`.", + "nullable": true + }, + "templateVariables": { + "type": "string", + "description": "JSON object containing key/value pairs to be used with custom templates.", + "nullable": true + }, + "templateId": { + "type": "string", + "description": "Unique identifier for a given Email Template. If not specified, the default is the most recent Email Template.", + "nullable": true + } + } + }, + "EmailCustomizationParamsV2": { + "type": "object", + "properties": { + "logoUrl": { + "type": "string", + "description": "A URL pointing to a logo in PNG format. Note this logo will be resized to fit into 340px x 124px.", + "nullable": true + }, + "magicLinkTemplate": { + "type": "string", + "description": "A template for the URL to be used in a magic link button, e.g. `https://dapp.xyz/%s`. The auth bundle will be interpolated into the `%s`.", + "nullable": true + }, + "templateVariables": { + "type": "string", + "description": "JSON object containing key/value pairs to be used with custom templates.", + "nullable": true + }, + "templateId": { + "type": "string", + "description": "Unique identifier for a given Email Template. If not specified, the default is the most recent Email Template.", + "nullable": true + } + } + }, + "EmailEvent": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the email event" + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for the organization associated with the email event" + }, + "messageId": { + "type": "string", + "description": "Provider message identifier. Multiple events can share the same message ID" + }, + "eventType": { + "type": "string", + "description": "Email event type, such as Send, Delivery, Bounce, or DeliveryDelay" + }, + "fromAddress": { + "type": "string", + "description": "Sender email address" + }, + "toAddress": { + "type": "string", + "description": "Recipient email address" + }, + "senderTenant": { + "type": "string", + "description": "SES tenant that sent the email, when available" + }, + "timestamp": { + "type": "string", + "description": "Event timestamp as millisecond epoch string" + }, + "createdAt": { + "type": "string", + "description": "Creation timestamp as millisecond epoch string" + }, + "details": { + "$ref": "#/components/schemas/EmailEventDetails" + } + }, + "required": [ + "id", + "organizationId", + "messageId", + "eventType", + "fromAddress", + "toAddress", + "timestamp", + "createdAt", + "details" + ] + }, + "EmailEventDetails": { + "type": "object", + "properties": { + "bounceType": { + "type": "string", + "description": "Bounce type for Bounce events" + }, + "bounceSubType": { + "type": "string", + "description": "Bounce subtype for Bounce events" + }, + "diagnosticCode": { + "type": "string", + "description": "Diagnostic text for Bounce or DeliveryDelay events" + }, + "deliverySmtpResponse": { + "type": "string", + "description": "SMTP response for Delivery events" + }, + "deliveryProcessingTimeMillis": { + "type": "string", + "format": "uint64", + "description": "Processing time in milliseconds for Delivery events" + }, + "deliveryDelayType": { + "type": "string", + "description": "Delay type for DeliveryDelay events" + }, + "complaintFeedbackType": { + "type": "string", + "description": "Feedback type for Complaint events" + } + } + }, + "EnableAuthProxyIntent": { + "type": "object" + }, + "EnableAuthProxyResult": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "A User ID with permission to initiate authentication." + } + }, + "required": [ + "userId" + ] + }, + "EthCallParams": { + "type": "object", + "properties": { + "to": { + "type": "string", + "description": "Recipient address as a hex string with 0x prefix." + }, + "value": { + "type": "string", + "description": "Amount of native asset to send in wei.", + "nullable": true + }, + "data": { + "type": "string", + "description": "Hex-encoded call data for contract interactions.", + "nullable": true + } + }, + "required": [ + "to" + ] + }, + "EthFailureDetails": { + "type": "object", + "properties": { + "revertChain": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RevertChainEntry" + }, + "description": "Ethereum revert chain, ordered from outermost to innermost." + } + } + }, + "EthSendRawTransactionIntent": { + "type": "object", + "properties": { + "signedTransaction": { + "type": "string", + "description": "The raw, signed transaction to be sent." + }, + "caip2": { + "type": "string", + "enum": [ + "eip155:1", + "eip155:11155111", + "eip155:8453", + "eip155:84532", + "eip155:137", + "eip155:80002", + "eip155:56", + "eip155:97", + "eip155:10", + "eip155:11155420", + "eip155:143", + "eip155:10143", + "eip155:42161", + "eip155:4217", + "eip155:42431", + "eip155:421614" + ], + "description": "CAIP-2 chain ID (e.g., 'eip155:1' for Ethereum mainnet)." + } + }, + "required": [ + "signedTransaction", + "caip2" + ] + }, + "EthSendRawTransactionResult": { + "type": "object", + "properties": { + "transactionHash": { + "type": "string", + "description": "The transaction hash of the sent transaction" + } + }, + "required": [ + "transactionHash" + ] + }, + "EthSendTransactionIntent": { + "type": "object", + "properties": { + "from": { + "type": "string", + "description": "A wallet or private key address to sign with. This does not support private key IDs." + }, + "sponsor": { + "type": "boolean", + "description": "Whether to sponsor this transaction via Gas Station.", + "nullable": true + }, + "caip2": { + "type": "string", + "enum": [ + "eip155:1", + "eip155:11155111", + "eip155:8453", + "eip155:84532", + "eip155:137", + "eip155:80002", + "eip155:56", + "eip155:97", + "eip155:10", + "eip155:11155420", + "eip155:143", + "eip155:10143", + "eip155:42161", + "eip155:4217", + "eip155:42431", + "eip155:421614" + ], + "description": "CAIP-2 chain ID (e.g., 'eip155:1' for Ethereum mainnet)." + }, + "to": { + "type": "string", + "description": "Recipient address as a hex string with 0x prefix." + }, + "value": { + "type": "string", + "description": "Amount of native asset to send in wei.", + "nullable": true + }, + "data": { + "type": "string", + "description": "Hex-encoded call data for contract interactions.", + "nullable": true + }, + "nonce": { + "type": "string", + "description": "Transaction nonce, for EIP-1559 and Turnkey Gas Station authorizations.", + "nullable": true + }, + "gasLimit": { + "type": "string", + "description": "Maximum amount of gas to use for this transaction, for EIP-1559 transactions.", + "nullable": true + }, + "maxFeePerGas": { + "type": "string", + "description": "Maximum total fee per gas unit (base fee + priority fee) in wei. Required for non-sponsored (EIP-1559) transactions. Not used for sponsored transactions.", + "nullable": true + }, + "maxPriorityFeePerGas": { + "type": "string", + "description": "Maximum priority fee (tip) per gas unit in wei. Required for non-sponsored (EIP-1559) transactions. Not used for sponsored transactions.", + "nullable": true + }, + "deadline": { + "type": "string", + "description": "Unix timestamp in seconds for EIP-712 execution deadline. Only used when sponsor=true.", + "nullable": true + }, + "gasStationNonce": { + "type": "string", + "description": "The gas station delegate contract nonce. Only used when sponsor=true. Include this if you want maximal security posture.", + "nullable": true + } + }, + "required": [ + "from", + "caip2", + "to" + ] + }, + "EthSendTransactionIntentV2": { + "type": "object", + "properties": { + "from": { + "type": "string", + "description": "A wallet or private key address to sign with. This does not support private key IDs." + }, + "caip2": { + "type": "string", + "enum": [ + "eip155:1", + "eip155:11155111", + "eip155:8453", + "eip155:84532", + "eip155:137", + "eip155:80002", + "eip155:56", + "eip155:97", + "eip155:10", + "eip155:11155420", + "eip155:143", + "eip155:10143", + "eip155:42161", + "eip155:4217", + "eip155:42431", + "eip155:421614" + ], + "description": "CAIP-2 chain ID (e.g., 'eip155:1' for Ethereum mainnet)." + }, + "sponsor": { + "type": "boolean", + "description": "Whether to sponsor this transaction via Gas Station. If false or unset, the EOA pays gas. A single call uses EIP-1559; multiple calls use EIP-7702 batch execution via Gas Station.", + "nullable": true + }, + "nonce": { + "type": "string", + "description": "Outer transaction nonce. Omit to auto-fetch.", + "nullable": true + }, + "gasLimit": { + "type": "string", + "description": "Maximum amount of gas for the outer transaction. Omit to auto-estimate.", + "nullable": true + }, + "maxFeePerGas": { + "type": "string", + "description": "Maximum total fee per gas unit (base fee + priority fee) in wei. Omit to auto-estimate.", + "nullable": true + }, + "maxPriorityFeePerGas": { + "type": "string", + "description": "Maximum priority fee (tip) per gas unit in wei. Omit to auto-estimate.", + "nullable": true + }, + "deadline": { + "type": "string", + "description": "Unix timestamp in seconds for EIP-712 execution deadline. Only used when sponsor=true.", + "nullable": true + }, + "gasStationNonce": { + "type": "string", + "description": "The gas station delegate contract nonce used in the BatchExecution EIP-712 message. Valid for sponsored transactions and non-sponsored multi-call batches. Omit to auto-fetch. Use the nonces endpoint for replay protection.", + "nullable": true + }, + "calls": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EthCallParams" + }, + "description": "Ordered list of calls to execute. Must contain between 1 and 50 entries. A single entry with sponsor=false uses EIP-1559; multiple entries use EIP-7702 batch execution via Gas Station." + } + }, + "required": [ + "from", + "caip2", + "calls" + ] + }, + "EthSendTransactionRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_ETH_SEND_TRANSACTION_V2" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/EthSendTransactionIntentV2" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "EthSendTransactionResult": { + "type": "object", + "properties": { + "sendTransactionStatusId": { + "type": "string", + "description": "The send_transaction_status ID associated with the transaction submission" + } + }, + "required": [ + "sendTransactionStatusId" + ] + }, + "EthSendTransactionResultV2": { + "type": "object", + "properties": { + "sendTransactionStatusId": { + "type": "string", + "description": "The send_transaction_status ID associated with the transaction submission" + } + }, + "required": [ + "sendTransactionStatusId" + ] + }, + "EthSendTransactionStatus": { + "type": "object", + "properties": { + "txHash": { + "type": "string", + "description": "The Ethereum transaction hash, if available.", + "nullable": true + } + } + }, + "EthTransactionHistoryItem": { + "type": "object", + "properties": { + "transactionHash": { + "type": "string", + "description": "EVM transaction hash." + }, + "block": { + "$ref": "#/components/schemas/TransactionHistoryBlock" + }, + "status": { + "type": "string", + "enum": [ + "CONFIRMED", + "FINALIZED" + ], + "description": "Transaction confirmation status." + }, + "origin": { + "type": "string", + "description": "Origin of the transaction. Examples include TURNKEY." + }, + "from": { + "type": "string", + "description": "EVM sender address for the transaction." + }, + "to": { + "type": "string", + "description": "EVM transaction destination address, such as the called contract or EVM tx.to. Omitted for contract-creation transactions with no destination. Recipients and payers of value transfers are reflected in transfers[].counterparty.", + "nullable": true + }, + "fee": { + "$ref": "#/components/schemas/TransactionHistoryFee" + }, + "transfers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TransactionHistoryTransfer" + }, + "description": "Asset transfers associated with the transaction." + }, + "turnkey": { + "$ref": "#/components/schemas/TransactionHistoryTurnkey" + } + }, + "required": [ + "transactionHash", + "block", + "status", + "origin", + "from", + "fee", + "transfers" + ] + }, + "EthUndelegate7702Intent": { + "type": "object", + "properties": { + "from": { + "type": "string", + "description": "A wallet or private key address to undelegate. This does not support private key IDs." + }, + "caip2": { + "type": "string", + "enum": [ + "eip155:1", + "eip155:11155111", + "eip155:8453", + "eip155:84532", + "eip155:137", + "eip155:80002", + "eip155:56", + "eip155:97", + "eip155:10", + "eip155:11155420", + "eip155:143", + "eip155:10143", + "eip155:42161", + "eip155:421614" + ], + "description": "CAIP-2 chain ID (e.g., 'eip155:1' for Ethereum mainnet)." + }, + "nonce": { + "type": "string", + "description": "Outer transaction nonce. Omit to auto-fetch.", + "nullable": true + }, + "gasLimit": { + "type": "string", + "description": "Maximum amount of gas for the undelegation transaction. Omit to use the fixed undelegation gas limit.", + "nullable": true + }, + "maxFeePerGas": { + "type": "string", + "description": "Maximum total fee per gas unit (base fee + priority fee) in wei. Omit to auto-estimate.", + "nullable": true + }, + "maxPriorityFeePerGas": { + "type": "string", + "description": "Maximum priority fee (tip) per gas unit in wei. Omit to auto-estimate.", + "nullable": true + } + }, + "required": [ + "from", + "caip2" + ] + }, + "EthUndelegate7702Request": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_ETH_UNDELEGATE_7702" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/EthUndelegate7702Intent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "EthUndelegate7702Result": { + "type": "object", + "properties": { + "sendTransactionStatusId": { + "type": "string", + "description": "The send_transaction_status ID associated with the undelegation transaction submission" + } + }, + "required": [ + "sendTransactionStatusId" + ] + }, + "ExecuteSwapIntent": { + "type": "object", + "properties": { + "inputToken": { + "type": "string", + "description": "CAIP-19 asset ID for the input asset. The chain is derived from this value." + }, + "outputToken": { + "type": "string", + "description": "CAIP-19 asset ID for the output asset. May be on a different chain than `input_token` for cross-chain swaps." + }, + "inputAmount": { + "type": "string", + "description": "Base-unit amount of the input asset." + }, + "walletAccount": { + "type": "string", + "description": "Wallet account address to sign and submit the swap transaction from. Cross-wallet swaps are not supported." + }, + "sponsor": { + "type": "boolean", + "description": "Whether to sponsor the resulting swap transaction via Gas Station when supported by the chain.", + "nullable": true + }, + "slippage": { + "type": "string", + "description": "Maximum allowed slippage in basis points.", + "nullable": true + }, + "provider": { + "type": "string", + "description": "Swap provider to execute with, as returned by create_swap_quote. When omitted, execution uses the default provider.", + "nullable": true + }, + "minOutputAmount": { + "type": "string", + "description": "Minimum acceptable base-unit amount of the output asset. Execution fails if the swap provider's quoted minimum output falls below this floor at execution time." + } + }, + "required": [ + "inputToken", + "outputToken", + "inputAmount", + "walletAccount", + "minOutputAmount" + ] + }, + "ExecuteSwapIntentV2": { + "type": "object", + "properties": { + "quoteId": { + "type": "string", + "description": "Quote identifier returned by create_swap_quote. Execution is bound to this quote; the signer is derived from the quote and must not be resupplied." + }, + "inputToken": { + "type": "string", + "description": "CAIP-19 asset ID for the input asset." + }, + "inputAmount": { + "type": "string", + "description": "Exact base-unit amount of the input asset committed by the quote." + }, + "outputToken": { + "type": "string", + "description": "CAIP-19 asset ID for the output asset." + }, + "quotedOutputAmount": { + "type": "string", + "description": "Exact quoted base-unit output amount committed by the quote." + }, + "minOutputAmount": { + "type": "string", + "description": "Exact minimum base-unit output committed by the quote." + }, + "sponsor": { + "type": "boolean", + "description": "Whether the quoted transaction is sponsored.", + "nullable": true + }, + "evmNonce": { + "type": "string", + "description": "Exact EVM sender (EOA account) nonce. Valid only for a non-sponsored EVM swap. Honored for already-delegated (Type-2) batch swaps and single-call swaps; ignored for not-yet-delegated EIP-7702 (Type-4) batches where the outer nonce is derived from the authorization. Prefer gas_station_nonce for batch replay protection and use the nonces endpoint to fetch it. Omit to auto-fetch.", + "nullable": true + }, + "recentBlockhash": { + "type": "string", + "description": "Exact Solana recent blockhash. Valid only for a Solana swap, including sponsored swaps. Omit to auto-fetch.", + "nullable": true + }, + "gasStationNonce": { + "type": "string", + "description": "Exact gas station delegate contract nonce used in the BatchExecution EIP-712 message. Valid for sponsored EVM swaps and non-sponsored EVM swaps that execute as a multi-call batch (for example ERC-20 approve + swap). This is the replay-protection nonce for gas-station batches; use the nonces endpoint to fetch it. Omit to auto-fetch.", + "nullable": true + } + }, + "required": [ + "quoteId", + "inputToken", + "inputAmount", + "outputToken", + "quotedOutputAmount", + "minOutputAmount", + "sponsor" + ] + }, + "ExecuteSwapResult": { + "type": "object", + "properties": { + "swapRequestId": { + "type": "string", + "description": "Identifier to poll swap status via GetSwapStatus." + }, + "provider": { + "type": "string", + "description": "Swap provider used to build the transaction.", + "nullable": true + }, + "quoteId": { + "type": "string", + "description": "Quote identifier used for execution, if any.", + "nullable": true + } + }, + "required": [ + "swapRequestId" + ] + }, + "ExportPrivateKeyIntent": { + "type": "object", + "properties": { + "privateKeyId": { + "type": "string", + "description": "Unique identifier for a given Private Key." + }, + "targetPublicKey": { + "type": "string", + "description": "Client-side public key generated by the user, to which the export bundle will be encrypted." + } + }, + "required": [ + "privateKeyId", + "targetPublicKey" + ] + }, + "ExportPrivateKeyRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_EXPORT_PRIVATE_KEY" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/ExportPrivateKeyIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "ExportPrivateKeyResult": { + "type": "object", + "properties": { + "privateKeyId": { + "type": "string", + "description": "Unique identifier for a given Private Key." + }, + "exportBundle": { + "type": "string", + "description": "Export bundle containing a private key encrypted to the client's target public key." + } + }, + "required": [ + "privateKeyId", + "exportBundle" + ] + }, + "ExportWalletAccountIntent": { + "type": "object", + "properties": { + "address": { + "type": "string", + "description": "Address to identify Wallet Account." + }, + "targetPublicKey": { + "type": "string", + "description": "Client-side public key generated by the user, to which the export bundle will be encrypted." + } + }, + "required": [ + "address", + "targetPublicKey" + ] + }, + "ExportWalletAccountRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_EXPORT_WALLET_ACCOUNT" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/ExportWalletAccountIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "ExportWalletAccountResult": { + "type": "object", + "properties": { + "address": { + "type": "string", + "description": "Address to identify Wallet Account." + }, + "exportBundle": { + "type": "string", + "description": "Export bundle containing a private key encrypted by the client's target public key." + } + }, + "required": [ + "address", + "exportBundle" + ] + }, + "ExportWalletIntent": { + "type": "object", + "properties": { + "walletId": { + "type": "string", + "description": "Unique identifier for a given Wallet." + }, + "targetPublicKey": { + "type": "string", + "description": "Client-side public key generated by the user, to which the export bundle will be encrypted." + }, + "language": { + "$ref": "#/components/schemas/MnemonicLanguage" + } + }, + "required": [ + "walletId", + "targetPublicKey" + ] + }, + "ExportWalletRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_EXPORT_WALLET" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/ExportWalletIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "ExportWalletResult": { + "type": "object", + "properties": { + "walletId": { + "type": "string", + "description": "Unique identifier for a given Wallet." + }, + "exportBundle": { + "type": "string", + "description": "Export bundle containing a wallet mnemonic + optional newline passphrase encrypted by the client's target public key." + } + }, + "required": [ + "walletId", + "exportBundle" + ] + }, + "Feature": { + "type": "object", + "properties": { + "name": { + "$ref": "#/components/schemas/FeatureName" + }, + "value": { + "type": "string", + "nullable": true + } + } + }, + "FeatureName": { + "type": "string", + "enum": [ + "FEATURE_NAME_ROOT_USER_EMAIL_RECOVERY", + "FEATURE_NAME_WEBAUTHN_ORIGINS", + "FEATURE_NAME_EMAIL_AUTH", + "FEATURE_NAME_EMAIL_RECOVERY", + "FEATURE_NAME_WEBHOOK", + "FEATURE_NAME_SMS_AUTH", + "FEATURE_NAME_OTP_EMAIL_AUTH", + "FEATURE_NAME_AUTH_PROXY", + "FEATURE_NAME_SOLANA_RENT_PREFUND_ENABLED", + "FEATURE_NAME_SWAP_CONFIG", + "FEATURE_NAME_EARN_CONFIG" + ] + }, + "FiatOnRampBlockchainNetwork": { + "type": "string", + "enum": [ + "FIAT_ON_RAMP_BLOCKCHAIN_NETWORK_BITCOIN", + "FIAT_ON_RAMP_BLOCKCHAIN_NETWORK_ETHEREUM", + "FIAT_ON_RAMP_BLOCKCHAIN_NETWORK_SOLANA", + "FIAT_ON_RAMP_BLOCKCHAIN_NETWORK_BASE" + ] + }, + "FiatOnRampCredential": { + "type": "object", + "properties": { + "fiatOnrampCredentialId": { + "type": "string", + "description": "Unique identifier for a given Fiat On-Ramp Credential." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for an Organization." + }, + "onrampProvider": { + "$ref": "#/components/schemas/FiatOnRampProvider" + }, + "projectId": { + "type": "string", + "description": "Project ID for the on-ramp provider. Some providers, like Coinbase, require this additional identifier.", + "nullable": true + }, + "publishableApiKey": { + "type": "string", + "description": "Publishable API key for the on-ramp provider." + }, + "encryptedSecretApiKey": { + "type": "string", + "description": "Secret API key for the on-ramp provider encrypted to our on-ramp encryption public key." + }, + "encryptedPrivateApiKey": { + "type": "string", + "description": "Private API key for the on-ramp provider encrypted to our on-ramp encryption public key. Some providers, like Coinbase, require this additional key.", + "nullable": true + }, + "sandboxMode": { + "type": "boolean", + "description": "If the on-ramp credential is a sandbox credential." + }, + "createdAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + } + }, + "required": [ + "fiatOnrampCredentialId", + "organizationId", + "onrampProvider", + "publishableApiKey", + "encryptedSecretApiKey", + "createdAt", + "updatedAt" + ] + }, + "FiatOnRampCryptoCurrency": { + "type": "string", + "enum": [ + "FIAT_ON_RAMP_CRYPTO_CURRENCY_BTC", + "FIAT_ON_RAMP_CRYPTO_CURRENCY_ETH", + "FIAT_ON_RAMP_CRYPTO_CURRENCY_SOL", + "FIAT_ON_RAMP_CRYPTO_CURRENCY_USDC" + ] + }, + "FiatOnRampCurrency": { + "type": "string", + "enum": [ + "FIAT_ON_RAMP_CURRENCY_AUD", + "FIAT_ON_RAMP_CURRENCY_BGN", + "FIAT_ON_RAMP_CURRENCY_BRL", + "FIAT_ON_RAMP_CURRENCY_CAD", + "FIAT_ON_RAMP_CURRENCY_CHF", + "FIAT_ON_RAMP_CURRENCY_COP", + "FIAT_ON_RAMP_CURRENCY_CZK", + "FIAT_ON_RAMP_CURRENCY_DKK", + "FIAT_ON_RAMP_CURRENCY_DOP", + "FIAT_ON_RAMP_CURRENCY_EGP", + "FIAT_ON_RAMP_CURRENCY_EUR", + "FIAT_ON_RAMP_CURRENCY_GBP", + "FIAT_ON_RAMP_CURRENCY_HKD", + "FIAT_ON_RAMP_CURRENCY_IDR", + "FIAT_ON_RAMP_CURRENCY_ILS", + "FIAT_ON_RAMP_CURRENCY_JOD", + "FIAT_ON_RAMP_CURRENCY_KES", + "FIAT_ON_RAMP_CURRENCY_KWD", + "FIAT_ON_RAMP_CURRENCY_LKR", + "FIAT_ON_RAMP_CURRENCY_MXN", + "FIAT_ON_RAMP_CURRENCY_NGN", + "FIAT_ON_RAMP_CURRENCY_NOK", + "FIAT_ON_RAMP_CURRENCY_NZD", + "FIAT_ON_RAMP_CURRENCY_OMR", + "FIAT_ON_RAMP_CURRENCY_PEN", + "FIAT_ON_RAMP_CURRENCY_PLN", + "FIAT_ON_RAMP_CURRENCY_RON", + "FIAT_ON_RAMP_CURRENCY_SEK", + "FIAT_ON_RAMP_CURRENCY_THB", + "FIAT_ON_RAMP_CURRENCY_TRY", + "FIAT_ON_RAMP_CURRENCY_TWD", + "FIAT_ON_RAMP_CURRENCY_USD", + "FIAT_ON_RAMP_CURRENCY_VND", + "FIAT_ON_RAMP_CURRENCY_ZAR" + ] + }, + "FiatOnRampPaymentMethod": { + "type": "string", + "enum": [ + "FIAT_ON_RAMP_PAYMENT_METHOD_CREDIT_DEBIT_CARD", + "FIAT_ON_RAMP_PAYMENT_METHOD_APPLE_PAY", + "FIAT_ON_RAMP_PAYMENT_METHOD_GBP_BANK_TRANSFER", + "FIAT_ON_RAMP_PAYMENT_METHOD_GBP_OPEN_BANKING_PAYMENT", + "FIAT_ON_RAMP_PAYMENT_METHOD_GOOGLE_PAY", + "FIAT_ON_RAMP_PAYMENT_METHOD_SEPA_BANK_TRANSFER", + "FIAT_ON_RAMP_PAYMENT_METHOD_PIX_INSTANT_PAYMENT", + "FIAT_ON_RAMP_PAYMENT_METHOD_PAYPAL", + "FIAT_ON_RAMP_PAYMENT_METHOD_VENMO", + "FIAT_ON_RAMP_PAYMENT_METHOD_MOONPAY_BALANCE", + "FIAT_ON_RAMP_PAYMENT_METHOD_CRYPTO_ACCOUNT", + "FIAT_ON_RAMP_PAYMENT_METHOD_FIAT_WALLET", + "FIAT_ON_RAMP_PAYMENT_METHOD_ACH_BANK_ACCOUNT" + ] + }, + "FiatOnRampProvider": { + "type": "string", + "enum": [ + "FIAT_ON_RAMP_PROVIDER_COINBASE", + "FIAT_ON_RAMP_PROVIDER_MOONPAY" + ] + }, + "GetActivitiesRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "filterByStatus": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ActivityStatus" + }, + "description": "Array of activity statuses filtering which activities will be listed in the response." + }, + "paginationOptions": { + "$ref": "#/components/schemas/Pagination" + }, + "filterByType": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ActivityType" + }, + "description": "Array of activity types filtering which activities will be listed in the response." + } + }, + "required": [ + "organizationId" + ] + }, + "GetActivitiesResponse": { + "type": "object", + "properties": { + "activities": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Activity" + }, + "description": "A list of activities." + } + }, + "required": [ + "activities" + ] + }, + "GetActivityRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "activityId": { + "type": "string", + "description": "Unique identifier for a given activity object." + } + }, + "required": [ + "organizationId", + "activityId" + ] + }, + "GetApiKeyRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "apiKeyId": { + "type": "string", + "description": "Unique identifier for a given API key." + } + }, + "required": [ + "organizationId", + "apiKeyId" + ] + }, + "GetApiKeyResponse": { + "type": "object", + "properties": { + "apiKey": { + "$ref": "#/components/schemas/ApiKey" + } + }, + "required": [ + "apiKey" + ] + }, + "GetApiKeysRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "userId": { + "type": "string", + "description": "Unique identifier for a given user.", + "nullable": true + } + }, + "required": [ + "organizationId" + ] + }, + "GetApiKeysResponse": { + "type": "object", + "properties": { + "apiKeys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ApiKey" + }, + "description": "A list of API keys." + } + }, + "required": [ + "apiKeys" + ] + }, + "GetAppProofsRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "activityId": { + "type": "string", + "description": "Unique identifier for a given activity." + } + }, + "required": [ + "organizationId", + "activityId" + ] + }, + "GetAppProofsResponse": { + "type": "object", + "properties": { + "appProofs": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AppProof" + } + } + }, + "required": [ + "appProofs" + ] + }, + "GetAppStatusRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "appId": { + "type": "string", + "description": "Unique identifier for a given TVC App." + } + }, + "required": [ + "organizationId", + "appId" + ] + }, + "GetAppStatusResponse": { + "type": "object", + "properties": { + "appStatus": { + "$ref": "#/components/schemas/AppStatus" + } + }, + "required": [ + "appStatus" + ] + }, + "GetAuthenticatorRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "authenticatorId": { + "type": "string", + "description": "Unique identifier for a given authenticator." + } + }, + "required": [ + "organizationId", + "authenticatorId" + ] + }, + "GetAuthenticatorResponse": { + "type": "object", + "properties": { + "authenticator": { + "$ref": "#/components/schemas/Authenticator" + } + }, + "required": [ + "authenticator" + ] + }, + "GetAuthenticatorsRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "userId": { + "type": "string", + "description": "Unique identifier for a given user." + } + }, + "required": [ + "organizationId", + "userId" + ] + }, + "GetAuthenticatorsResponse": { + "type": "object", + "properties": { + "authenticators": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Authenticator" + }, + "description": "A list of authenticators." + } + }, + "required": [ + "authenticators" + ] + }, + "GetBootProofRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "ephemeralKey": { + "type": "string", + "description": "Hex encoded ephemeral public key." + } + }, + "required": [ + "organizationId", + "ephemeralKey" + ] + }, + "GetClaimEarnFeesStatusRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "claimRequestId": { + "type": "string", + "description": "The claim_request_id returned by ClaimEarnFees." + } + }, + "required": [ + "organizationId", + "claimRequestId" + ] + }, + "GetClaimEarnFeesStatusResponse": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "PENDING", + "COMPLETED", + "FAILED" + ], + "description": "Status of the fee claim." + }, + "claimTxHash": { + "type": "string", + "description": "Transaction hash of the fee claim, once available.", + "nullable": true + }, + "error": { + "type": "string", + "description": "Reason the fee claim transaction failed, when status is FAILED.", + "nullable": true + } + }, + "required": [ + "status" + ] + }, + "GetEarnDeployStatusRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "deployRequestId": { + "type": "string", + "description": "The deploy_request_id returned by EarnDeployWrapper." + } + }, + "required": [ + "organizationId", + "deployRequestId" + ] + }, + "GetEarnDeployStatusResponse": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "PENDING", + "COMPLETED", + "FAILED" + ], + "description": "Status of the wrapper deployment." + }, + "deployTxHash": { + "type": "string", + "description": "Transaction hash of the deployment, once available.", + "nullable": true + }, + "error": { + "type": "string", + "description": "Reason the deployment transaction failed, when status is FAILED.", + "nullable": true + } + }, + "required": [ + "status" + ] + }, + "GetEarnDepositStatusRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "depositRequestId": { + "type": "string", + "description": "The deposit_request_id returned by EarnDeposit." + } + }, + "required": [ + "organizationId", + "depositRequestId" + ] + }, + "GetEarnDepositStatusResponse": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "PENDING", + "COMPLETED", + "FAILED" + ], + "description": "Status of the deposit." + }, + "depositTxHash": { + "type": "string", + "description": "Transaction hash of the deposit, once available.", + "nullable": true + }, + "error": { + "type": "string", + "description": "Reason the deposit transaction failed, when status is FAILED.", + "nullable": true + } + }, + "required": [ + "status" + ] + }, + "GetEarnWithdrawStatusRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "withdrawRequestId": { + "type": "string", + "description": "The withdraw_request_id returned by EarnWithdraw." + } + }, + "required": [ + "organizationId", + "withdrawRequestId" + ] + }, + "GetEarnWithdrawStatusResponse": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "PENDING", + "COMPLETED", + "FAILED" + ], + "description": "Status of the withdrawal." + }, + "withdrawTxHash": { + "type": "string", + "description": "Transaction hash of the withdrawal, once available.", + "nullable": true + }, + "error": { + "type": "string", + "description": "Reason the withdrawal transaction failed, when status is FAILED.", + "nullable": true + } + }, + "required": [ + "status" + ] + }, + "GetGasUsageRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + } + }, + "required": [ + "organizationId" + ] + }, + "GetGasUsageResponse": { + "type": "object", + "properties": { + "windowDurationMinutes": { + "type": "integer", + "format": "int32", + "description": "The window duration (in minutes) for the organization or sub-organization." + }, + "windowLimitUsd": { + "type": "string", + "description": "The window limit (in USD) for the organization or sub-organization." + }, + "usageUsd": { + "type": "string", + "description": "The total gas usage (in USD) of all sponsored transactions processed over the last `window_duration_minutes`" + } + }, + "required": [ + "windowDurationMinutes", + "windowLimitUsd", + "usageUsd" + ] + }, + "GetIpAllowlistRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "publicKey": { + "type": "string", + "description": "If provided, return only the allowlist for this specific API key.", + "nullable": true + } + }, + "required": [ + "organizationId" + ] + }, + "GetIpAllowlistResponse": { + "type": "object", + "properties": { + "allowlist": { + "$ref": "#/components/schemas/IpAllowlist" + } + }, + "required": [ + "allowlist" + ] + }, + "GetLatestBootProofRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "appName": { + "type": "string", + "description": "Unique identifier (UUID) of the enclave app." + } + }, + "required": [ + "organizationId", + "appName" + ] + }, + "GetMfaPoliciesRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "userId": { + "type": "string", + "description": "Unique identifier for a given user." + } + }, + "required": [ + "organizationId", + "userId" + ] + }, + "GetMfaPoliciesResponse": { + "type": "object", + "properties": { + "mfaPolicies": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MfaPolicy" + }, + "description": "A list of multi-factor authentication policies for a user." + } + }, + "required": [ + "mfaPolicies" + ] + }, + "GetMfaPolicyRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "userId": { + "type": "string", + "description": "Unique identifier for a given user." + }, + "mfaPolicyId": { + "type": "string", + "description": "Unique identifier for a given MFA policy." + } + }, + "required": [ + "organizationId", + "userId", + "mfaPolicyId" + ] + }, + "GetMfaPolicyResponse": { + "type": "object", + "properties": { + "mfaPolicy": { + "$ref": "#/components/schemas/MfaPolicy" + } + }, + "required": [ + "mfaPolicy" + ] + }, + "GetMfaStatusRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "activityId": { + "type": "string", + "description": "The unique identifier of the activity to get MFA status for." + }, + "userId": { + "type": "string", + "description": "Optional user ID to filter MFA status for a specific user.", + "nullable": true + } + }, + "required": [ + "organizationId", + "activityId" + ] + }, + "GetMfaStatusResponse": { + "type": "object", + "properties": { + "mfaStatuses": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MfaStatus" + }, + "description": "A list of MFA statuses for the activity's votes." + } + }, + "required": [ + "mfaStatuses" + ] + }, + "GetNoncesRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "address": { + "type": "string", + "description": "The Ethereum address to query nonces for." + }, + "caip2": { + "type": "string", + "enum": [ + "eip155:1", + "eip155:11155111", + "eip155:8453", + "eip155:84532", + "eip155:137", + "eip155:80002", + "eip155:56", + "eip155:97", + "eip155:10", + "eip155:11155420", + "eip155:143", + "eip155:10143", + "eip155:42161", + "eip155:4217", + "eip155:42431", + "eip155:421614" + ], + "description": "CAIP-2 chain ID (e.g., 'eip155:1' for Ethereum mainnet)." + }, + "nonce": { + "type": "boolean", + "description": "Whether to fetch the standard on-chain nonce." + }, + "gasStationNonce": { + "type": "boolean", + "description": "Whether to fetch the gas station nonce used for sponsored transactions." + } + }, + "required": [ + "organizationId", + "address", + "caip2" + ] + }, + "GetNoncesResponse": { + "type": "object", + "properties": { + "nonce": { + "type": "string", + "format": "uint64", + "description": "The standard on-chain nonce for the address, if requested.", + "nullable": true + }, + "gasStationNonce": { + "type": "string", + "format": "uint64", + "description": "The gas station nonce for sponsored transactions, if requested.", + "nullable": true + } + } + }, + "GetOauth2CredentialRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "oauth2CredentialId": { + "type": "string", + "description": "Unique identifier for a given OAuth 2.0 Credential." + } + }, + "required": [ + "organizationId", + "oauth2CredentialId" + ] + }, + "GetOauth2CredentialResponse": { + "type": "object", + "properties": { + "oauth2Credential": { + "$ref": "#/components/schemas/Oauth2Credential" + } + }, + "required": [ + "oauth2Credential" + ] + }, + "GetOauthProvidersRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "userId": { + "type": "string", + "description": "Unique identifier for a given user.", + "nullable": true + } + }, + "required": [ + "organizationId" + ] + }, + "GetOauthProvidersResponse": { + "type": "object", + "properties": { + "oauthProviders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OauthProvider" + }, + "description": "A list of Oauth providers." + } + }, + "required": [ + "oauthProviders" + ] + }, + "GetOnRampTransactionStatusRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "transactionId": { + "type": "string", + "description": "The unique identifier for the fiat on ramp transaction." + }, + "refresh": { + "type": "boolean", + "description": "Optional flag to specify if the transaction status should be refreshed from the fiat on ramp provider. Default = false.", + "nullable": true + } + }, + "required": [ + "organizationId", + "transactionId" + ] + }, + "GetOnRampTransactionStatusResponse": { + "type": "object", + "properties": { + "transactionStatus": { + "type": "string", + "description": "The status of the fiat on ramp transaction." + } + }, + "required": [ + "transactionStatus" + ] + }, + "GetOrganizationConfigsRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + } + }, + "required": [ + "organizationId" + ] + }, + "GetOrganizationConfigsResponse": { + "type": "object", + "properties": { + "configs": { + "$ref": "#/components/schemas/Config" + } + }, + "required": [ + "configs" + ] + }, + "GetPoliciesRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + } + }, + "required": [ + "organizationId" + ] + }, + "GetPoliciesResponse": { + "type": "object", + "properties": { + "policies": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Policy" + }, + "description": "A list of policies." + } + }, + "required": [ + "policies" + ] + }, + "GetPolicyEvaluationsRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "activityId": { + "type": "string", + "description": "Unique identifier for a given activity." + } + }, + "required": [ + "organizationId", + "activityId" + ] + }, + "GetPolicyEvaluationsResponse": { + "type": "object", + "properties": { + "policyEvaluations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/activity.v1.PolicyEvaluation" + } + } + }, + "required": [ + "policyEvaluations" + ] + }, + "GetPolicyRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "policyId": { + "type": "string", + "description": "Unique identifier for a given policy." + } + }, + "required": [ + "organizationId", + "policyId" + ] + }, + "GetPolicyResponse": { + "type": "object", + "properties": { + "policy": { + "$ref": "#/components/schemas/Policy" + } + }, + "required": [ + "policy" + ] + }, + "GetPrivateKeyRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "privateKeyId": { + "type": "string", + "description": "Unique identifier for a given private key." + } + }, + "required": [ + "organizationId", + "privateKeyId" + ] + }, + "GetPrivateKeyResponse": { + "type": "object", + "properties": { + "privateKey": { + "$ref": "#/components/schemas/PrivateKey" + } + }, + "required": [ + "privateKey" + ] + }, + "GetPrivateKeysRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + } + }, + "required": [ + "organizationId" + ] + }, + "GetPrivateKeysResponse": { + "type": "object", + "properties": { + "privateKeys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PrivateKey" + }, + "description": "A list of private keys." + } + }, + "required": [ + "privateKeys" + ] + }, + "GetSendTransactionStatusRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "sendTransactionStatusId": { + "type": "string", + "description": "The unique identifier of a send transaction request." + } + }, + "required": [ + "organizationId", + "sendTransactionStatusId" + ] + }, + "GetSendTransactionStatusResponse": { + "type": "object", + "properties": { + "txStatus": { + "type": "string", + "description": "The current status of the send transaction." + }, + "eth": { + "$ref": "#/components/schemas/EthSendTransactionStatus" + }, + "solana": { + "$ref": "#/components/schemas/SolanaSendTransactionStatus" + }, + "txError": { + "type": "string", + "description": "The error encountered when broadcasting or confirming the transaction, if any.", + "nullable": true + }, + "error": { + "$ref": "#/components/schemas/TxError" + } + }, + "required": [ + "txStatus" + ] + }, + "GetSessionProfileRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "sessionProfileId": { + "type": "string", + "description": "Unique identifier for a session profile." + } + }, + "required": [ + "organizationId", + "sessionProfileId" + ] + }, + "GetSessionProfileResponse": { + "type": "object", + "properties": { + "sessionProfile": { + "$ref": "#/components/schemas/SessionProfile" + } + }, + "required": [ + "sessionProfile" + ] + }, + "GetSessionProfilesRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + } + }, + "required": [ + "organizationId" + ] + }, + "GetSessionProfilesResponse": { + "type": "object", + "properties": { + "sessionProfiles": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SessionProfile" + }, + "description": "A list of session profiles for users in the organization." + } + }, + "required": [ + "sessionProfiles" + ] + }, + "GetSmartContractInterfaceRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "smartContractInterfaceId": { + "type": "string", + "description": "Unique identifier for a given smart contract interface." + } + }, + "required": [ + "organizationId", + "smartContractInterfaceId" + ] + }, + "GetSmartContractInterfaceResponse": { + "type": "object", + "properties": { + "smartContractInterface": { + "$ref": "#/components/schemas/data.v1.SmartContractInterface" + } + }, + "required": [ + "smartContractInterface" + ] + }, + "GetSmartContractInterfacesRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + } + }, + "required": [ + "organizationId" + ] + }, + "GetSmartContractInterfacesResponse": { + "type": "object", + "properties": { + "smartContractInterfaces": { + "type": "array", + "items": { + "$ref": "#/components/schemas/data.v1.SmartContractInterface" + }, + "description": "A list of smart contract interfaces." + } + }, + "required": [ + "smartContractInterfaces" + ] + }, + "GetSubOrgIdsRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for the parent organization. This is used to find sub-organizations within it." + }, + "filterType": { + "type": "string", + "description": "Specifies the type of filter to apply, i.e 'CREDENTIAL_ID', 'NAME', 'USERNAME', 'EMAIL', 'PHONE_NUMBER', 'OIDC_TOKEN', 'WALLET_ACCOUNT_ADDRESS' or 'PUBLIC_KEY'" + }, + "filterValue": { + "type": "string", + "description": "The value of the filter to apply for the specified type. For example, a specific email or name string." + }, + "paginationOptions": { + "$ref": "#/components/schemas/Pagination" + } + }, + "required": [ + "organizationId" + ] + }, + "GetSubOrgIdsResponse": { + "type": "object", + "properties": { + "organizationIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of unique identifiers for the matching sub-organizations." + } + }, + "required": [ + "organizationIds" + ] + }, + "GetSwapStatusRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "swapRequestId": { + "type": "string", + "description": "The swap_request_id returned by ExecuteSwap." + } + }, + "required": [ + "organizationId", + "swapRequestId" + ] + }, + "GetSwapStatusResponse": { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "Normalized swap status. One of PENDING, COMPLETED, FAILED." + }, + "swapKind": { + "type": "string", + "description": "SAME_CHAIN or CROSS_CHAIN." + }, + "provider": { + "type": "string", + "description": "Swap provider that executed the swap." + }, + "inputToken": { + "type": "string", + "description": "CAIP-19 asset ID for the input asset." + }, + "outputToken": { + "type": "string", + "description": "CAIP-19 asset ID for the output asset." + }, + "inputAmount": { + "type": "string", + "description": "Base-unit amount of the input asset." + }, + "originTxHash": { + "type": "string", + "description": "Final included origin-chain transaction hash, when known.", + "nullable": true + }, + "destinationTxHashes": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Provider-reported destination-chain transaction hashes; cross-chain COMPLETED only." + }, + "outputAmount": { + "type": "string", + "description": "Actual base-unit output amount on COMPLETED, when known. Unset on FAILED.", + "nullable": true + }, + "refund": { + "$ref": "#/components/schemas/SwapRefund" + }, + "updatedAt": { + "type": "string", + "description": "Timestamp of the last swap status change, as millisecond epoch string." + }, + "error": { + "$ref": "#/components/schemas/SwapError" + } + }, + "required": [ + "status", + "swapKind", + "provider", + "inputToken", + "outputToken", + "inputAmount", + "updatedAt" + ] + }, + "GetTvcAppDeploymentsRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "appId": { + "type": "string", + "description": "Unique identifier for a given TVC App." + } + }, + "required": [ + "organizationId", + "appId" + ] + }, + "GetTvcAppDeploymentsResponse": { + "type": "object", + "properties": { + "tvcDeployments": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TvcDeployment" + }, + "description": "List of deployments for this TVC App" + } + }, + "required": [ + "tvcDeployments" + ] + }, + "GetTvcAppRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "tvcAppId": { + "type": "string", + "description": "Unique identifier for a given TVC App." + } + }, + "required": [ + "organizationId", + "tvcAppId" + ] + }, + "GetTvcAppResponse": { + "type": "object", + "properties": { + "tvcApp": { + "$ref": "#/components/schemas/TvcApp" + } + }, + "required": [ + "tvcApp" + ] + }, + "GetTvcAppsRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + } + }, + "required": [ + "organizationId" + ] + }, + "GetTvcAppsResponse": { + "type": "object", + "properties": { + "tvcApps": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TvcApp" + }, + "description": "A list of TVC Apps." + } + }, + "required": [ + "tvcApps" + ] + }, + "GetTvcDeploymentDebugLogsRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "deploymentId": { + "type": "string", + "description": "Unique identifier for a given TVC Deployment. The deployment must be running in debug mode." + }, + "tailLines": { + "type": "integer", + "format": "int32", + "description": "Limit returned history to the last N lines per replica. If unset or zero, no tail-line limit is applied." + }, + "sinceSeconds": { + "type": "string", + "format": "int64", + "description": "Return logs newer than this many seconds ago. If unset or zero, no since-time limit is applied. Useful for clients that poll to follow logs." + } + }, + "required": [ + "organizationId", + "deploymentId" + ] + }, + "GetTvcDeploymentDebugLogsResponse": { + "type": "object", + "properties": { + "entries": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TvcDeploymentDebugLogEntry" + }, + "description": "Application log entries sorted by platform timestamp." + } + }, + "required": [ + "entries" + ] + }, + "GetTvcDeploymentRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "deploymentId": { + "type": "string", + "description": "Unique identifier for a given TVC Deployment." + } + }, + "required": [ + "organizationId", + "deploymentId" + ] + }, + "GetTvcDeploymentResponse": { + "type": "object", + "properties": { + "tvcDeployment": { + "$ref": "#/components/schemas/TvcDeployment" + } + }, + "required": [ + "tvcDeployment" + ] + }, + "GetTvcQosVersionsRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + } + }, + "required": [ + "organizationId" + ] + }, + "GetTvcQosVersionsResponse": { + "type": "object", + "properties": { + "availableVersions": { + "type": "array", + "items": { + "type": "string" + }, + "description": "QOS versions supported for new TVC deployments." + }, + "latestVersion": { + "type": "string", + "description": "Latest recommended QOS version for new TVC deployments." + } + }, + "required": [ + "availableVersions", + "latestVersion" + ] + }, + "GetUserRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "userId": { + "type": "string", + "description": "Unique identifier for a given user." + } + }, + "required": [ + "organizationId", + "userId" + ] + }, + "GetUserResponse": { + "type": "object", + "properties": { + "user": { + "$ref": "#/components/schemas/User" + } + }, + "required": [ + "user" + ] + }, + "GetUsersRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + } + }, + "required": [ + "organizationId" + ] + }, + "GetUsersResponse": { + "type": "object", + "properties": { + "users": { + "type": "array", + "items": { + "$ref": "#/components/schemas/User" + }, + "description": "A list of users." + } + }, + "required": [ + "users" + ] + }, + "GetVerifiedSubOrgIdsRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for the parent organization. This is used to find sub-organizations within it." + }, + "filterType": { + "type": "string", + "description": "Specifies the type of filter to apply, i.e 'EMAIL', 'PHONE_NUMBER'." + }, + "filterValue": { + "type": "string", + "description": "The value of the filter to apply for the specified type. For example, a specific email or phone number string." + }, + "paginationOptions": { + "$ref": "#/components/schemas/Pagination" + } + }, + "required": [ + "organizationId" + ] + }, + "GetVerifiedSubOrgIdsResponse": { + "type": "object", + "properties": { + "organizationIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of unique identifiers for the matching sub-organizations." + } + }, + "required": [ + "organizationIds" + ] + }, + "GetWalletAccountRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "walletId": { + "type": "string", + "description": "Unique identifier for a given wallet." + }, + "address": { + "type": "string", + "description": "Address corresponding to a wallet account.", + "nullable": true + }, + "path": { + "type": "string", + "description": "Path corresponding to a wallet account.", + "nullable": true + } + }, + "required": [ + "organizationId", + "walletId" + ] + }, + "GetWalletAccountResponse": { + "type": "object", + "properties": { + "account": { + "$ref": "#/components/schemas/WalletAccount" + } + }, + "required": [ + "account" + ] + }, + "GetWalletAccountsRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "walletId": { + "type": "string", + "description": "Unique identifier for a given wallet. If not provided, all accounts for the organization will be returned.", + "nullable": true + }, + "includeWalletDetails": { + "type": "boolean", + "description": "Optional flag to specify if the wallet details should be included in the response. Default = false.", + "nullable": true + }, + "paginationOptions": { + "$ref": "#/components/schemas/Pagination" + } + }, + "required": [ + "organizationId" + ] + }, + "GetWalletAccountsResponse": { + "type": "object", + "properties": { + "accounts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/WalletAccount" + }, + "description": "A list of accounts generated from a wallet that share a common seed." + } + }, + "required": [ + "accounts" + ] + }, + "GetWalletAddressBalancesRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "address": { + "type": "string", + "description": "Address corresponding to a wallet account. Private key addresses are not supported." + }, + "caip2": { + "type": "string", + "enum": [ + "eip155:1", + "eip155:11155111", + "eip155:8453", + "eip155:84532", + "eip155:137", + "eip155:80002", + "eip155:56", + "eip155:97", + "eip155:10", + "eip155:11155420", + "eip155:143", + "eip155:10143", + "eip155:42161", + "eip155:4217", + "eip155:42431", + "eip155:421614", + "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", + "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1" + ], + "description": "CAIP-2 chain ID (e.g., 'eip155:1' for Ethereum mainnet or 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' for Solana mainnet). Human-readable Solana aliases ('solana:mainnet', 'solana:devnet') are also accepted and normalized to canonical CAIP-2 values." + } + }, + "required": [ + "organizationId", + "address", + "caip2" + ] + }, + "GetWalletAddressBalancesResponse": { + "type": "object", + "properties": { + "balances": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AssetBalance" + }, + "description": "List of asset balances" + } + } + }, + "GetWalletRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "walletId": { + "type": "string", + "description": "Unique identifier for a given wallet." + } + }, + "required": [ + "organizationId", + "walletId" + ] + }, + "GetWalletResponse": { + "type": "object", + "properties": { + "wallet": { + "$ref": "#/components/schemas/Wallet" + } + }, + "required": [ + "wallet" + ] + }, + "GetWalletsRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + } + }, + "required": [ + "organizationId" + ] + }, + "GetWalletsResponse": { + "type": "object", + "properties": { + "wallets": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Wallet" + }, + "description": "A list of wallets." + } + }, + "required": [ + "wallets" + ] + }, + "GetWhoamiRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization. If the request is being made by a WebAuthN user and their sub-organization ID is unknown, this can be the parent organization ID; using the sub-organization ID when possible is preferred due to performance reasons." + } + }, + "required": [ + "organizationId" + ] + }, + "GetWhoamiResponse": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "organizationName": { + "type": "string", + "description": "Human-readable name for an organization." + }, + "userId": { + "type": "string", + "description": "Unique identifier for a given user." + }, + "username": { + "type": "string", + "description": "Human-readable name for a user." + } + }, + "required": [ + "organizationId", + "organizationName", + "userId", + "username" + ] + }, + "HashFunction": { + "type": "string", + "enum": [ + "HASH_FUNCTION_NO_OP", + "HASH_FUNCTION_SHA256", + "HASH_FUNCTION_KECCAK256", + "HASH_FUNCTION_NOT_APPLICABLE" + ] + }, + "ImportPrivateKeyIntent": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "The ID of the User importing a Private Key." + }, + "privateKeyName": { + "type": "string", + "description": "Human-readable name for a Private Key." + }, + "encryptedBundle": { + "type": "string", + "description": "Bundle containing a raw private key encrypted to the enclave's target public key." + }, + "curve": { + "$ref": "#/components/schemas/Curve" + }, + "addressFormats": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AddressFormat" + }, + "description": "Cryptocurrency-specific formats for a derived address (e.g., Ethereum)." + } + }, + "required": [ + "userId", + "privateKeyName", + "encryptedBundle", + "curve", + "addressFormats" + ] + }, + "ImportPrivateKeyRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_IMPORT_PRIVATE_KEY" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/ImportPrivateKeyIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "ImportPrivateKeyResult": { + "type": "object", + "properties": { + "privateKeyId": { + "type": "string", + "description": "Unique identifier for a Private Key." + }, + "addresses": { + "type": "array", + "items": { + "$ref": "#/components/schemas/activity.v1.Address" + }, + "description": "A list of addresses." + } + }, + "required": [ + "privateKeyId", + "addresses" + ] + }, + "ImportSecretParams": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Optional human-readable name for the secret. Names must be unique within an organization when provided.", + "nullable": true + }, + "secretPayload": { + "type": "string", + "description": "Encryption suite specific payload containing the secret ciphertext. For enclave encrypt v1 this is a JSON-encoded ClientSendMsg." + }, + "targetPublicKey": { + "type": "string", + "description": "Targeted transport encryption public key, as returned by InitImportSecrets." + }, + "encryptionSuite": { + "$ref": "#/components/schemas/TransportEncryptionSuite" + }, + "staticProperties": { + "type": "array", + "items": { + "$ref": "#/components/schemas/KeyValue" + }, + "description": "Policy-visible, static properties to permanently bind to the secret." + } + }, + "required": [ + "secretPayload", + "targetPublicKey", + "encryptionSuite" + ] + }, + "ImportSecretsIntent": { + "type": "object", + "properties": { + "secrets": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ImportSecretParams" + }, + "description": "A list of secrets to import." + } + }, + "required": [ + "secrets" + ] + }, + "ImportSecretsRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_IMPORT_SECRETS" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/ImportSecretsIntent" + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "ImportSecretsResult": { + "type": "object", + "properties": { + "secretIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Unique identifier for each imported secret, in the order the params were specified." + } + }, + "required": [ + "secretIds" + ] + }, + "ImportWalletIntent": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "The ID of the User importing a Wallet." + }, + "walletName": { + "type": "string", + "description": "Human-readable name for a Wallet." + }, + "encryptedBundle": { + "type": "string", + "description": "Bundle containing a wallet mnemonic encrypted to the enclave's target public key." + }, + "accounts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/WalletAccountParams" + }, + "description": "A list of wallet Accounts." + } + }, + "required": [ + "userId", + "walletName", + "encryptedBundle", + "accounts" + ] + }, + "ImportWalletRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_IMPORT_WALLET" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/ImportWalletIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "ImportWalletResult": { + "type": "object", + "properties": { + "walletId": { + "type": "string", + "description": "Unique identifier for a Wallet." + }, + "addresses": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of account addresses." + } + }, + "required": [ + "walletId", + "addresses" + ] + }, + "InitFiatOnRampIntent": { + "type": "object", + "properties": { + "onrampProvider": { + "$ref": "#/components/schemas/FiatOnRampProvider" + }, + "walletAddress": { + "type": "string", + "description": "Destination wallet address for the buy transaction." + }, + "network": { + "$ref": "#/components/schemas/FiatOnRampBlockchainNetwork" + }, + "cryptoCurrencyCode": { + "$ref": "#/components/schemas/FiatOnRampCryptoCurrency" + }, + "fiatCurrencyCode": { + "$ref": "#/components/schemas/FiatOnRampCurrency" + }, + "fiatCurrencyAmount": { + "type": "string", + "description": "Specifies a preset fiat amount for the transaction, e.g., '100'. Must be greater than '20'. If not provided, the user will be prompted to enter an amount.", + "nullable": true + }, + "paymentMethod": { + "$ref": "#/components/schemas/FiatOnRampPaymentMethod" + }, + "countryCode": { + "type": "string", + "description": "ISO 3166-1 two-digit country code for Coinbase representing the purchasing user’s country of residence, e.g., US, GB.", + "nullable": true + }, + "countrySubdivisionCode": { + "type": "string", + "description": "ISO 3166-2 two-digit country subdivision code for Coinbase representing the purchasing user’s subdivision of residence within their country, e.g. NY. Required if country_code=US.", + "nullable": true + }, + "sandboxMode": { + "type": "boolean", + "description": "Optional flag to indicate whether to use the sandbox mode to simulate transactions for the on-ramp provider. Default is false.", + "nullable": true + }, + "urlForSignature": { + "type": "string", + "description": "Optional MoonPay Widget URL to sign when using MoonPay client SDKs with URL Signing enabled.", + "nullable": true + } + }, + "required": [ + "onrampProvider", + "walletAddress", + "network", + "cryptoCurrencyCode" + ] + }, + "InitFiatOnRampRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_INIT_FIAT_ON_RAMP" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/InitFiatOnRampIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "InitFiatOnRampResult": { + "type": "object", + "properties": { + "onRampUrl": { + "type": "string", + "description": "Unique URL for a given fiat on-ramp flow." + }, + "onRampTransactionId": { + "type": "string", + "description": "Unique identifier used to retrieve transaction statuses for a given fiat on-ramp flow." + }, + "onRampUrlSignature": { + "type": "string", + "description": "Optional signature of the MoonPay Widget URL. The signature is generated if the Init Fiat On Ramp intent includes the urlForSignature field. The signature can be used to initialize the MoonPay SDKs when URL signing is enabled for your project." + } + }, + "required": [ + "onRampUrl", + "onRampTransactionId" + ] + }, + "InitImportPrivateKeyIntent": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "The ID of the User importing a Private Key." + } + }, + "required": [ + "userId" + ] + }, + "InitImportPrivateKeyRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_INIT_IMPORT_PRIVATE_KEY" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/InitImportPrivateKeyIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "InitImportPrivateKeyResult": { + "type": "object", + "properties": { + "importBundle": { + "type": "string", + "description": "Import bundle containing a public key and signature to use for importing client data." + } + }, + "required": [ + "importBundle" + ] + }, + "InitImportSecretsIntent": { + "type": "object", + "properties": { + "encryptionSuite": { + "$ref": "#/components/schemas/TransportEncryptionSuite" + }, + "numSecrets": { + "type": "integer", + "format": "int32", + "description": "The number of secrets the user intends to import." + } + }, + "required": [ + "encryptionSuite", + "numSecrets" + ] + }, + "InitImportSecretsResult": { + "type": "object", + "properties": { + "enclaveTargetMessages": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Enclave ingress target keys along with metadata specific to the encryption suite. For enclave encrypt v1 this will be ServerTargetMsgV1." + } + }, + "required": [ + "enclaveTargetMessages" + ] + }, + "InitImportWalletIntent": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "The ID of the User importing a Wallet." + } + }, + "required": [ + "userId" + ] + }, + "InitImportWalletRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_INIT_IMPORT_WALLET" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/InitImportWalletIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "InitImportWalletResult": { + "type": "object", + "properties": { + "importBundle": { + "type": "string", + "description": "Import bundle containing a public key and signature to use for importing client data." + } + }, + "required": [ + "importBundle" + ] + }, + "InitOtpAuthIntent": { + "type": "object", + "properties": { + "otpType": { + "type": "string", + "description": "Enum to specify whether to send OTP via SMS or email" + }, + "contact": { + "type": "string", + "description": "Email or phone number to send the OTP code to" + }, + "emailCustomization": { + "$ref": "#/components/schemas/EmailCustomizationParams" + }, + "smsCustomization": { + "$ref": "#/components/schemas/SmsCustomizationParams" + }, + "userIdentifier": { + "type": "string", + "description": "Optional client-generated user identifier to enable per-user rate limiting for SMS auth. We recommend using a hash of the client-side IP address.", + "nullable": true + }, + "sendFromEmailAddress": { + "type": "string", + "description": "Optional custom email address from which to send the OTP email", + "nullable": true + }, + "sendFromEmailSenderName": { + "type": "string", + "description": "Optional custom sender name for use with sendFromEmailAddress; if left empty, will default to 'Notifications'", + "nullable": true + }, + "replyToEmailAddress": { + "type": "string", + "description": "Optional custom email address to use as reply-to", + "nullable": true + } + }, + "required": [ + "otpType", + "contact" + ] + }, + "InitOtpAuthIntentV2": { + "type": "object", + "properties": { + "otpType": { + "type": "string", + "description": "Enum to specify whether to send OTP via SMS or email" + }, + "contact": { + "type": "string", + "description": "Email or phone number to send the OTP code to" + }, + "otpLength": { + "type": "integer", + "format": "int32", + "description": "Optional length of the OTP code. Default = 9", + "nullable": true + }, + "emailCustomization": { + "$ref": "#/components/schemas/EmailCustomizationParams" + }, + "smsCustomization": { + "$ref": "#/components/schemas/SmsCustomizationParams" + }, + "userIdentifier": { + "type": "string", + "description": "Optional client-generated user identifier to enable per-user rate limiting for SMS auth. We recommend using a hash of the client-side IP address.", + "nullable": true + }, + "sendFromEmailAddress": { + "type": "string", + "description": "Optional custom email address from which to send the OTP email", + "nullable": true + }, + "alphanumeric": { + "type": "boolean", + "description": "Optional flag to specify if the OTP code should be alphanumeric (Crockford’s Base32). Default = true", + "nullable": true + }, + "sendFromEmailSenderName": { + "type": "string", + "description": "Optional custom sender name for use with sendFromEmailAddress; if left empty, will default to 'Notifications'", + "nullable": true + }, + "replyToEmailAddress": { + "type": "string", + "description": "Optional custom email address to use as reply-to", + "nullable": true + } + }, + "required": [ + "otpType", + "contact" + ] + }, + "InitOtpAuthIntentV3": { + "type": "object", + "properties": { + "otpType": { + "type": "string", + "description": "Whether to send OTP via SMS or email. Possible values: OTP_TYPE_SMS, OTP_TYPE_EMAIL" + }, + "contact": { + "type": "string", + "description": "Email or phone number to send the OTP code to" + }, + "otpLength": { + "type": "integer", + "format": "int32", + "description": "Optional length of the OTP code. Default = 9", + "nullable": true + }, + "appName": { + "type": "string", + "description": "The name of the application. This field is required and will be used in email notifications if an email template is not provided." + }, + "emailCustomization": { + "$ref": "#/components/schemas/EmailCustomizationParamsV2" + }, + "smsCustomization": { + "$ref": "#/components/schemas/SmsCustomizationParams" + }, + "userIdentifier": { + "type": "string", + "description": "Optional client-generated user identifier to enable per-user rate limiting for SMS auth. We recommend using a hash of the client-side IP address.", + "nullable": true + }, + "sendFromEmailAddress": { + "type": "string", + "description": "Optional custom email address from which to send the OTP email", + "nullable": true + }, + "alphanumeric": { + "type": "boolean", + "description": "Optional flag to specify if the OTP code should be alphanumeric (Crockford’s Base32). Default = true", + "nullable": true + }, + "sendFromEmailSenderName": { + "type": "string", + "description": "Optional custom sender name for use with sendFromEmailAddress; if left empty, will default to 'Notifications'", + "nullable": true + }, + "expirationSeconds": { + "type": "string", + "description": "Expiration window (in seconds) indicating how long the OTP is valid for. If not provided, a default of 5 minutes will be used. Maximum value is 600 seconds (10 minutes)", + "nullable": true + }, + "replyToEmailAddress": { + "type": "string", + "description": "Optional custom email address to use as reply-to", + "nullable": true + } + }, + "required": [ + "otpType", + "contact", + "appName" + ] + }, + "InitOtpAuthRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_INIT_OTP_AUTH_V3" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/InitOtpAuthIntentV3" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "InitOtpAuthResult": { + "type": "object", + "properties": { + "otpId": { + "type": "string", + "description": "Unique identifier for an OTP authentication" + } + }, + "required": [ + "otpId" + ] + }, + "InitOtpAuthResultV2": { + "type": "object", + "properties": { + "otpId": { + "type": "string", + "description": "Unique identifier for an OTP authentication" + } + }, + "required": [ + "otpId" + ] + }, + "InitOtpIntent": { + "type": "object", + "properties": { + "otpType": { + "type": "string", + "description": "Whether to send OTP via SMS or email. Possible values: OTP_TYPE_SMS, OTP_TYPE_EMAIL" + }, + "contact": { + "type": "string", + "description": "Email or phone number to send the OTP code to" + }, + "otpLength": { + "type": "integer", + "format": "int32", + "description": "Optional length of the OTP code. Default = 9", + "nullable": true + }, + "emailCustomization": { + "$ref": "#/components/schemas/EmailCustomizationParams" + }, + "smsCustomization": { + "$ref": "#/components/schemas/SmsCustomizationParams" + }, + "userIdentifier": { + "type": "string", + "description": "Optional client-generated user identifier to enable per-user rate limiting for SMS auth. We recommend using a hash of the client-side IP address.", + "nullable": true + }, + "sendFromEmailAddress": { + "type": "string", + "description": "Optional custom email address from which to send the OTP email", + "nullable": true + }, + "alphanumeric": { + "type": "boolean", + "description": "Optional flag to specify if the OTP code should be alphanumeric (Crockford’s Base32). Default = true", + "nullable": true + }, + "sendFromEmailSenderName": { + "type": "string", + "description": "Optional custom sender name for use with sendFromEmailAddress; if left empty, will default to 'Notifications'", + "nullable": true + }, + "expirationSeconds": { + "type": "string", + "description": "Expiration window (in seconds) indicating how long the OTP is valid for. If not provided, a default of 5 minutes will be used. Maximum value is 600 seconds (10 minutes)", + "nullable": true + }, + "replyToEmailAddress": { + "type": "string", + "description": "Optional custom email address to use as reply-to", + "nullable": true + } + }, + "required": [ + "otpType", + "contact" + ] + }, + "InitOtpIntentV2": { + "type": "object", + "properties": { + "otpType": { + "type": "string", + "description": "Whether to send OTP via SMS or email. Possible values: OTP_TYPE_SMS, OTP_TYPE_EMAIL" + }, + "contact": { + "type": "string", + "description": "Email or phone number to send the OTP code to" + }, + "otpLength": { + "type": "integer", + "format": "int32", + "description": "Optional length of the OTP code. Default = 9", + "nullable": true + }, + "appName": { + "type": "string", + "description": "The name of the application. This field is required and will be used in email notifications if an email template is not provided." + }, + "emailCustomization": { + "$ref": "#/components/schemas/EmailCustomizationParamsV2" + }, + "smsCustomization": { + "$ref": "#/components/schemas/SmsCustomizationParams" + }, + "userIdentifier": { + "type": "string", + "description": "Optional client-generated user identifier to enable per-user rate limiting for SMS auth. We recommend using a hash of the client-side IP address.", + "nullable": true + }, + "sendFromEmailAddress": { + "type": "string", + "description": "Optional custom email address from which to send the OTP email", + "nullable": true + }, + "alphanumeric": { + "type": "boolean", + "description": "Optional flag to specify if the OTP code should be alphanumeric (Crockford’s Base32). Default = true", + "nullable": true + }, + "sendFromEmailSenderName": { + "type": "string", + "description": "Optional custom sender name for use with sendFromEmailAddress; if left empty, will default to 'Notifications'", + "nullable": true + }, + "expirationSeconds": { + "type": "string", + "description": "Expiration window (in seconds) indicating how long the OTP is valid for. If not provided, a default of 5 minutes will be used. Maximum value is 600 seconds (10 minutes)", + "nullable": true + }, + "replyToEmailAddress": { + "type": "string", + "description": "Optional custom email address to use as reply-to", + "nullable": true + } + }, + "required": [ + "otpType", + "contact", + "appName" + ] + }, + "InitOtpIntentV3": { + "type": "object", + "properties": { + "otpType": { + "type": "string", + "description": "Whether to send OTP via SMS or email. Possible values: OTP_TYPE_SMS, OTP_TYPE_EMAIL" + }, + "contact": { + "type": "string", + "description": "Email or phone number to send the OTP code to" + }, + "appName": { + "type": "string", + "description": "The name of the application." + }, + "otpLength": { + "type": "integer", + "format": "int32", + "description": "Optional length of the OTP code. Default = 9", + "nullable": true + }, + "emailCustomization": { + "$ref": "#/components/schemas/EmailCustomizationParamsV2" + }, + "smsCustomization": { + "$ref": "#/components/schemas/SmsCustomizationParams" + }, + "userIdentifier": { + "type": "string", + "description": "Optional client-generated user identifier to enable per-user rate limiting for SMS auth. We recommend using a hash of the client-side IP address.", + "nullable": true + }, + "sendFromEmailAddress": { + "type": "string", + "description": "Optional custom email address from which to send the OTP email", + "nullable": true + }, + "alphanumeric": { + "type": "boolean", + "description": "Optional flag to specify if the OTP code should be alphanumeric (Crockford’s Base32). If set to false, OTP code will only be numeric. Default = true", + "nullable": true + }, + "sendFromEmailSenderName": { + "type": "string", + "description": "Optional custom sender name for use with sendFromEmailAddress; if left empty, will default to 'Notifications'", + "nullable": true + }, + "expirationSeconds": { + "type": "string", + "description": "Expiration window (in seconds) indicating how long the OTP is valid for. If not provided, a default of 5 minutes will be used. Maximum value is 600 seconds (10 minutes)", + "nullable": true + }, + "replyToEmailAddress": { + "type": "string", + "description": "Optional custom email address to use as reply-to", + "nullable": true + } + }, + "required": [ + "otpType", + "contact", + "appName" + ] + }, + "InitOtpRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_INIT_OTP_V3" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/InitOtpIntentV3" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "InitOtpResult": { + "type": "object", + "properties": { + "otpId": { + "type": "string", + "description": "Unique identifier for an OTP authentication" + } + }, + "required": [ + "otpId" + ] + }, + "InitOtpResultV2": { + "type": "object", + "properties": { + "otpId": { + "type": "string", + "description": "Unique identifier for an OTP flow" + }, + "otpEncryptionTargetBundle": { + "type": "string", + "description": "Signed bundle containing a target encryption key to use when submitting OTP codes." + } + }, + "required": [ + "otpId", + "otpEncryptionTargetBundle" + ] + }, + "InitUserEmailRecoveryIntent": { + "type": "object", + "properties": { + "email": { + "type": "string", + "description": "Email of the user starting recovery" + }, + "targetPublicKey": { + "type": "string", + "description": "Client-side public key generated by the user, to which the recovery bundle will be encrypted." + }, + "expirationSeconds": { + "type": "string", + "description": "Expiration window (in seconds) indicating how long the recovery credential is valid for. If not provided, a default of 15 minutes will be used.", + "nullable": true + }, + "emailCustomization": { + "$ref": "#/components/schemas/EmailCustomizationParams" + }, + "sendFromEmailAddress": { + "type": "string", + "description": "Optional custom email address from which to send the OTP email", + "nullable": true + }, + "sendFromEmailSenderName": { + "type": "string", + "description": "Optional custom sender name for use with sendFromEmailAddress; if left empty, will default to 'Notifications'", + "nullable": true + }, + "replyToEmailAddress": { + "type": "string", + "description": "Optional custom email address to use as reply-to", + "nullable": true + } + }, + "required": [ + "email", + "targetPublicKey" + ] + }, + "InitUserEmailRecoveryIntentV2": { + "type": "object", + "properties": { + "email": { + "type": "string", + "description": "Email of the user starting recovery" + }, + "targetPublicKey": { + "type": "string", + "description": "Client-side public key generated by the user, to which the recovery bundle will be encrypted." + }, + "expirationSeconds": { + "type": "string", + "description": "Expiration window (in seconds) indicating how long the recovery credential is valid for. If not provided, a default of 15 minutes will be used.", + "nullable": true + }, + "emailCustomization": { + "$ref": "#/components/schemas/EmailAuthCustomizationParams" + }, + "sendFromEmailAddress": { + "type": "string", + "description": "Optional custom email address from which to send the OTP email", + "nullable": true + }, + "sendFromEmailSenderName": { + "type": "string", + "description": "Optional custom sender name for use with sendFromEmailAddress; if left empty, will default to 'Notifications'", + "nullable": true + }, + "replyToEmailAddress": { + "type": "string", + "description": "Optional custom email address to use as reply-to", + "nullable": true + } + }, + "required": [ + "email", + "targetPublicKey", + "emailCustomization" + ] + }, + "InitUserEmailRecoveryRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_INIT_USER_EMAIL_RECOVERY_V2" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/InitUserEmailRecoveryIntentV2" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "InitUserEmailRecoveryResult": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "Unique identifier for the user being recovered." + } + }, + "required": [ + "userId" + ] + }, + "Intent": { + "type": "object", + "properties": { + "createOrganizationIntent": { + "$ref": "#/components/schemas/CreateOrganizationIntent" + }, + "createAuthenticatorsIntent": { + "$ref": "#/components/schemas/CreateAuthenticatorsIntent" + }, + "createUsersIntent": { + "$ref": "#/components/schemas/CreateUsersIntent" + }, + "createPrivateKeysIntent": { + "$ref": "#/components/schemas/CreatePrivateKeysIntent" + }, + "signRawPayloadIntent": { + "$ref": "#/components/schemas/SignRawPayloadIntent" + }, + "createInvitationsIntent": { + "$ref": "#/components/schemas/CreateInvitationsIntent" + }, + "acceptInvitationIntent": { + "$ref": "#/components/schemas/AcceptInvitationIntent" + }, + "createPolicyIntent": { + "$ref": "#/components/schemas/CreatePolicyIntent" + }, + "disablePrivateKeyIntent": { + "$ref": "#/components/schemas/DisablePrivateKeyIntent" + }, + "deleteUsersIntent": { + "$ref": "#/components/schemas/DeleteUsersIntent" + }, + "deleteAuthenticatorsIntent": { + "$ref": "#/components/schemas/DeleteAuthenticatorsIntent" + }, + "deleteInvitationIntent": { + "$ref": "#/components/schemas/DeleteInvitationIntent" + }, + "deleteOrganizationIntent": { + "$ref": "#/components/schemas/DeleteOrganizationIntent" + }, + "deletePolicyIntent": { + "$ref": "#/components/schemas/DeletePolicyIntent" + }, + "createUserTagIntent": { + "$ref": "#/components/schemas/CreateUserTagIntent" + }, + "deleteUserTagsIntent": { + "$ref": "#/components/schemas/DeleteUserTagsIntent" + }, + "signTransactionIntent": { + "$ref": "#/components/schemas/SignTransactionIntent" + }, + "createApiKeysIntent": { + "$ref": "#/components/schemas/CreateApiKeysIntent" + }, + "deleteApiKeysIntent": { + "$ref": "#/components/schemas/DeleteApiKeysIntent" + }, + "approveActivityIntent": { + "$ref": "#/components/schemas/ApproveActivityIntent" + }, + "rejectActivityIntent": { + "$ref": "#/components/schemas/RejectActivityIntent" + }, + "createPrivateKeyTagIntent": { + "$ref": "#/components/schemas/CreatePrivateKeyTagIntent" + }, + "deletePrivateKeyTagsIntent": { + "$ref": "#/components/schemas/DeletePrivateKeyTagsIntent" + }, + "createPolicyIntentV2": { + "$ref": "#/components/schemas/CreatePolicyIntentV2" + }, + "setPaymentMethodIntent": { + "$ref": "#/components/schemas/SetPaymentMethodIntent" + }, + "activateBillingTierIntent": { + "$ref": "#/components/schemas/ActivateBillingTierIntent" + }, + "deletePaymentMethodIntent": { + "$ref": "#/components/schemas/DeletePaymentMethodIntent" + }, + "createPolicyIntentV3": { + "$ref": "#/components/schemas/CreatePolicyIntentV3" + }, + "createApiOnlyUsersIntent": { + "$ref": "#/components/schemas/CreateApiOnlyUsersIntent" + }, + "updateRootQuorumIntent": { + "$ref": "#/components/schemas/UpdateRootQuorumIntent" + }, + "updateUserTagIntent": { + "$ref": "#/components/schemas/UpdateUserTagIntent" + }, + "updatePrivateKeyTagIntent": { + "$ref": "#/components/schemas/UpdatePrivateKeyTagIntent" + }, + "createAuthenticatorsIntentV2": { + "$ref": "#/components/schemas/CreateAuthenticatorsIntentV2" + }, + "acceptInvitationIntentV2": { + "$ref": "#/components/schemas/AcceptInvitationIntentV2" + }, + "createOrganizationIntentV2": { + "$ref": "#/components/schemas/CreateOrganizationIntentV2" + }, + "createUsersIntentV2": { + "$ref": "#/components/schemas/CreateUsersIntentV2" + }, + "createSubOrganizationIntent": { + "$ref": "#/components/schemas/CreateSubOrganizationIntent" + }, + "createSubOrganizationIntentV2": { + "$ref": "#/components/schemas/CreateSubOrganizationIntentV2" + }, + "updateAllowedOriginsIntent": { + "$ref": "#/components/schemas/UpdateAllowedOriginsIntent" + }, + "createPrivateKeysIntentV2": { + "$ref": "#/components/schemas/CreatePrivateKeysIntentV2" + }, + "updateUserIntent": { + "$ref": "#/components/schemas/UpdateUserIntent" + }, + "updatePolicyIntent": { + "$ref": "#/components/schemas/UpdatePolicyIntent" + }, + "setPaymentMethodIntentV2": { + "$ref": "#/components/schemas/SetPaymentMethodIntentV2" + }, + "createSubOrganizationIntentV3": { + "$ref": "#/components/schemas/CreateSubOrganizationIntentV3" + }, + "createWalletIntent": { + "$ref": "#/components/schemas/CreateWalletIntent" + }, + "createWalletAccountsIntent": { + "$ref": "#/components/schemas/CreateWalletAccountsIntent" + }, + "initUserEmailRecoveryIntent": { + "$ref": "#/components/schemas/InitUserEmailRecoveryIntent" + }, + "recoverUserIntent": { + "$ref": "#/components/schemas/RecoverUserIntent" + }, + "setOrganizationFeatureIntent": { + "$ref": "#/components/schemas/SetOrganizationFeatureIntent" + }, + "removeOrganizationFeatureIntent": { + "$ref": "#/components/schemas/RemoveOrganizationFeatureIntent" + }, + "signRawPayloadIntentV2": { + "$ref": "#/components/schemas/SignRawPayloadIntentV2" + }, + "signTransactionIntentV2": { + "$ref": "#/components/schemas/SignTransactionIntentV2" + }, + "exportPrivateKeyIntent": { + "$ref": "#/components/schemas/ExportPrivateKeyIntent" + }, + "exportWalletIntent": { + "$ref": "#/components/schemas/ExportWalletIntent" + }, + "createSubOrganizationIntentV4": { + "$ref": "#/components/schemas/CreateSubOrganizationIntentV4" + }, + "emailAuthIntent": { + "$ref": "#/components/schemas/EmailAuthIntent" + }, + "exportWalletAccountIntent": { + "$ref": "#/components/schemas/ExportWalletAccountIntent" + }, + "initImportWalletIntent": { + "$ref": "#/components/schemas/InitImportWalletIntent" + }, + "importWalletIntent": { + "$ref": "#/components/schemas/ImportWalletIntent" + }, + "initImportPrivateKeyIntent": { + "$ref": "#/components/schemas/InitImportPrivateKeyIntent" + }, + "importPrivateKeyIntent": { + "$ref": "#/components/schemas/ImportPrivateKeyIntent" + }, + "createPoliciesIntent": { + "$ref": "#/components/schemas/CreatePoliciesIntent" + }, + "signRawPayloadsIntent": { + "$ref": "#/components/schemas/SignRawPayloadsIntent" + }, + "createReadOnlySessionIntent": { + "$ref": "#/components/schemas/CreateReadOnlySessionIntent" + }, + "createOauthProvidersIntent": { + "$ref": "#/components/schemas/CreateOauthProvidersIntent" + }, + "deleteOauthProvidersIntent": { + "$ref": "#/components/schemas/DeleteOauthProvidersIntent" + }, + "createSubOrganizationIntentV5": { + "$ref": "#/components/schemas/CreateSubOrganizationIntentV5" + }, + "oauthIntent": { + "$ref": "#/components/schemas/OauthIntent" + }, + "createApiKeysIntentV2": { + "$ref": "#/components/schemas/CreateApiKeysIntentV2" + }, + "createReadWriteSessionIntent": { + "$ref": "#/components/schemas/CreateReadWriteSessionIntent" + }, + "emailAuthIntentV2": { + "$ref": "#/components/schemas/EmailAuthIntentV2" + }, + "createSubOrganizationIntentV6": { + "$ref": "#/components/schemas/CreateSubOrganizationIntentV6" + }, + "deletePrivateKeysIntent": { + "$ref": "#/components/schemas/DeletePrivateKeysIntent" + }, + "deleteWalletsIntent": { + "$ref": "#/components/schemas/DeleteWalletsIntent" + }, + "createReadWriteSessionIntentV2": { + "$ref": "#/components/schemas/CreateReadWriteSessionIntentV2" + }, + "deleteSubOrganizationIntent": { + "$ref": "#/components/schemas/DeleteSubOrganizationIntent" + }, + "initOtpAuthIntent": { + "$ref": "#/components/schemas/InitOtpAuthIntent" + }, + "otpAuthIntent": { + "$ref": "#/components/schemas/OtpAuthIntent" + }, + "createSubOrganizationIntentV7": { + "$ref": "#/components/schemas/CreateSubOrganizationIntentV7" + }, + "updateWalletIntent": { + "$ref": "#/components/schemas/UpdateWalletIntent" + }, + "updatePolicyIntentV2": { + "$ref": "#/components/schemas/UpdatePolicyIntentV2" + }, + "createUsersIntentV3": { + "$ref": "#/components/schemas/CreateUsersIntentV3" + }, + "initOtpAuthIntentV2": { + "$ref": "#/components/schemas/InitOtpAuthIntentV2" + }, + "initOtpIntent": { + "$ref": "#/components/schemas/InitOtpIntent" + }, + "verifyOtpIntent": { + "$ref": "#/components/schemas/VerifyOtpIntent" + }, + "otpLoginIntent": { + "$ref": "#/components/schemas/OtpLoginIntent" + }, + "stampLoginIntent": { + "$ref": "#/components/schemas/StampLoginIntent" + }, + "oauthLoginIntent": { + "$ref": "#/components/schemas/OauthLoginIntent" + }, + "updateUserNameIntent": { + "$ref": "#/components/schemas/UpdateUserNameIntent" + }, + "updateUserEmailIntent": { + "$ref": "#/components/schemas/UpdateUserEmailIntent" + }, + "updateUserPhoneNumberIntent": { + "$ref": "#/components/schemas/UpdateUserPhoneNumberIntent" + }, + "initFiatOnRampIntent": { + "$ref": "#/components/schemas/InitFiatOnRampIntent" + }, + "createSmartContractInterfaceIntent": { + "$ref": "#/components/schemas/CreateSmartContractInterfaceIntent" + }, + "deleteSmartContractInterfaceIntent": { + "$ref": "#/components/schemas/DeleteSmartContractInterfaceIntent" + }, + "enableAuthProxyIntent": { + "$ref": "#/components/schemas/EnableAuthProxyIntent" + }, + "disableAuthProxyIntent": { + "$ref": "#/components/schemas/DisableAuthProxyIntent" + }, + "updateAuthProxyConfigIntent": { + "$ref": "#/components/schemas/UpdateAuthProxyConfigIntent" + }, + "createOauth2CredentialIntent": { + "$ref": "#/components/schemas/CreateOauth2CredentialIntent" + }, + "updateOauth2CredentialIntent": { + "$ref": "#/components/schemas/UpdateOauth2CredentialIntent" + }, + "deleteOauth2CredentialIntent": { + "$ref": "#/components/schemas/DeleteOauth2CredentialIntent" + }, + "oauth2AuthenticateIntent": { + "$ref": "#/components/schemas/Oauth2AuthenticateIntent" + }, + "deleteWalletAccountsIntent": { + "$ref": "#/components/schemas/DeleteWalletAccountsIntent" + }, + "deletePoliciesIntent": { + "$ref": "#/components/schemas/DeletePoliciesIntent" + }, + "ethSendRawTransactionIntent": { + "$ref": "#/components/schemas/EthSendRawTransactionIntent" + }, + "ethSendTransactionIntent": { + "$ref": "#/components/schemas/EthSendTransactionIntent" + }, + "createFiatOnRampCredentialIntent": { + "$ref": "#/components/schemas/CreateFiatOnRampCredentialIntent" + }, + "updateFiatOnRampCredentialIntent": { + "$ref": "#/components/schemas/UpdateFiatOnRampCredentialIntent" + }, + "deleteFiatOnRampCredentialIntent": { + "$ref": "#/components/schemas/DeleteFiatOnRampCredentialIntent" + }, + "emailAuthIntentV3": { + "$ref": "#/components/schemas/EmailAuthIntentV3" + }, + "initUserEmailRecoveryIntentV2": { + "$ref": "#/components/schemas/InitUserEmailRecoveryIntentV2" + }, + "initOtpIntentV2": { + "$ref": "#/components/schemas/InitOtpIntentV2" + }, + "initOtpAuthIntentV3": { + "$ref": "#/components/schemas/InitOtpAuthIntentV3" + }, + "upsertGasUsageConfigIntent": { + "$ref": "#/components/schemas/UpsertGasUsageConfigIntent" + }, + "createTvcAppIntent": { + "$ref": "#/components/schemas/CreateTvcAppIntent" + }, + "createTvcDeploymentIntent": { + "$ref": "#/components/schemas/CreateTvcDeploymentIntent" + }, + "createTvcManifestApprovalsIntent": { + "$ref": "#/components/schemas/CreateTvcManifestApprovalsIntent" + }, + "solSendTransactionIntent": { + "$ref": "#/components/schemas/SolSendTransactionIntent" + }, + "initOtpIntentV3": { + "$ref": "#/components/schemas/InitOtpIntentV3" + }, + "verifyOtpIntentV2": { + "$ref": "#/components/schemas/VerifyOtpIntentV2" + }, + "otpLoginIntentV2": { + "$ref": "#/components/schemas/OtpLoginIntentV2" + }, + "updateOrganizationNameIntent": { + "$ref": "#/components/schemas/UpdateOrganizationNameIntent" + }, + "createSubOrganizationIntentV8": { + "$ref": "#/components/schemas/CreateSubOrganizationIntentV8" + }, + "createOauthProvidersIntentV2": { + "$ref": "#/components/schemas/CreateOauthProvidersIntentV2" + }, + "createUsersIntentV4": { + "$ref": "#/components/schemas/CreateUsersIntentV4" + }, + "createWebhookEndpointIntent": { + "$ref": "#/components/schemas/CreateWebhookEndpointIntent" + }, + "updateWebhookEndpointIntent": { + "$ref": "#/components/schemas/UpdateWebhookEndpointIntent" + }, + "deleteWebhookEndpointIntent": { + "$ref": "#/components/schemas/DeleteWebhookEndpointIntent" + }, + "setIpAllowlistIntent": { + "$ref": "#/components/schemas/SetIpAllowlistIntent" + }, + "removeIpAllowlistIntent": { + "$ref": "#/components/schemas/RemoveIpAllowlistIntent" + }, + "updateTvcAppLiveDeploymentIntent": { + "$ref": "#/components/schemas/UpdateTvcAppLiveDeploymentIntent" + }, + "deleteTvcDeploymentIntent": { + "$ref": "#/components/schemas/DeleteTvcDeploymentIntent" + }, + "deleteTvcAppAndDeploymentsIntent": { + "$ref": "#/components/schemas/DeleteTvcAppAndDeploymentsIntent" + }, + "restoreTvcDeploymentIntent": { + "$ref": "#/components/schemas/RestoreTvcDeploymentIntent" + }, + "sparkSignFrostIntent": { + "$ref": "#/components/schemas/SparkSignFrostIntent" + }, + "sparkPrepareTransferIntent": { + "$ref": "#/components/schemas/SparkPrepareTransferIntent" + }, + "sparkClaimTransferIntent": { + "$ref": "#/components/schemas/SparkClaimTransferIntent" + }, + "sparkPrepareLightningReceiveIntent": { + "$ref": "#/components/schemas/SparkPrepareLightningReceiveIntent" + }, + "postTvcQuorumKeyShareIntent": { + "$ref": "#/components/schemas/PostTvcQuorumKeyShareIntent" + }, + "ethSendTransactionIntentV2": { + "$ref": "#/components/schemas/EthSendTransactionIntentV2" + }, + "createMfaPolicyIntent": { + "$ref": "#/components/schemas/CreateMfaPolicyIntent" + }, + "updateMfaPolicyIntent": { + "$ref": "#/components/schemas/UpdateMfaPolicyIntent" + }, + "deleteMfaPolicyIntent": { + "$ref": "#/components/schemas/DeleteMfaPolicyIntent" + }, + "createSessionProfileIntent": { + "$ref": "#/components/schemas/CreateSessionProfileIntent" + }, + "earnDeployWrapperIntent": { + "$ref": "#/components/schemas/EarnDeployWrapperIntent" + }, + "earnDepositIntent": { + "$ref": "#/components/schemas/EarnDepositIntent" + }, + "earnWithdrawIntent": { + "$ref": "#/components/schemas/EarnWithdrawIntent" + }, + "executeSwapIntent": { + "$ref": "#/components/schemas/ExecuteSwapIntent" + }, + "upsertSwapConfigIntent": { + "$ref": "#/components/schemas/UpsertSwapConfigIntent" + }, + "createTvcOperatorIntent": { + "$ref": "#/components/schemas/CreateTvcOperatorIntent" + }, + "createTvcQuorumKeyIntent": { + "$ref": "#/components/schemas/CreateTvcQuorumKeyIntent" + }, + "reEncryptTvcQuorumKeyShareIntent": { + "$ref": "#/components/schemas/ReEncryptTvcQuorumKeyShareIntent" + }, + "initImportSecretsIntent": { + "$ref": "#/components/schemas/InitImportSecretsIntent" + }, + "solSendTransactionIntentV2": { + "$ref": "#/components/schemas/SolSendTransactionIntentV2" + }, + "claimSwapFeesIntent": { + "$ref": "#/components/schemas/ClaimSwapFeesIntent" + }, + "earnSetWrapperStateIntent": { + "$ref": "#/components/schemas/EarnSetWrapperStateIntent" + }, + "claimEarnFeesIntent": { + "$ref": "#/components/schemas/ClaimEarnFeesIntent" + }, + "updateWalletAccountNameIntent": { + "$ref": "#/components/schemas/UpdateWalletAccountNameIntent" + }, + "ethUndelegate7702Intent": { + "$ref": "#/components/schemas/EthUndelegate7702Intent" + }, + "executeSwapIntentV2": { + "$ref": "#/components/schemas/ExecuteSwapIntentV2" + }, + "createSwapQuoteIntent": { + "$ref": "#/components/schemas/CreateSwapQuoteIntent" + }, + "importSecretsIntent": { + "$ref": "#/components/schemas/ImportSecretsIntent" + } + } + }, + "InvitationParams": { + "type": "object", + "properties": { + "receiverUserName": { + "type": "string", + "description": "The name of the intended Invitation recipient." + }, + "receiverUserEmail": { + "type": "string", + "description": "The email address of the intended Invitation recipient." + }, + "receiverUserTags": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of tags assigned to the Invitation recipient. This field, if not needed, should be an empty array in your request body." + }, + "accessType": { + "$ref": "#/components/schemas/AccessType" + }, + "senderUserId": { + "type": "string", + "description": "Unique identifier for the Sender of an Invitation." + } + }, + "required": [ + "receiverUserName", + "receiverUserEmail", + "receiverUserTags", + "accessType", + "senderUserId" + ] + }, + "IpAllowlist": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for the organization this allowlist belongs to." + }, + "rules": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IpAllowlistRule" + }, + "description": "List of IP allowlist rules with their metadata." + }, + "publicKey": { + "type": "string", + "description": "Public key of the API key this allowlist applies to. Null means the allowlist applies to the entire organization.", + "nullable": true + }, + "enabled": { + "type": "boolean", + "description": "Whether the IP allowlist is enabled. Only present for organization-level allowlists. Null for API key-level allowlists (presence of the allowlist implies enablement).", + "nullable": true + }, + "onEvaluationError": { + "type": "string", + "description": "Behavior when an error occurs during IP allowlist evaluation. Valid values: ALLOW, DENY. Defaults to DENY.", + "nullable": true + } + }, + "required": [ + "organizationId", + "rules" + ] + }, + "IpAllowlistIntentRule": { + "type": "object", + "properties": { + "cidr": { + "type": "string", + "description": "CIDR block (e.g., '192.168.1.0/24', '2001:db8::/32')." + }, + "label": { + "type": "string", + "description": "Optional human-readable label for this rule (e.g., 'Office VPN').", + "nullable": true + } + }, + "required": [ + "cidr" + ] + }, + "IpAllowlistRule": { + "type": "object", + "properties": { + "cidr": { + "type": "string", + "description": "CIDR block (e.g., '192.168.1.0/24')." + }, + "label": { + "type": "string", + "description": "Optional human-readable label for this rule.", + "nullable": true + }, + "createdAt": { + "type": "string", + "description": "Creation timestamp as millisecond epoch string." + } + }, + "required": [ + "cidr" + ] + }, + "KeyValue": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "value": { + "type": "string" + } + } + }, + "ListEarnEnabledVaultsRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "provider": { + "$ref": "#/components/schemas/EarnProvider" + }, + "caip19": { + "type": "string", + "description": "Optional filter: only return enabled vaults whose underlying asset matches this CAIP-19 asset ID (e.g. 'eip155:8453/erc20:0x833589...'). The chain is taken from the CAIP-19 identifier.", + "nullable": true + } + }, + "required": [ + "organizationId" + ] + }, + "ListEarnEnabledVaultsResponse": { + "type": "object", + "properties": { + "enabledVaults": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EarnEnabledVault" + }, + "description": "The organization's deployed wrappers." + } + } + }, + "ListEarnPositionsRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "walletAddress": { + "type": "string", + "description": "The wallet address to return positions for." + } + }, + "required": [ + "organizationId", + "walletAddress" + ] + }, + "ListEarnPositionsResponse": { + "type": "object", + "properties": { + "positions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EarnPosition" + }, + "description": "The wallet's active Earn positions." + } + } + }, + "ListEarnVaultsRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization. Annotates which vaults the organization has already enabled." + }, + "provider": { + "$ref": "#/components/schemas/EarnProvider" + }, + "caip19": { + "type": "string", + "description": "CAIP-19 asset ID (e.g. 'eip155:8453/erc20:0x833589...') to return vaults for. Only vaults whose underlying asset matches are returned; the chain is taken from the CAIP-19 identifier." + }, + "paginationOptions": { + "$ref": "#/components/schemas/Pagination" + } + }, + "required": [ + "organizationId", + "caip19" + ] + }, + "ListEarnVaultsResponse": { + "type": "object", + "properties": { + "vaults": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EarnVault" + }, + "description": "The catalog of wrappable vaults, sorted by TVL (USD) descending. To page, pass page_info.end_cursor as the pagination after cursor." + }, + "pageInfo": { + "$ref": "#/components/schemas/PageInfo" + } + } + }, + "ListEmailEventsRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization" + }, + "email": { + "type": "string", + "description": "Recipient email address to list email events for" + }, + "eventType": { + "type": "string", + "description": "Optional email event type to filter by. Examples include Send, Delivery, Bounce, and DeliveryDelay" + }, + "paginationOptions": { + "$ref": "#/components/schemas/Pagination" + } + }, + "required": [ + "organizationId", + "email" + ] + }, + "ListEmailEventsResponse": { + "type": "object", + "properties": { + "emailEvents": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EmailEvent" + }, + "description": "Email events matching the requested filters, ordered by most recent event first." + } + }, + "required": [ + "emailEvents" + ] + }, + "ListEthTransactionHistoryRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "address": { + "type": "string", + "description": "Address corresponding to a wallet account. Private key addresses are not supported." + }, + "caip2": { + "type": "string", + "enum": [ + "eip155:1", + "eip155:11155111", + "eip155:8453", + "eip155:84532", + "eip155:137", + "eip155:80002", + "eip155:42161", + "eip155:4217", + "eip155:42431", + "eip155:421614", + "eip155:56", + "eip155:97" + ], + "description": "EVM CAIP-2 chain ID (e.g., 'eip155:1' for Ethereum mainnet)." + }, + "paginationOptions": { + "$ref": "#/components/schemas/Pagination" + } + }, + "required": [ + "organizationId", + "address", + "caip2" + ] + }, + "ListEthTransactionHistoryResponse": { + "type": "object", + "properties": { + "transactions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EthTransactionHistoryItem" + }, + "description": "EVM transactions for the requested address, ordered by most recent first." + }, + "pageInfo": { + "$ref": "#/components/schemas/PageInfo" + } + }, + "required": [ + "transactions" + ] + }, + "ListFiatOnRampCredentialsRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + } + }, + "required": [ + "organizationId" + ] + }, + "ListFiatOnRampCredentialsResponse": { + "type": "object", + "properties": { + "fiatOnRampCredentials": { + "type": "array", + "items": { + "$ref": "#/components/schemas/FiatOnRampCredential" + } + } + }, + "required": [ + "fiatOnRampCredentials" + ] + }, + "ListOauth2CredentialsRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + } + }, + "required": [ + "organizationId" + ] + }, + "ListOauth2CredentialsResponse": { + "type": "object", + "properties": { + "oauth2Credentials": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Oauth2Credential" + } + } + }, + "required": [ + "oauth2Credentials" + ] + }, + "ListPrivateKeyTagsRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + } + }, + "required": [ + "organizationId" + ] + }, + "ListPrivateKeyTagsResponse": { + "type": "object", + "properties": { + "privateKeyTags": { + "type": "array", + "items": { + "$ref": "#/components/schemas/v1.Tag" + }, + "description": "A list of private key tags." + } + }, + "required": [ + "privateKeyTags" + ] + }, + "ListSolTransactionHistoryRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "address": { + "type": "string", + "description": "Address corresponding to a wallet account. Private key addresses are not supported." + }, + "caip2": { + "type": "string", + "enum": [ + "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", + "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1", + "solana:mainnet", + "solana:devnet" + ], + "description": "Solana CAIP-2 chain ID (e.g., 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' for Solana mainnet). Human-readable Solana aliases ('solana:mainnet', 'solana:devnet') are also accepted and normalized to canonical CAIP-2 values." + }, + "paginationOptions": { + "$ref": "#/components/schemas/Pagination" + } + }, + "required": [ + "organizationId", + "address", + "caip2" + ] + }, + "ListSolTransactionHistoryResponse": { + "type": "object", + "properties": { + "transactions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SolTransactionHistoryItem" + }, + "description": "Solana transactions for the requested address, ordered by most recent first." + }, + "pageInfo": { + "$ref": "#/components/schemas/PageInfo" + } + }, + "required": [ + "transactions" + ] + }, + "ListSupportedAssetsRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + }, + "caip2": { + "type": "string", + "enum": [ + "eip155:1", + "eip155:11155111", + "eip155:8453", + "eip155:84532", + "eip155:137", + "eip155:80002", + "eip155:56", + "eip155:97", + "eip155:10", + "eip155:11155420", + "eip155:143", + "eip155:10143", + "eip155:42161", + "eip155:4217", + "eip155:42431", + "eip155:421614", + "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", + "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1" + ], + "description": "CAIP-2 chain ID (e.g., 'eip155:1' for Ethereum mainnet or 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' for Solana mainnet). Human-readable Solana aliases ('solana:mainnet', 'solana:devnet') are also accepted and normalized to canonical CAIP-2 values." + } + }, + "required": [ + "organizationId", + "caip2" + ] + }, + "ListSupportedAssetsResponse": { + "type": "object", + "properties": { + "assets": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AssetMetadata" + }, + "description": "List of asset metadata" + } + } + }, + "ListUserTagsRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given organization." + } + }, + "required": [ + "organizationId" + ] + }, + "ListUserTagsResponse": { + "type": "object", + "properties": { + "userTags": { + "type": "array", + "items": { + "$ref": "#/components/schemas/v1.Tag" + }, + "description": "A list of user tags." + } + }, + "required": [ + "userTags" + ] + }, + "ListWebhookEndpointsRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + } + }, + "required": [ + "organizationId" + ] + }, + "ListWebhookEndpointsResponse": { + "type": "object", + "properties": { + "webhookEndpoints": { + "type": "array", + "items": { + "$ref": "#/components/schemas/WebhookEndpointData" + } + } + }, + "required": [ + "webhookEndpoints" + ] + }, + "LogLine": { + "type": "object", + "properties": { + "content": { + "type": "string", + "description": "One log line, exactly as the application printed it (without the trailing newline)" + }, + "ts": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + } + }, + "required": [ + "content" + ] + }, + "LoginUsage": { + "type": "object", + "properties": { + "publicKey": { + "type": "string", + "description": "Public key for authentication" + } + }, + "required": [ + "publicKey" + ] + }, + "MfaPolicy": { + "type": "object", + "properties": { + "mfaPolicyId": { + "type": "string", + "description": "Unique identifier for a given MFA Policy." + }, + "mfaPolicyName": { + "type": "string", + "description": "Human-readable name for an MFA Policy." + }, + "condition": { + "type": "string", + "description": "A condition expression that evaluates to true or false, determining when this MFA policy applies." + }, + "requiredAuthenticationMethods": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RequiredAuthenticationMethod" + }, + "description": "An ordered list of authentication requirements. Each requirement must be satisfied sequentially to complete MFA." + }, + "order": { + "type": "integer", + "format": "int64", + "description": "The order in which this policy is evaluated relative to other MFA policies." + }, + "notes": { + "type": "string", + "description": "Optional human-readable notes added by a User to describe a particular MFA policy.", + "nullable": true + }, + "createdAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + } + }, + "required": [ + "mfaPolicyId", + "mfaPolicyName", + "condition", + "requiredAuthenticationMethods", + "order", + "createdAt", + "updatedAt" + ] + }, + "MfaStatus": { + "type": "object", + "properties": { + "mfaPolicyId": { + "type": "string", + "description": "Unique identifier for a given MFA Policy." + }, + "userId": { + "type": "string", + "description": "Unique identifier for a given User." + }, + "satisfied": { + "type": "boolean", + "description": "Whether the MFA policy requirements are currently satisfied." + }, + "satisfiedMethods": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AuthenticationMethod" + }, + "description": "A list of authentication methods already satisfied for this MFA policy." + }, + "requiredMethods": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RequiredAuthenticationMethod" + }, + "description": "An ordered list of authentication requirements needed to satisfy this MFA policy." + } + }, + "required": [ + "mfaPolicyId", + "userId", + "satisfied", + "satisfiedMethods", + "requiredMethods" + ] + }, + "MnemonicLanguage": { + "type": "string", + "enum": [ + "MNEMONIC_LANGUAGE_ENGLISH", + "MNEMONIC_LANGUAGE_SIMPLIFIED_CHINESE", + "MNEMONIC_LANGUAGE_TRADITIONAL_CHINESE", + "MNEMONIC_LANGUAGE_CZECH", + "MNEMONIC_LANGUAGE_FRENCH", + "MNEMONIC_LANGUAGE_ITALIAN", + "MNEMONIC_LANGUAGE_JAPANESE", + "MNEMONIC_LANGUAGE_KOREAN", + "MNEMONIC_LANGUAGE_SPANISH" + ] + }, + "NOOPCodegenAnchorResponse": { + "type": "object", + "properties": { + "stamp": { + "$ref": "#/components/schemas/WebAuthnStamp" + }, + "tokenUsage": { + "$ref": "#/components/schemas/TokenUsage" + } + }, + "required": [ + "stamp" + ] + }, + "NativeRevertError": { + "type": "object", + "properties": { + "nativeType": { + "type": "string", + "description": "The type of native error: 'error_string', 'panic', or 'execution_reverted'.", + "nullable": true + }, + "message": { + "type": "string", + "description": "The error message for Error(string) reverts.", + "nullable": true + }, + "panicCode": { + "type": "string", + "format": "uint64", + "description": "The panic code for Panic(uint256) reverts.", + "nullable": true + } + } + }, + "Oauth2AuthenticateIntent": { + "type": "object", + "properties": { + "oauth2CredentialId": { + "type": "string", + "description": "The OAuth 2.0 credential id whose client_id and client_secret will be used in the OAuth 2.0 flow" + }, + "authCode": { + "type": "string", + "description": "The auth_code provided by the OAuth 2.0 provider to the end user to be exchanged for a Bearer token in the OAuth 2.0 flow" + }, + "redirectUri": { + "type": "string", + "description": "The URI the user is redirected to after they have authenticated with the OAuth 2.0 provider" + }, + "codeVerifier": { + "type": "string", + "description": "The code verifier used by OAuth 2.0 PKCE providers" + }, + "nonce": { + "type": "string", + "description": "A nonce value set to sha256(publicKey), used to bind the OIDC token to a specific public key" + }, + "bearerTokenTargetPublicKey": { + "type": "string", + "description": "An optional P256 public key to which, if provided, the bearer token will be encrypted and returned via the `encrypted_bearer_token` claim of the OIDC Token", + "nullable": true + } + }, + "required": [ + "oauth2CredentialId", + "authCode", + "redirectUri", + "codeVerifier", + "nonce" + ] + }, + "Oauth2AuthenticateRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_OAUTH2_AUTHENTICATE" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/Oauth2AuthenticateIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "Oauth2AuthenticateResult": { + "type": "object", + "properties": { + "oidcToken": { + "type": "string", + "description": "Base64 encoded OIDC token issued by Turnkey to be used with the LoginWithOAuth activity" + } + }, + "required": [ + "oidcToken" + ] + }, + "Oauth2Credential": { + "type": "object", + "properties": { + "oauth2CredentialId": { + "type": "string", + "description": "Unique identifier for a given OAuth 2.0 Credential." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for an Organization." + }, + "provider": { + "$ref": "#/components/schemas/Oauth2Provider" + }, + "clientId": { + "type": "string", + "description": "The client id for a given OAuth 2.0 Credential." + }, + "encryptedClientSecret": { + "type": "string", + "description": "The encrypted client secret for a given OAuth 2.0 Credential encrypted to the TLS Fetcher quorum key." + }, + "createdAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + } + }, + "required": [ + "oauth2CredentialId", + "organizationId", + "provider", + "clientId", + "encryptedClientSecret", + "createdAt", + "updatedAt" + ] + }, + "Oauth2Provider": { + "type": "string", + "enum": [ + "OAUTH2_PROVIDER_X", + "OAUTH2_PROVIDER_DISCORD" + ] + }, + "OauthIntent": { + "type": "object", + "properties": { + "oidcToken": { + "type": "string", + "description": "Base64 encoded OIDC token" + }, + "targetPublicKey": { + "type": "string", + "description": "Client-side public key generated by the user, to which the oauth bundle (credentials) will be encrypted." + }, + "apiKeyName": { + "type": "string", + "description": "Optional human-readable name for an API Key. If none provided, default to Oauth - ", + "nullable": true + }, + "expirationSeconds": { + "type": "string", + "description": "Expiration window (in seconds) indicating how long the API key is valid for. If not provided, a default of 15 minutes will be used.", + "nullable": true + }, + "invalidateExisting": { + "type": "boolean", + "description": "Invalidate all other previously generated Oauth API keys", + "nullable": true + } + }, + "required": [ + "oidcToken", + "targetPublicKey" + ] + }, + "OauthLoginIntent": { + "type": "object", + "properties": { + "oidcToken": { + "type": "string", + "description": "Base64 encoded OIDC token" + }, + "publicKey": { + "type": "string", + "description": "Client-side public key generated by the user, which will be conditionally added to org data based on the validity of the oidc token associated with this request" + }, + "expirationSeconds": { + "type": "string", + "description": "Expiration window (in seconds) indicating how long the Session is valid for. If not provided, a default of 15 minutes will be used.", + "nullable": true + }, + "invalidateExisting": { + "type": "boolean", + "description": "Invalidate all other previously generated Login API keys", + "nullable": true + }, + "sessionProfileId": { + "type": "string", + "description": "Optional session profile ID to specify which Session Profile to use for this login. If not provided, the default read/write session will be used.", + "nullable": true + } + }, + "required": [ + "oidcToken", + "publicKey" + ] + }, + "OauthLoginRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_OAUTH_LOGIN" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/OauthLoginIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "OauthLoginResult": { + "type": "object", + "properties": { + "session": { + "type": "string", + "description": "Signed JWT containing an expiry, public key, session type, user id, and organization id" + } + }, + "required": [ + "session" + ] + }, + "OauthProvider": { + "type": "object", + "properties": { + "providerId": { + "type": "string", + "description": "Unique identifier for an OAuth Provider" + }, + "providerName": { + "type": "string", + "description": "Human-readable name to identify a Provider." + }, + "issuer": { + "type": "string", + "description": "The issuer of the token, typically a URL indicating the authentication server, e.g https://accounts.google.com" + }, + "audience": { + "type": "string", + "description": "Expected audience ('aud' attribute of the signed token) which represents the app ID" + }, + "subject": { + "type": "string", + "description": "Expected subject ('sub' attribute of the signed token) which represents the user ID" + }, + "createdAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + } + }, + "required": [ + "providerId", + "providerName", + "issuer", + "audience", + "subject", + "createdAt", + "updatedAt" + ] + }, + "OauthProviderParams": { + "type": "object", + "properties": { + "providerName": { + "type": "string", + "description": "Human-readable name to identify a Provider." + }, + "oidcToken": { + "type": "string", + "description": "Base64 encoded OIDC token" + } + }, + "required": [ + "providerName", + "oidcToken" + ] + }, + "OauthProviderParamsV2": { + "type": "object", + "properties": { + "providerName": { + "type": "string", + "description": "Human-readable name to identify a Provider." + }, + "oidcToken": { + "type": "string", + "description": "Base64 encoded OIDC token" + }, + "oidcClaims": { + "$ref": "#/components/schemas/OidcClaims" + } + }, + "required": [ + "providerName" + ] + }, + "OauthRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_OAUTH" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/OauthIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "OauthResult": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "Unique identifier for the authenticating User." + }, + "apiKeyId": { + "type": "string", + "description": "Unique identifier for the created API key." + }, + "credentialBundle": { + "type": "string", + "description": "HPKE encrypted credential bundle" + } + }, + "required": [ + "userId", + "apiKeyId", + "credentialBundle" + ] + }, + "OidcClaims": { + "type": "object", + "properties": { + "iss": { + "type": "string", + "description": "The issuer identifier from the OIDC token (iss claim)" + }, + "sub": { + "type": "string", + "description": "The subject identifier from the OIDC token (sub claim)" + }, + "aud": { + "type": "string", + "description": "The audience from the OIDC token (aud claim)" + } + }, + "required": [ + "iss", + "sub", + "aud" + ] + }, + "Operator": { + "type": "string", + "enum": [ + "OPERATOR_EQUAL", + "OPERATOR_MORE_THAN", + "OPERATOR_MORE_THAN_OR_EQUAL", + "OPERATOR_LESS_THAN", + "OPERATOR_LESS_THAN_OR_EQUAL", + "OPERATOR_CONTAINS", + "OPERATOR_NOT_EQUAL", + "OPERATOR_IN", + "OPERATOR_NOT_IN", + "OPERATOR_CONTAINS_ONE", + "OPERATOR_CONTAINS_ALL" + ] + }, + "OtpAuthIntent": { + "type": "object", + "properties": { + "otpId": { + "type": "string", + "description": "ID representing the result of an init OTP activity." + }, + "otpCode": { + "type": "string", + "description": "OTP sent out to a user's contact (email or SMS)" + }, + "targetPublicKey": { + "type": "string", + "description": "Client-side public key generated by the user, to which the OTP bundle (credentials) will be encrypted." + }, + "apiKeyName": { + "type": "string", + "description": "Optional human-readable name for an API Key. If none provided, default to OTP Auth - ", + "nullable": true + }, + "expirationSeconds": { + "type": "string", + "description": "Expiration window (in seconds) indicating how long the API key is valid for. If not provided, a default of 15 minutes will be used.", + "nullable": true + }, + "invalidateExisting": { + "type": "boolean", + "description": "Invalidate all other previously generated OTP Auth API keys", + "nullable": true + } + }, + "required": [ + "otpId", + "otpCode", + "targetPublicKey" + ] + }, + "OtpAuthRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_OTP_AUTH" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/OtpAuthIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "OtpAuthResult": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "Unique identifier for the authenticating User." + }, + "apiKeyId": { + "type": "string", + "description": "Unique identifier for the created API key." + }, + "credentialBundle": { + "type": "string", + "description": "HPKE encrypted credential bundle" + } + }, + "required": [ + "userId" + ] + }, + "OtpLoginIntent": { + "type": "object", + "properties": { + "verificationToken": { + "type": "string", + "description": "Signed JWT containing a unique id, expiry, verification type, contact" + }, + "publicKey": { + "type": "string", + "description": "Client-side public key generated by the user, which will be conditionally added to org data based on the validity of the verification token" + }, + "expirationSeconds": { + "type": "string", + "description": "Expiration window (in seconds) indicating how long the Session is valid for. If not provided, a default of 15 minutes will be used.", + "nullable": true + }, + "invalidateExisting": { + "type": "boolean", + "description": "Invalidate all other previously generated Login API keys", + "nullable": true + }, + "clientSignature": { + "$ref": "#/components/schemas/ClientSignature" + }, + "sessionProfileId": { + "type": "string", + "description": "Optional session profile ID to specify which Session Profile to use for this login. If not provided, the default read/write session will be used.", + "nullable": true + } + }, + "required": [ + "verificationToken", + "publicKey" + ] + }, + "OtpLoginIntentV2": { + "type": "object", + "properties": { + "verificationToken": { + "type": "string", + "description": "Signed Verification Token containing a unique id, expiry, verification type, contact" + }, + "publicKey": { + "type": "string", + "description": "Client-side public key generated by the user, used as the session public key upon successful login" + }, + "clientSignature": { + "$ref": "#/components/schemas/ClientSignature" + }, + "expirationSeconds": { + "type": "string", + "description": "Expiration window (in seconds) indicating how long the Session is valid for. If not provided, a default of 15 minutes will be used.", + "nullable": true + }, + "invalidateExisting": { + "type": "boolean", + "description": "Invalidate all other previously generated Login sessions", + "nullable": true + }, + "sessionProfileId": { + "type": "string", + "description": "Optional session profile ID to specify which Session Profile to use for this login. If not provided, the default read/write session will be used.", + "nullable": true + } + }, + "required": [ + "verificationToken", + "publicKey", + "clientSignature" + ] + }, + "OtpLoginRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_OTP_LOGIN_V2" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/OtpLoginIntentV2" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "OtpLoginResult": { + "type": "object", + "properties": { + "session": { + "type": "string", + "description": "Signed JWT containing an expiry, public key, session type, user id, and organization id" + } + }, + "required": [ + "session" + ] + }, + "Outcome": { + "type": "string", + "enum": [ + "OUTCOME_ALLOW", + "OUTCOME_DENY_EXPLICIT", + "OUTCOME_DENY_IMPLICIT", + "OUTCOME_REQUIRES_CONSENSUS", + "OUTCOME_REJECTED", + "OUTCOME_ERROR", + "OUTCOME_REQUIRES_AUTHENTICATORS", + "OUTCOME_TIME_INACTIVE" + ] + }, + "PageInfo": { + "type": "object", + "properties": { + "hasNextPage": { + "type": "boolean" + }, + "hasPreviousPage": { + "type": "boolean" + }, + "startCursor": { + "type": "string", + "nullable": true + }, + "endCursor": { + "type": "string", + "nullable": true + } + } + }, + "Pagination": { + "type": "object", + "properties": { + "limit": { + "type": "string", + "description": "A limit of the number of object to be returned, between 1 and 100. Defaults to 10." + }, + "before": { + "type": "string", + "description": "A pagination cursor. This is an object ID that enables you to fetch all objects before this ID." + }, + "after": { + "type": "string", + "description": "A pagination cursor. This is an object ID that enables you to fetch all objects after this ID." + } + } + }, + "PathFormat": { + "type": "string", + "enum": [ + "PATH_FORMAT_BIP32" + ] + }, + "PayloadEncoding": { + "type": "string", + "enum": [ + "PAYLOAD_ENCODING_HEXADECIMAL", + "PAYLOAD_ENCODING_TEXT_UTF8", + "PAYLOAD_ENCODING_EIP712", + "PAYLOAD_ENCODING_EIP7702_AUTHORIZATION" + ] + }, + "Policy": { + "type": "object", + "properties": { + "policyId": { + "type": "string", + "description": "Unique identifier for a given Policy." + }, + "policyName": { + "type": "string", + "description": "Human-readable name for a Policy." + }, + "effect": { + "$ref": "#/components/schemas/Effect" + }, + "createdAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + }, + "notes": { + "type": "string", + "description": "Human-readable notes added by a User to describe a particular policy." + }, + "consensus": { + "type": "string", + "description": "A consensus expression that evalutes to true or false.", + "nullable": true + }, + "condition": { + "type": "string", + "description": "A condition expression that evalutes to true or false.", + "nullable": true + }, + "time": { + "type": "string", + "description": "A time expression that evalutes to true or false.", + "nullable": true + } + }, + "required": [ + "policyId", + "policyName", + "effect", + "createdAt", + "updatedAt", + "notes", + "consensus", + "condition" + ] + }, + "PostTvcQuorumKeyShareIntent": { + "type": "object", + "properties": { + "deploymentId": { + "type": "string", + "description": "Unique identifier of the TVC deployment receiving quorum key share" + }, + "ephemeralPublicKeyHex": { + "type": "string", + "description": "Hex-encoded ephemeral public key used to encrypt the quorum key share" + }, + "shareApprovalBundle": { + "$ref": "#/components/schemas/QuorumKeyShareApprovalBundle" + } + }, + "required": [ + "deploymentId", + "ephemeralPublicKeyHex", + "shareApprovalBundle" + ] + }, + "PostTvcQuorumKeyShareResult": { + "type": "object", + "properties": { + "provisioningShareId": { + "type": "string", + "description": "The unique identifier for the provisioning quorum key share" + } + }, + "required": [ + "provisioningShareId" + ] + }, + "PrivateKey": { + "type": "object", + "properties": { + "privateKeyId": { + "type": "string", + "description": "Unique identifier for a given Private Key." + }, + "publicKey": { + "type": "string", + "description": "The public component of a cryptographic key pair used to sign messages and transactions." + }, + "privateKeyName": { + "type": "string", + "description": "Human-readable name for a Private Key." + }, + "curve": { + "$ref": "#/components/schemas/Curve" + }, + "addresses": { + "type": "array", + "items": { + "$ref": "#/components/schemas/data.v1.Address" + }, + "description": "Derived cryptocurrency addresses for a given Private Key." + }, + "privateKeyTags": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of Private Key Tag IDs." + }, + "createdAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + }, + "exported": { + "type": "boolean", + "description": "True when a given Private Key is exported, false otherwise." + }, + "imported": { + "type": "boolean", + "description": "True when a given Private Key is imported, false otherwise." + } + }, + "required": [ + "privateKeyId", + "publicKey", + "privateKeyName", + "curve", + "addresses", + "privateKeyTags", + "createdAt", + "updatedAt", + "exported", + "imported" + ] + }, + "PrivateKeyParams": { + "type": "object", + "properties": { + "privateKeyName": { + "type": "string", + "description": "Human-readable name for a Private Key." + }, + "curve": { + "$ref": "#/components/schemas/Curve" + }, + "privateKeyTags": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of Private Key Tag IDs. This field, if not needed, should be an empty array in your request body." + }, + "addressFormats": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AddressFormat" + }, + "description": "Cryptocurrency-specific formats for a derived address (e.g., Ethereum)." + } + }, + "required": [ + "privateKeyName", + "curve", + "privateKeyTags", + "addressFormats" + ] + }, + "PrivateKeyResult": { + "type": "object", + "properties": { + "privateKeyId": { + "type": "string" + }, + "addresses": { + "type": "array", + "items": { + "$ref": "#/components/schemas/activity.v1.Address" + } + } + } + }, + "PublicKeyCredentialWithAttestation": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "public-key" + ] + }, + "rawId": { + "type": "string" + }, + "authenticatorAttachment": { + "type": "string", + "enum": [ + "cross-platform", + "platform" + ], + "nullable": true + }, + "response": { + "$ref": "#/components/schemas/AuthenticatorAttestationResponse" + }, + "clientExtensionResults": { + "$ref": "#/components/schemas/SimpleClientExtensionResults" + } + }, + "required": [ + "id", + "type", + "rawId", + "response", + "clientExtensionResults" + ] + }, + "QuorumKeyShareApprovalBundle": { + "type": "object", + "properties": { + "operatorId": { + "type": "string", + "description": "Unique identifier of the operator providing this quorum key share" + }, + "reEncryptedShareHex": { + "type": "string", + "description": "Hex-encoded re-encrypted quorum key share" + }, + "signature": { + "type": "string", + "description": "Signature from the share set operator approving the manifest" + } + }, + "required": [ + "operatorId", + "reEncryptedShareHex", + "signature" + ] + }, + "ReEncryptTvcQuorumKeyShareIntent": { + "type": "object", + "properties": { + "attestationDocB64": { + "type": "string", + "description": "Base64-encoded attestation document for the TVC deployment provisioning enclave" + }, + "manifestB64": { + "type": "string", + "description": "Base64-encoded manifest for the TVC deployment" + }, + "operatorEncryptKey": { + "type": "string", + "description": "Operator encryption public key used to encrypt the hosted TVC quorum key share" + }, + "operatorSignKey": { + "type": "string", + "description": "Operator signing public key used to approve the TVC manifest" + }, + "deploymentId": { + "type": "string", + "description": "Unique identifier of the TVC deployment receiving the re-encrypted quorum key share" + }, + "appQuorumKey": { + "type": "string", + "description": "Quorum key for the TVC application" + } + }, + "required": [ + "attestationDocB64", + "manifestB64", + "operatorEncryptKey", + "operatorSignKey", + "deploymentId", + "appQuorumKey" + ] + }, + "ReEncryptTvcQuorumKeyShareResult": { + "type": "object", + "properties": { + "provisioningShareId": { + "type": "string", + "description": "The unique identifier for the provisioning quorum key share" + } + }, + "required": [ + "provisioningShareId" + ] + }, + "RecoverUserIntent": { + "type": "object", + "properties": { + "authenticator": { + "$ref": "#/components/schemas/AuthenticatorParamsV2" + }, + "userId": { + "type": "string", + "description": "Unique identifier for the user performing recovery." + } + }, + "required": [ + "authenticator", + "userId" + ] + }, + "RecoverUserRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_RECOVER_USER" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/RecoverUserIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "RecoverUserResult": { + "type": "object", + "properties": { + "authenticatorId": { + "type": "array", + "items": { + "type": "string" + }, + "description": "ID of the authenticator created." + } + }, + "required": [ + "authenticatorId" + ] + }, + "RejectActivityIntent": { + "type": "object", + "properties": { + "fingerprint": { + "type": "string", + "description": "An artifact verifying a User's action." + } + }, + "required": [ + "fingerprint" + ] + }, + "RejectActivityRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_REJECT_ACTIVITY" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/RejectActivityIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "RemoveIpAllowlistIntent": { + "type": "object", + "properties": { + "publicKey": { + "type": "string", + "description": "The public component of an API key. If null, removes the organization-level IP allowlist. If set, removes the IP allowlist for this specific API key.", + "nullable": true + } + } + }, + "RemoveIpAllowlistRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_REMOVE_IP_ALLOWLIST" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/RemoveIpAllowlistIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "RemoveIpAllowlistResult": { + "type": "object" + }, + "RemoveOrganizationFeatureIntent": { + "type": "object", + "properties": { + "name": { + "$ref": "#/components/schemas/FeatureName" + } + }, + "required": [ + "name" + ] + }, + "RemoveOrganizationFeatureRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_REMOVE_ORGANIZATION_FEATURE" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/RemoveOrganizationFeatureIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "RemoveOrganizationFeatureResult": { + "type": "object", + "properties": { + "features": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Feature" + }, + "description": "Resulting list of organization features." + } + }, + "required": [ + "features" + ] + }, + "RequiredAuthenticationMethod": { + "type": "object", + "properties": { + "any": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AuthenticationMethod" + }, + "description": "A list of authentication methods for this MFA step. If only one method is provided, it is required. If multiple are provided, the user must satisfy ANY one of them." + } + }, + "required": [ + "any" + ] + }, + "RequiredAuthenticationMethodParams": { + "type": "object", + "properties": { + "any": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AuthenticationMethodParams" + }, + "description": "A list of authentication methods for this MFA step. If only one method is provided, it is required. If multiple are provided, the user must satisfy ANY one of them." + } + }, + "required": [ + "any" + ] + }, + "RestoreTvcDeploymentIntent": { + "type": "object", + "properties": { + "deploymentId": { + "type": "string", + "description": "The unique identifier of the TVC deployment to restore." + } + }, + "required": [ + "deploymentId" + ] + }, + "RestoreTvcDeploymentRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_RESTORE_TVC_DEPLOYMENT" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/RestoreTvcDeploymentIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "RestoreTvcDeploymentResult": { + "type": "object", + "properties": { + "deploymentId": { + "type": "string", + "description": "The unique identifier of the restored TVC deployment." + } + }, + "required": [ + "deploymentId" + ] + }, + "Result": { + "type": "object", + "properties": { + "createOrganizationResult": { + "$ref": "#/components/schemas/CreateOrganizationResult" + }, + "createAuthenticatorsResult": { + "$ref": "#/components/schemas/CreateAuthenticatorsResult" + }, + "createUsersResult": { + "$ref": "#/components/schemas/CreateUsersResult" + }, + "createPrivateKeysResult": { + "$ref": "#/components/schemas/CreatePrivateKeysResult" + }, + "createInvitationsResult": { + "$ref": "#/components/schemas/CreateInvitationsResult" + }, + "acceptInvitationResult": { + "$ref": "#/components/schemas/AcceptInvitationResult" + }, + "signRawPayloadResult": { + "$ref": "#/components/schemas/SignRawPayloadResult" + }, + "createPolicyResult": { + "$ref": "#/components/schemas/CreatePolicyResult" + }, + "disablePrivateKeyResult": { + "$ref": "#/components/schemas/DisablePrivateKeyResult" + }, + "deleteUsersResult": { + "$ref": "#/components/schemas/DeleteUsersResult" + }, + "deleteAuthenticatorsResult": { + "$ref": "#/components/schemas/DeleteAuthenticatorsResult" + }, + "deleteInvitationResult": { + "$ref": "#/components/schemas/DeleteInvitationResult" + }, + "deleteOrganizationResult": { + "$ref": "#/components/schemas/DeleteOrganizationResult" + }, + "deletePolicyResult": { + "$ref": "#/components/schemas/DeletePolicyResult" + }, + "createUserTagResult": { + "$ref": "#/components/schemas/CreateUserTagResult" + }, + "deleteUserTagsResult": { + "$ref": "#/components/schemas/DeleteUserTagsResult" + }, + "signTransactionResult": { + "$ref": "#/components/schemas/SignTransactionResult" + }, + "deleteApiKeysResult": { + "$ref": "#/components/schemas/DeleteApiKeysResult" + }, + "createApiKeysResult": { + "$ref": "#/components/schemas/CreateApiKeysResult" + }, + "createPrivateKeyTagResult": { + "$ref": "#/components/schemas/CreatePrivateKeyTagResult" + }, + "deletePrivateKeyTagsResult": { + "$ref": "#/components/schemas/DeletePrivateKeyTagsResult" + }, + "setPaymentMethodResult": { + "$ref": "#/components/schemas/SetPaymentMethodResult" + }, + "activateBillingTierResult": { + "$ref": "#/components/schemas/ActivateBillingTierResult" + }, + "deletePaymentMethodResult": { + "$ref": "#/components/schemas/DeletePaymentMethodResult" + }, + "createApiOnlyUsersResult": { + "$ref": "#/components/schemas/CreateApiOnlyUsersResult" + }, + "updateRootQuorumResult": { + "$ref": "#/components/schemas/UpdateRootQuorumResult" + }, + "updateUserTagResult": { + "$ref": "#/components/schemas/UpdateUserTagResult" + }, + "updatePrivateKeyTagResult": { + "$ref": "#/components/schemas/UpdatePrivateKeyTagResult" + }, + "createSubOrganizationResult": { + "$ref": "#/components/schemas/CreateSubOrganizationResult" + }, + "updateAllowedOriginsResult": { + "$ref": "#/components/schemas/UpdateAllowedOriginsResult" + }, + "createPrivateKeysResultV2": { + "$ref": "#/components/schemas/CreatePrivateKeysResultV2" + }, + "updateUserResult": { + "$ref": "#/components/schemas/UpdateUserResult" + }, + "updatePolicyResult": { + "$ref": "#/components/schemas/UpdatePolicyResult" + }, + "createSubOrganizationResultV3": { + "$ref": "#/components/schemas/CreateSubOrganizationResultV3" + }, + "createWalletResult": { + "$ref": "#/components/schemas/CreateWalletResult" + }, + "createWalletAccountsResult": { + "$ref": "#/components/schemas/CreateWalletAccountsResult" + }, + "initUserEmailRecoveryResult": { + "$ref": "#/components/schemas/InitUserEmailRecoveryResult" + }, + "recoverUserResult": { + "$ref": "#/components/schemas/RecoverUserResult" + }, + "setOrganizationFeatureResult": { + "$ref": "#/components/schemas/SetOrganizationFeatureResult" + }, + "removeOrganizationFeatureResult": { + "$ref": "#/components/schemas/RemoveOrganizationFeatureResult" + }, + "exportPrivateKeyResult": { + "$ref": "#/components/schemas/ExportPrivateKeyResult" + }, + "exportWalletResult": { + "$ref": "#/components/schemas/ExportWalletResult" + }, + "createSubOrganizationResultV4": { + "$ref": "#/components/schemas/CreateSubOrganizationResultV4" + }, + "emailAuthResult": { + "$ref": "#/components/schemas/EmailAuthResult" + }, + "exportWalletAccountResult": { + "$ref": "#/components/schemas/ExportWalletAccountResult" + }, + "initImportWalletResult": { + "$ref": "#/components/schemas/InitImportWalletResult" + }, + "importWalletResult": { + "$ref": "#/components/schemas/ImportWalletResult" + }, + "initImportPrivateKeyResult": { + "$ref": "#/components/schemas/InitImportPrivateKeyResult" + }, + "importPrivateKeyResult": { + "$ref": "#/components/schemas/ImportPrivateKeyResult" + }, + "createPoliciesResult": { + "$ref": "#/components/schemas/CreatePoliciesResult" + }, + "signRawPayloadsResult": { + "$ref": "#/components/schemas/SignRawPayloadsResult" + }, + "createReadOnlySessionResult": { + "$ref": "#/components/schemas/CreateReadOnlySessionResult" + }, + "createOauthProvidersResult": { + "$ref": "#/components/schemas/CreateOauthProvidersResult" + }, + "deleteOauthProvidersResult": { + "$ref": "#/components/schemas/DeleteOauthProvidersResult" + }, + "createSubOrganizationResultV5": { + "$ref": "#/components/schemas/CreateSubOrganizationResultV5" + }, + "oauthResult": { + "$ref": "#/components/schemas/OauthResult" + }, + "createReadWriteSessionResult": { + "$ref": "#/components/schemas/CreateReadWriteSessionResult" + }, + "createSubOrganizationResultV6": { + "$ref": "#/components/schemas/CreateSubOrganizationResultV6" + }, + "deletePrivateKeysResult": { + "$ref": "#/components/schemas/DeletePrivateKeysResult" + }, + "deleteWalletsResult": { + "$ref": "#/components/schemas/DeleteWalletsResult" + }, + "createReadWriteSessionResultV2": { + "$ref": "#/components/schemas/CreateReadWriteSessionResultV2" + }, + "deleteSubOrganizationResult": { + "$ref": "#/components/schemas/DeleteSubOrganizationResult" + }, + "initOtpAuthResult": { + "$ref": "#/components/schemas/InitOtpAuthResult" + }, + "otpAuthResult": { + "$ref": "#/components/schemas/OtpAuthResult" + }, + "createSubOrganizationResultV7": { + "$ref": "#/components/schemas/CreateSubOrganizationResultV7" + }, + "updateWalletResult": { + "$ref": "#/components/schemas/UpdateWalletResult" + }, + "updatePolicyResultV2": { + "$ref": "#/components/schemas/UpdatePolicyResultV2" + }, + "initOtpAuthResultV2": { + "$ref": "#/components/schemas/InitOtpAuthResultV2" + }, + "initOtpResult": { + "$ref": "#/components/schemas/InitOtpResult" + }, + "verifyOtpResult": { + "$ref": "#/components/schemas/VerifyOtpResult" + }, + "otpLoginResult": { + "$ref": "#/components/schemas/OtpLoginResult" + }, + "stampLoginResult": { + "$ref": "#/components/schemas/StampLoginResult" + }, + "oauthLoginResult": { + "$ref": "#/components/schemas/OauthLoginResult" + }, + "updateUserNameResult": { + "$ref": "#/components/schemas/UpdateUserNameResult" + }, + "updateUserEmailResult": { + "$ref": "#/components/schemas/UpdateUserEmailResult" + }, + "updateUserPhoneNumberResult": { + "$ref": "#/components/schemas/UpdateUserPhoneNumberResult" + }, + "initFiatOnRampResult": { + "$ref": "#/components/schemas/InitFiatOnRampResult" + }, + "createSmartContractInterfaceResult": { + "$ref": "#/components/schemas/CreateSmartContractInterfaceResult" + }, + "deleteSmartContractInterfaceResult": { + "$ref": "#/components/schemas/DeleteSmartContractInterfaceResult" + }, + "enableAuthProxyResult": { + "$ref": "#/components/schemas/EnableAuthProxyResult" + }, + "disableAuthProxyResult": { + "$ref": "#/components/schemas/DisableAuthProxyResult" + }, + "updateAuthProxyConfigResult": { + "$ref": "#/components/schemas/UpdateAuthProxyConfigResult" + }, + "createOauth2CredentialResult": { + "$ref": "#/components/schemas/CreateOauth2CredentialResult" + }, + "updateOauth2CredentialResult": { + "$ref": "#/components/schemas/UpdateOauth2CredentialResult" + }, + "deleteOauth2CredentialResult": { + "$ref": "#/components/schemas/DeleteOauth2CredentialResult" + }, + "oauth2AuthenticateResult": { + "$ref": "#/components/schemas/Oauth2AuthenticateResult" + }, + "deleteWalletAccountsResult": { + "$ref": "#/components/schemas/DeleteWalletAccountsResult" + }, + "deletePoliciesResult": { + "$ref": "#/components/schemas/DeletePoliciesResult" + }, + "ethSendRawTransactionResult": { + "$ref": "#/components/schemas/EthSendRawTransactionResult" + }, + "createFiatOnRampCredentialResult": { + "$ref": "#/components/schemas/CreateFiatOnRampCredentialResult" + }, + "updateFiatOnRampCredentialResult": { + "$ref": "#/components/schemas/UpdateFiatOnRampCredentialResult" + }, + "deleteFiatOnRampCredentialResult": { + "$ref": "#/components/schemas/DeleteFiatOnRampCredentialResult" + }, + "ethSendTransactionResult": { + "$ref": "#/components/schemas/EthSendTransactionResult" + }, + "upsertGasUsageConfigResult": { + "$ref": "#/components/schemas/UpsertGasUsageConfigResult" + }, + "createTvcAppResult": { + "$ref": "#/components/schemas/CreateTvcAppResult" + }, + "createTvcDeploymentResult": { + "$ref": "#/components/schemas/CreateTvcDeploymentResult" + }, + "createTvcManifestApprovalsResult": { + "$ref": "#/components/schemas/CreateTvcManifestApprovalsResult" + }, + "solSendTransactionResult": { + "$ref": "#/components/schemas/SolSendTransactionResult" + }, + "initOtpResultV2": { + "$ref": "#/components/schemas/InitOtpResultV2" + }, + "updateOrganizationNameResult": { + "$ref": "#/components/schemas/UpdateOrganizationNameResult" + }, + "createSubOrganizationResultV8": { + "$ref": "#/components/schemas/CreateSubOrganizationResultV8" + }, + "createOauthProvidersResultV2": { + "$ref": "#/components/schemas/CreateOauthProvidersResultV2" + }, + "createWebhookEndpointResult": { + "$ref": "#/components/schemas/CreateWebhookEndpointResult" + }, + "updateWebhookEndpointResult": { + "$ref": "#/components/schemas/UpdateWebhookEndpointResult" + }, + "deleteWebhookEndpointResult": { + "$ref": "#/components/schemas/DeleteWebhookEndpointResult" + }, + "setIpAllowlistResult": { + "$ref": "#/components/schemas/SetIpAllowlistResult" + }, + "removeIpAllowlistResult": { + "$ref": "#/components/schemas/RemoveIpAllowlistResult" + }, + "updateTvcAppLiveDeploymentResult": { + "$ref": "#/components/schemas/UpdateTvcAppLiveDeploymentResult" + }, + "deleteTvcDeploymentResult": { + "$ref": "#/components/schemas/DeleteTvcDeploymentResult" + }, + "deleteTvcAppAndDeploymentsResult": { + "$ref": "#/components/schemas/DeleteTvcAppAndDeploymentsResult" + }, + "restoreTvcDeploymentResult": { + "$ref": "#/components/schemas/RestoreTvcDeploymentResult" + }, + "sparkSignFrostResult": { + "$ref": "#/components/schemas/SparkSignFrostResult" + }, + "sparkPrepareTransferResult": { + "$ref": "#/components/schemas/SparkPrepareTransferResult" + }, + "sparkClaimTransferResult": { + "$ref": "#/components/schemas/SparkClaimTransferResult" + }, + "sparkPrepareLightningReceiveResult": { + "$ref": "#/components/schemas/SparkPrepareLightningReceiveResult" + }, + "postTvcQuorumKeyShareResult": { + "$ref": "#/components/schemas/PostTvcQuorumKeyShareResult" + }, + "ethSendTransactionResultV2": { + "$ref": "#/components/schemas/EthSendTransactionResultV2" + }, + "createMfaPolicyResult": { + "$ref": "#/components/schemas/CreateMfaPolicyResult" + }, + "updateMfaPolicyResult": { + "$ref": "#/components/schemas/UpdateMfaPolicyResult" + }, + "deleteMfaPolicyResult": { + "$ref": "#/components/schemas/DeleteMfaPolicyResult" + }, + "createSessionProfileResult": { + "$ref": "#/components/schemas/CreateSessionProfileResult" + }, + "earnDeployWrapperResult": { + "$ref": "#/components/schemas/EarnDeployWrapperResult" + }, + "earnDepositResult": { + "$ref": "#/components/schemas/EarnDepositResult" + }, + "earnWithdrawResult": { + "$ref": "#/components/schemas/EarnWithdrawResult" + }, + "executeSwapResult": { + "$ref": "#/components/schemas/ExecuteSwapResult" + }, + "upsertSwapConfigResult": { + "$ref": "#/components/schemas/UpsertSwapConfigResult" + }, + "createTvcOperatorResult": { + "$ref": "#/components/schemas/CreateTvcOperatorResult" + }, + "createTvcQuorumKeyResult": { + "$ref": "#/components/schemas/CreateTvcQuorumKeyResult" + }, + "reEncryptTvcQuorumKeyShareResult": { + "$ref": "#/components/schemas/ReEncryptTvcQuorumKeyShareResult" + }, + "initImportSecretsResult": { + "$ref": "#/components/schemas/InitImportSecretsResult" + }, + "solSendTransactionResultV2": { + "$ref": "#/components/schemas/SolSendTransactionResultV2" + }, + "claimSwapFeesResult": { + "$ref": "#/components/schemas/ClaimSwapFeesResult" + }, + "earnSetWrapperStateResult": { + "$ref": "#/components/schemas/EarnSetWrapperStateResult" + }, + "claimEarnFeesResult": { + "$ref": "#/components/schemas/ClaimEarnFeesResult" + }, + "updateWalletAccountNameResult": { + "$ref": "#/components/schemas/UpdateWalletAccountNameResult" + }, + "ethUndelegate7702Result": { + "$ref": "#/components/schemas/EthUndelegate7702Result" + }, + "createSwapQuoteResult": { + "$ref": "#/components/schemas/CreateSwapQuoteResult" + }, + "importSecretsResult": { + "$ref": "#/components/schemas/ImportSecretsResult" + } + } + }, + "RevertChainEntry": { + "type": "object", + "properties": { + "address": { + "type": "string", + "description": "The contract address where the revert occurred." + }, + "errorType": { + "type": "string", + "description": "Type of error: 'unknown', 'native', or 'custom'." + }, + "displayMessage": { + "type": "string", + "description": "Human-readable message describing this revert." + }, + "unknown": { + "$ref": "#/components/schemas/UnknownRevertError" + }, + "native": { + "$ref": "#/components/schemas/NativeRevertError" + }, + "custom": { + "$ref": "#/components/schemas/CustomRevertError" + } + } + }, + "RootUserParams": { + "type": "object", + "properties": { + "userName": { + "type": "string", + "description": "Human-readable name for a User." + }, + "userEmail": { + "type": "string", + "description": "The user's email address.", + "nullable": true + }, + "apiKeys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ApiKeyParams" + }, + "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." + }, + "authenticators": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AuthenticatorParamsV2" + }, + "description": "A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body." + } + }, + "required": [ + "userName", + "apiKeys", + "authenticators" + ] + }, + "RootUserParamsV2": { + "type": "object", + "properties": { + "userName": { + "type": "string", + "description": "Human-readable name for a User." + }, + "userEmail": { + "type": "string", + "description": "The user's email address.", + "nullable": true + }, + "apiKeys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ApiKeyParams" + }, + "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." + }, + "authenticators": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AuthenticatorParamsV2" + }, + "description": "A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body." + }, + "oauthProviders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OauthProviderParams" + }, + "description": "A list of Oauth providers. This field, if not needed, should be an empty array in your request body." + } + }, + "required": [ + "userName", + "apiKeys", + "authenticators", + "oauthProviders" + ] + }, + "RootUserParamsV3": { + "type": "object", + "properties": { + "userName": { + "type": "string", + "description": "Human-readable name for a User." + }, + "userEmail": { + "type": "string", + "description": "The user's email address.", + "nullable": true + }, + "apiKeys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ApiKeyParamsV2" + }, + "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." + }, + "authenticators": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AuthenticatorParamsV2" + }, + "description": "A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body." + }, + "oauthProviders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OauthProviderParams" + }, + "description": "A list of Oauth providers. This field, if not needed, should be an empty array in your request body." + } + }, + "required": [ + "userName", + "apiKeys", + "authenticators", + "oauthProviders" + ] + }, + "RootUserParamsV4": { + "type": "object", + "properties": { + "userName": { + "type": "string", + "description": "Human-readable name for a User." + }, + "userEmail": { + "type": "string", + "description": "The user's email address.", + "nullable": true + }, + "userPhoneNumber": { + "type": "string", + "description": "The user's phone number in E.164 format e.g. +13214567890", + "nullable": true + }, + "apiKeys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ApiKeyParamsV2" + }, + "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." + }, + "authenticators": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AuthenticatorParamsV2" + }, + "description": "A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body." + }, + "oauthProviders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OauthProviderParams" + }, + "description": "A list of Oauth providers. This field, if not needed, should be an empty array in your request body." + } + }, + "required": [ + "userName", + "apiKeys", + "authenticators", + "oauthProviders" + ] + }, + "RootUserParamsV5": { + "type": "object", + "properties": { + "userName": { + "type": "string", + "description": "Human-readable name for a User." + }, + "userEmail": { + "type": "string", + "description": "The user's email address.", + "nullable": true + }, + "userPhoneNumber": { + "type": "string", + "description": "The user's phone number in E.164 format e.g. +13214567890", + "nullable": true + }, + "apiKeys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ApiKeyParamsV2" + }, + "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." + }, + "authenticators": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AuthenticatorParamsV2" + }, + "description": "A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body." + }, + "oauthProviders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OauthProviderParamsV2" + }, + "description": "A list of Oauth providers. This field, if not needed, should be an empty array in your request body." + } + }, + "required": [ + "userName", + "apiKeys", + "authenticators", + "oauthProviders" + ] + }, + "Selector": { + "type": "object", + "properties": { + "subject": { + "type": "string" + }, + "operator": { + "$ref": "#/components/schemas/Operator" + }, + "target": { + "type": "string" + } + } + }, + "SelectorV2": { + "type": "object", + "properties": { + "subject": { + "type": "string" + }, + "operator": { + "$ref": "#/components/schemas/Operator" + }, + "targets": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "SessionProfile": { + "type": "object", + "properties": { + "sessionProfileId": { + "type": "string", + "description": "Unique identifier for a given Session Profile." + }, + "sessionProfileName": { + "type": "string", + "description": "Human-readable name for a Session Profile." + }, + "scope": { + "type": "string", + "description": "The specific scope that a session created with this profile is limited to." + }, + "expirationSeconds": { + "type": "string", + "description": "Optional window (in seconds) indicating how long sessions created with this profile should last.", + "nullable": true + }, + "notes": { + "type": "string", + "description": "Optional human-readable notes added by a User to describe a particular Session Profile.", + "nullable": true + }, + "createdAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + } + }, + "required": [ + "sessionProfileId", + "sessionProfileName", + "scope", + "createdAt", + "updatedAt" + ] + }, + "SetIpAllowlistIntent": { + "type": "object", + "properties": { + "publicKey": { + "type": "string", + "description": "The public component of an API key. If null, the IP allowlist applies at the organization level. If set, it applies only to this specific API key.", + "nullable": true + }, + "enabled": { + "type": "boolean", + "description": "Whether the IP allowlist is enabled. Only meaningful for organization-level allowlists. Omit for API key-level allowlists.", + "nullable": true + }, + "rules": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IpAllowlistIntentRule" + }, + "description": "List of IP allowlist rules with CIDR blocks and optional labels." + }, + "onEvaluationError": { + "type": "string", + "description": "Behavior when an error occurs during IP allowlist evaluation. Valid values: ALLOW, DENY. Defaults to DENY.", + "nullable": true + } + } + }, + "SetIpAllowlistRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_SET_IP_ALLOWLIST" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/SetIpAllowlistIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "SetIpAllowlistResult": { + "type": "object" + }, + "SetOrganizationFeatureIntent": { + "type": "object", + "properties": { + "name": { + "$ref": "#/components/schemas/FeatureName" + }, + "value": { + "type": "string", + "description": "Optional value for the feature. Will override existing values if feature is already set.", + "nullable": true + } + }, + "required": [ + "name", + "value" + ] + }, + "SetOrganizationFeatureRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_SET_ORGANIZATION_FEATURE" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/SetOrganizationFeatureIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "SetOrganizationFeatureResult": { + "type": "object", + "properties": { + "features": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Feature" + }, + "description": "Resulting list of organization features." + } + }, + "required": [ + "features" + ] + }, + "SetPaymentMethodIntent": { + "type": "object", + "properties": { + "number": { + "type": "string", + "description": "The account number of the customer's credit card." + }, + "cvv": { + "type": "string", + "description": "The verification digits of the customer's credit card." + }, + "expiryMonth": { + "type": "string", + "description": "The month that the credit card expires." + }, + "expiryYear": { + "type": "string", + "description": "The year that the credit card expires." + }, + "cardHolderEmail": { + "type": "string", + "description": "The email that will receive invoices for the credit card." + }, + "cardHolderName": { + "type": "string", + "description": "The name associated with the credit card." + } + }, + "required": [ + "number", + "cvv", + "expiryMonth", + "expiryYear", + "cardHolderEmail", + "cardHolderName" + ] + }, + "SetPaymentMethodIntentV2": { + "type": "object", + "properties": { + "paymentMethodId": { + "type": "string", + "description": "The id of the payment method that was created clientside." + }, + "cardHolderEmail": { + "type": "string", + "description": "The email that will receive invoices for the credit card." + }, + "cardHolderName": { + "type": "string", + "description": "The name associated with the credit card." + } + }, + "required": [ + "paymentMethodId", + "cardHolderEmail", + "cardHolderName" + ] + }, + "SetPaymentMethodResult": { + "type": "object", + "properties": { + "lastFour": { + "type": "string", + "description": "The last four digits of the credit card added." + }, + "cardHolderName": { + "type": "string", + "description": "The name associated with the payment method." + }, + "cardHolderEmail": { + "type": "string", + "description": "The email address associated with the payment method." + } + }, + "required": [ + "lastFour", + "cardHolderName", + "cardHolderEmail" + ] + }, + "SignRawPayloadIntent": { + "type": "object", + "properties": { + "privateKeyId": { + "type": "string", + "description": "Unique identifier for a given Private Key." + }, + "payload": { + "type": "string", + "description": "Raw unsigned payload to be signed." + }, + "encoding": { + "$ref": "#/components/schemas/PayloadEncoding" + }, + "hashFunction": { + "$ref": "#/components/schemas/HashFunction" + } + }, + "required": [ + "privateKeyId", + "payload", + "encoding", + "hashFunction" + ] + }, + "SignRawPayloadIntentV2": { + "type": "object", + "properties": { + "signWith": { + "type": "string", + "description": "A Wallet account address, Private Key address, or Private Key identifier." + }, + "payload": { + "type": "string", + "description": "Raw unsigned payload to be signed." + }, + "encoding": { + "$ref": "#/components/schemas/PayloadEncoding" + }, + "hashFunction": { + "$ref": "#/components/schemas/HashFunction" + } + }, + "required": [ + "signWith", + "payload", + "encoding", + "hashFunction" + ] + }, + "SignRawPayloadRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_SIGN_RAW_PAYLOAD_V2" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/SignRawPayloadIntentV2" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "SignRawPayloadResult": { + "type": "object", + "properties": { + "r": { + "type": "string", + "description": "Component of an ECSDA signature." + }, + "s": { + "type": "string", + "description": "Component of an ECSDA signature." + }, + "v": { + "type": "string", + "description": "Component of an ECSDA signature." + } + }, + "required": [ + "r", + "s", + "v" + ] + }, + "SignRawPayloadsIntent": { + "type": "object", + "properties": { + "signWith": { + "type": "string", + "description": "A Wallet account address, Private Key address, or Private Key identifier." + }, + "payloads": { + "type": "array", + "items": { + "type": "string" + }, + "description": "An array of raw unsigned payloads to be signed." + }, + "encoding": { + "$ref": "#/components/schemas/PayloadEncoding" + }, + "hashFunction": { + "$ref": "#/components/schemas/HashFunction" + } + }, + "required": [ + "signWith", + "payloads", + "encoding", + "hashFunction" + ] + }, + "SignRawPayloadsRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_SIGN_RAW_PAYLOADS" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/SignRawPayloadsIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "SignRawPayloadsResult": { + "type": "object", + "properties": { + "signatures": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SignRawPayloadResult" + } + } + } + }, + "SignTransactionIntent": { + "type": "object", + "properties": { + "privateKeyId": { + "type": "string", + "description": "Unique identifier for a given Private Key." + }, + "unsignedTransaction": { + "type": "string", + "description": "Raw unsigned transaction to be signed by a particular Private Key." + }, + "type": { + "$ref": "#/components/schemas/TransactionType" + } + }, + "required": [ + "privateKeyId", + "unsignedTransaction", + "type" + ] + }, + "SignTransactionIntentV2": { + "type": "object", + "properties": { + "signWith": { + "type": "string", + "description": "A Wallet account address, Private Key address, or Private Key identifier." + }, + "unsignedTransaction": { + "type": "string", + "description": "Raw unsigned transaction to be signed" + }, + "type": { + "$ref": "#/components/schemas/TransactionType" + } + }, + "required": [ + "signWith", + "unsignedTransaction", + "type" + ] + }, + "SignTransactionRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_SIGN_TRANSACTION_V2" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/SignTransactionIntentV2" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "SignTransactionResult": { + "type": "object", + "properties": { + "signedTransaction": { + "type": "string" + } + }, + "required": [ + "signedTransaction" + ] + }, + "SignupUsage": { + "type": "object", + "properties": { + "email": { + "type": "string", + "nullable": true + }, + "phoneNumber": { + "type": "string", + "nullable": true + }, + "apiKeys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ApiKeyParamsV2" + } + }, + "authenticators": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AuthenticatorParamsV2" + } + }, + "oauthProviders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OauthProviderParams" + } + } + } + }, + "SignupUsageV2": { + "type": "object", + "properties": { + "email": { + "type": "string", + "nullable": true + }, + "phoneNumber": { + "type": "string", + "nullable": true + }, + "apiKeys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ApiKeyParamsV2" + } + }, + "authenticators": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AuthenticatorParamsV2" + } + }, + "oauthProviders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OauthProviderParamsV2" + } + } + } + }, + "SimpleClientExtensionResults": { + "type": "object", + "properties": { + "appid": { + "type": "boolean", + "nullable": true + }, + "appidExclude": { + "type": "boolean", + "nullable": true + }, + "credProps": { + "$ref": "#/components/schemas/CredPropsAuthenticationExtensionsClientOutputs" + } + } + }, + "SmartContractInterfaceType": { + "type": "string", + "enum": [ + "SMART_CONTRACT_INTERFACE_TYPE_ETHEREUM", + "SMART_CONTRACT_INTERFACE_TYPE_SOLANA" + ] + }, + "SmsCustomizationParams": { + "type": "object", + "properties": { + "template": { + "type": "string", + "description": "Template containing references to .OtpCode i.e Your OTP is {{.OtpCode}}", + "nullable": true + } + } + }, + "SolSendTransactionIntent": { + "type": "object", + "properties": { + "unsignedTransaction": { + "type": "string", + "description": "Base64-encoded serialized unsigned Solana transaction" + }, + "signWith": { + "type": "string", + "description": "A wallet or private key address to sign with. This does not support private key IDs." + }, + "sponsor": { + "type": "boolean", + "description": "Whether to sponsor this transaction via Gas Station.", + "nullable": true + }, + "caip2": { + "type": "string", + "enum": [ + "solana:mainnet", + "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", + "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d", + "solana:devnet", + "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1", + "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1wcaWoxPkrZBG" + ], + "description": "CAIP-2 chain ID (e.g., 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' for Solana mainnet). Human-readable Solana aliases ('solana:mainnet', 'solana:devnet') are also accepted and normalized to canonical CAIP-2 values." + }, + "recentBlockhash": { + "type": "string", + "description": "user-provided blockhash for replay protection / deadline control. If omitted and sponsor=true, we fetch a fresh blockhash during execution", + "nullable": true + } + }, + "required": [ + "unsignedTransaction", + "signWith", + "caip2" + ] + }, + "SolSendTransactionIntentV2": { + "type": "object", + "properties": { + "unsignedTransaction": { + "type": "string", + "description": "Hex-encoded serialized unsigned Solana transaction (full wire format with zeroed signature placeholders)" + }, + "signWiths": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Ordered Solana signer addresses Turnkey signs with. Between 1 and 16 signers. For sponsored transactions this must list every required signer of the transaction in transaction order." + }, + "sponsor": { + "type": "boolean", + "description": "Whether to sponsor this transaction via Gas Station.", + "nullable": true + }, + "caip2": { + "type": "string", + "enum": [ + "solana:mainnet", + "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", + "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d", + "solana:devnet", + "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1", + "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1wcaWoxPkrZBG" + ], + "description": "CAIP-2 chain ID (e.g., 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' for Solana mainnet). Human-readable Solana aliases ('solana:mainnet', 'solana:devnet') are also accepted and normalized to canonical CAIP-2 values." + }, + "recentBlockhash": { + "type": "string", + "description": "User-provided blockhash for replay protection / deadline control. If provided, it is used as-is, including for sponsored transactions (the transaction is only broadcastable while the blockhash is current). If omitted and sponsor=true, a fresh blockhash is fetched during execution.", + "nullable": true + } + }, + "required": [ + "unsignedTransaction", + "signWiths", + "caip2" + ] + }, + "SolSendTransactionRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_SOL_SEND_TRANSACTION_V2" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/SolSendTransactionIntentV2" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "SolSendTransactionResult": { + "type": "object", + "properties": { + "sendTransactionStatusId": { + "type": "string", + "description": "The send_transaction_status ID associated with the transaction submission" + } + }, + "required": [ + "sendTransactionStatusId" + ] + }, + "SolSendTransactionResultV2": { + "type": "object", + "properties": { + "sendTransactionStatusId": { + "type": "string", + "description": "The send_transaction_status ID associated with the transaction submission" + } + }, + "required": [ + "sendTransactionStatusId" + ] + }, + "SolTransactionHistoryItem": { + "type": "object", + "properties": { + "signature": { + "type": "string", + "description": "Solana transaction signature." + }, + "block": { + "$ref": "#/components/schemas/TransactionHistoryBlock" + }, + "status": { + "type": "string", + "enum": [ + "CONFIRMED", + "FINALIZED" + ], + "description": "Transaction confirmation status." + }, + "origin": { + "type": "string", + "description": "Origin of the transaction. Examples include TURNKEY." + }, + "feePayer": { + "type": "string", + "description": "Address that paid the Solana transaction fee. This is the first signer in the transaction message." + }, + "signers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SolTransactionHistorySigner" + }, + "description": "Addresses that signed the Solana transaction, in message order." + }, + "fee": { + "$ref": "#/components/schemas/TransactionHistoryFee" + }, + "transfers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TransactionHistoryTransfer" + }, + "description": "Asset transfers associated with the transaction." + }, + "turnkey": { + "$ref": "#/components/schemas/TransactionHistoryTurnkey" + } + }, + "required": [ + "signature", + "block", + "status", + "origin", + "feePayer", + "signers", + "fee", + "transfers" + ] + }, + "SolTransactionHistorySigner": { + "type": "object", + "properties": { + "address": { + "type": "string", + "description": "Address of the Solana transaction signer." + }, + "writable": { + "type": "boolean", + "description": "Whether the signer account was writable in the Solana transaction message." + } + }, + "required": [ + "address", + "writable" + ] + }, + "SolanaConfig": { + "type": "object", + "properties": { + "rentPrefundEnabled": { + "type": "boolean", + "description": "Whether Solana rent prefunding is enabled for the organization. When omitted, the existing rent-prefund state is left unchanged.", + "nullable": true + } + } + }, + "SolanaFailureDetails": { + "type": "object", + "properties": { + "source": { + "type": "string", + "description": "Where the Solana failure occurred, such as simulation or preflight." + }, + "rpcCode": { + "type": "integer", + "format": "int32", + "description": "The Solana JSON-RPC error code, if available.", + "nullable": true + }, + "rpcMessage": { + "type": "string", + "description": "The Solana JSON-RPC error message, if available.", + "nullable": true + }, + "transactionErrorJson": { + "type": "string", + "description": "The raw Solana transaction error object serialized as JSON, if available.", + "nullable": true + }, + "logs": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Program logs returned by Solana simulation or preflight, if available." + }, + "unitsConsumed": { + "type": "string", + "format": "uint64", + "description": "Compute units consumed during simulation or preflight, if available.", + "nullable": true + }, + "innerInstructionsJson": { + "type": "string", + "description": "The raw Solana inner instructions payload serialized as JSON, if available.", + "nullable": true + } + } + }, + "SolanaSendTransactionStatus": { + "type": "object", + "properties": { + "signature": { + "type": "string", + "description": "The Solana transaction signature, if available.", + "nullable": true + } + } + }, + "SparkClaimLeaf": { + "type": "object", + "properties": { + "leafId": { + "type": "string", + "description": "Leaf identifier (UUID)." + }, + "ciphertext": { + "type": "string", + "description": "ECIES ciphertext (hex-encoded) containing the inbound transfer secret. Decrypted inside the enclave using the wallet's Identity key." + }, + "senderSignature": { + "type": "string", + "description": "Hex-encoded 64-byte compact ECDSA signature binding (leaf_id, transfer_id, ciphertext) to the sender's identity key. Verified inside the enclave before decryption." + } + }, + "required": [ + "leafId", + "ciphertext", + "senderSignature" + ] + }, + "SparkClaimPackage": { + "type": "object", + "properties": { + "leaves": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SparkClaimLeaf" + }, + "description": "Leaves being claimed." + }, + "threshold": { + "type": "integer", + "format": "int64", + "description": "Shamir threshold for reconstructing the per-leaf claim secret." + }, + "operatorRecipients": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SparkOperatorRecipient" + }, + "description": "Operators that will receive Shamir shares." + }, + "transferId": { + "type": "string", + "description": "Spark transfer identifier (UUID). Used together with each leaf's sender_signature to verify the sender bound this ciphertext to this transfer." + }, + "senderIdentityPublicKey": { + "type": "string", + "description": "Sender's compressed secp256k1 identity public key (hex-encoded, 33 bytes). Used to verify the per-leaf sender_signature fields." + } + }, + "required": [ + "leaves", + "threshold", + "operatorRecipients", + "transferId", + "senderIdentityPublicKey" + ] + }, + "SparkClaimTransferIntent": { + "type": "object", + "properties": { + "signWith": { + "type": "string", + "description": "A Spark wallet account address identifying the wallet." + }, + "claim": { + "$ref": "#/components/schemas/SparkClaimPackage" + } + }, + "required": [ + "signWith", + "claim" + ] + }, + "SparkClaimTransferRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_SPARK_CLAIM_TRANSFER" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/SparkClaimTransferIntent" + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "SparkClaimTransferResult": { + "type": "object", + "properties": { + "operatorPackages": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SparkEncryptedOperatorPackage" + }, + "description": "Per-operator ECIES-encrypted packages." + }, + "newLeafPublicKeys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SparkLeafPublicKey" + }, + "description": "Newly-derived SigningLeaf public keys, one per leaf, in input order." + } + }, + "required": [ + "operatorPackages", + "newLeafPublicKeys" + ] + }, + "SparkDepositDerivation": { + "type": "object" + }, + "SparkEncryptedOperatorPackage": { + "type": "object", + "properties": { + "operatorId": { + "type": "string", + "description": "Spark operator identifier (UUID)." + }, + "encryptedPackage": { + "type": "string", + "description": "ECIES ciphertext (hex-encoded) opaque to Turnkey after emission." + } + }, + "required": [ + "operatorId", + "encryptedPackage" + ] + }, + "SparkFrostCommitment": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "FROST participant identifier, hex-encoded (32-byte scalar)." + }, + "hiding": { + "type": "string", + "description": "Hiding commitment D, hex-encoded compressed secp256k1 point." + }, + "binding": { + "type": "string", + "description": "Binding commitment E, hex-encoded compressed secp256k1 point." + } + }, + "required": [ + "id", + "hiding", + "binding" + ] + }, + "SparkHtlcPreimageDerivation": { + "type": "object" + }, + "SparkIdentityDerivation": { + "type": "object" + }, + "SparkKeyDerivation": { + "type": "object", + "properties": { + "identity": { + "$ref": "#/components/schemas/SparkIdentityDerivation" + }, + "signingLeaf": { + "$ref": "#/components/schemas/SparkSigningLeafDerivation" + }, + "deposit": { + "$ref": "#/components/schemas/SparkDepositDerivation" + }, + "staticDeposit": { + "$ref": "#/components/schemas/SparkStaticDepositDerivation" + }, + "htlcPreimage": { + "$ref": "#/components/schemas/SparkHtlcPreimageDerivation" + } + } + }, + "SparkLeafPublicKey": { + "type": "object", + "properties": { + "leafId": { + "type": "string", + "description": "The Spark leaf_id this public key was derived for." + }, + "publicKey": { + "type": "string", + "description": "Hex-encoded compressed secp256k1 point (33 bytes) for the SigningLeaf derivation at leaf_id." + } + }, + "required": [ + "leafId", + "publicKey" + ] + }, + "SparkLightningReceivePackage": { + "type": "object", + "properties": { + "threshold": { + "type": "integer", + "format": "int64", + "description": "Feldman VSS threshold for reconstructing the preimage." + }, + "operatorRecipients": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SparkOperatorRecipient" + }, + "description": "Operators that will receive Feldman shares of the preimage. Order must match the operators' numeric IDs in the Spark operator config - share index is the 1-based position in this list." + } + }, + "required": [ + "threshold", + "operatorRecipients" + ] + }, + "SparkOperatorRecipient": { + "type": "object", + "properties": { + "operatorId": { + "type": "string", + "description": "Spark operator identifier (UUID)." + }, + "encryptionPublicKey": { + "type": "string", + "description": "Operator's ECIES encryption pubkey (hex-encoded compressed secp256k1 point)." + } + }, + "required": [ + "operatorId", + "encryptionPublicKey" + ] + }, + "SparkPartialSignature": { + "type": "object", + "properties": { + "signatureShare": { + "type": "string", + "description": "Hex-encoded FROST partial signature." + }, + "hiding": { + "type": "string", + "description": "Turnkey's hiding commitment D (hex-encoded compressed secp256k1 point). Forward to the Spark Operator." + }, + "binding": { + "type": "string", + "description": "Turnkey's binding commitment E (hex-encoded compressed secp256k1 point). Forward to the Spark Operator." + } + }, + "required": [ + "signatureShare", + "hiding", + "binding" + ] + }, + "SparkPrepareLightningReceiveIntent": { + "type": "object", + "properties": { + "signWith": { + "type": "string", + "description": "A Spark wallet account address identifying the wallet." + }, + "lightningReceive": { + "$ref": "#/components/schemas/SparkLightningReceivePackage" + } + }, + "required": [ + "signWith", + "lightningReceive" + ] + }, + "SparkPrepareLightningReceiveRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_SPARK_PREPARE_LIGHTNING_RECEIVE" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/SparkPrepareLightningReceiveIntent" + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "SparkPrepareLightningReceiveResult": { + "type": "object", + "properties": { + "operatorPackages": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SparkEncryptedOperatorPackage" + }, + "description": "Per-operator ECIES-encrypted Feldman share packages." + }, + "paymentHash": { + "type": "string", + "description": "Hex-encoded SHA256(preimage). Forward to the Lightning node." + } + }, + "required": [ + "operatorPackages", + "paymentHash" + ] + }, + "SparkPrepareTransferIntent": { + "type": "object", + "properties": { + "signWith": { + "type": "string", + "description": "A Spark wallet account address identifying the wallet." + }, + "transfer": { + "$ref": "#/components/schemas/SparkTransferPackage" + } + }, + "required": [ + "signWith", + "transfer" + ] + }, + "SparkPrepareTransferRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_SPARK_PREPARE_TRANSFER" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/SparkPrepareTransferIntent" + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "SparkPrepareTransferResult": { + "type": "object", + "properties": { + "operatorPackages": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SparkEncryptedOperatorPackage" + }, + "description": "Per-operator ECIES-encrypted packages." + }, + "transferUserSignature": { + "type": "string", + "description": "Hex-encoded ECDSA-DER signature of the TransferPackage signing payload, signed with the wallet's IDENTITY key." + }, + "newLeafPublicKeys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SparkLeafPublicKey" + }, + "description": "Newly-derived SigningLeaf public keys, one per leaf, in input order." + } + }, + "required": [ + "operatorPackages", + "transferUserSignature", + "newLeafPublicKeys" + ] + }, + "SparkSignFrostIntent": { + "type": "object", + "properties": { + "signWith": { + "type": "string", + "description": "A Spark wallet account address identifying the wallet to sign with." + }, + "signatures": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SparkSignatureRequest" + }, + "description": "Batched sign requests. Each produces a partial signature plus Turnkey's public commitments." + } + }, + "required": [ + "signWith", + "signatures" + ] + }, + "SparkSignFrostRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_SPARK_SIGN_FROST" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/SparkSignFrostIntent" + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "SparkSignFrostResult": { + "type": "object", + "properties": { + "signatures": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SparkPartialSignature" + }, + "description": "Partial signatures plus Turnkey commitments, one per request, in order." + } + }, + "required": [ + "signatures" + ] + }, + "SparkSignatureRequest": { + "type": "object", + "properties": { + "derivation": { + "$ref": "#/components/schemas/SparkKeyDerivation" + }, + "message": { + "type": "string", + "description": "Hex-encoded 32-byte sighash to sign." + }, + "verifyingKey": { + "type": "string", + "description": "Aggregate group verifying key (hex-encoded compressed secp256k1 point), computed as P_ops + P_user. Bound into the nonce HMAC." + }, + "operatorCommitments": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SparkFrostCommitment" + }, + "description": "Commitments for every non-Turnkey participant. MUST NOT include an entry under Turnkey's identifier. Bound into the nonce HMAC." + }, + "adaptorPublicKey": { + "type": "string", + "description": "Optional adaptor point T (hex-encoded 33-byte compressed secp256k1 pubkey). When set, Turnkey produces a Schnorr adaptor pre-signature with the FROST challenge bound to `R+T` (where `R` is the aggregate group nonce commitment from FROST). The party holding the discrete log `t` completes the pre-sig to a valid BIP-340 signature by adding `t` (or `-t`, for parity) to the signature scalar `s`. This is primarily used by Spark leaves-swap and other adaptor-bound flows; absent or empty leads to plain FROST signing (the typical case).", + "nullable": true + } + }, + "required": [ + "derivation", + "message", + "verifyingKey", + "operatorCommitments" + ] + }, + "SparkSigningLeafDerivation": { + "type": "object", + "properties": { + "leafId": { + "type": "string", + "description": "Unique identifier for the Spark signing leaf." + } + }, + "required": [ + "leafId" + ] + }, + "SparkStaticDepositDerivation": { + "type": "object", + "properties": { + "index": { + "type": "integer", + "format": "int64", + "description": "Index used to derive the static deposit key." + } + }, + "required": [ + "index" + ] + }, + "SparkTransferLeaf": { + "type": "object", + "properties": { + "leafId": { + "type": "string", + "description": "Leaf identifier (UUID)." + }, + "oldLeafDerivation": { + "$ref": "#/components/schemas/SparkKeyDerivation" + }, + "newLeafDerivation": { + "$ref": "#/components/schemas/SparkKeyDerivation" + }, + "refundSignature": { + "type": "string", + "description": "Client-produced CPFP refund signature (hex-encoded), passed through verbatim into the per-operator SendLeafKeyTweak. Empty omits the field from the operator package.", + "nullable": true + }, + "directRefundSignature": { + "type": "string", + "description": "Client-produced direct refund signature (hex-encoded). Passed through verbatim.", + "nullable": true + }, + "directFromCpfpRefundSignature": { + "type": "string", + "description": "Client-produced direct-from-CPFP refund signature (hex-encoded). Passed through verbatim.", + "nullable": true + } + }, + "required": [ + "leafId", + "oldLeafDerivation", + "newLeafDerivation" + ] + }, + "SparkTransferPackage": { + "type": "object", + "properties": { + "transferId": { + "type": "string", + "description": "Spark transfer identifier (UUID)." + }, + "leaves": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SparkTransferLeaf" + }, + "description": "Leaves being transferred." + }, + "threshold": { + "type": "integer", + "format": "int64", + "description": "Feldman VSS threshold for reconstructing the per-leaf tweak scalar." + }, + "operatorRecipients": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SparkOperatorRecipient" + }, + "description": "Operators that will receive Feldman shares of the per-leaf tweak. Order must match the operators' numeric IDs in the Spark operator config - share index is the 1-based position in this list." + }, + "receiverPublicKey": { + "type": "string", + "description": "Recipient's identity pubkey (hex-encoded compressed secp256k1 point). Each leaf's new_priv is ECIES-encrypted to this key and embedded in the per-operator package for claim-time delivery." + } + }, + "required": [ + "transferId", + "leaves", + "threshold", + "operatorRecipients", + "receiverPublicKey" + ] + }, + "StampLoginIntent": { + "type": "object", + "properties": { + "publicKey": { + "type": "string", + "description": "Client-side public key generated by the user, which will be conditionally added to org data based on the passkey stamp associated with this request" + }, + "expirationSeconds": { + "type": "string", + "description": "Expiration window (in seconds) indicating how long the Session is valid for. If not provided, a default of 15 minutes will be used.", + "nullable": true + }, + "invalidateExisting": { + "type": "boolean", + "description": "Invalidate all other previously generated Login API keys", + "nullable": true + }, + "sessionProfileId": { + "type": "string", + "description": "Optional session profile ID to specify which Session Profile to use for this login. If not provided, the default read/write session will be used.", + "nullable": true + } + }, + "required": [ + "publicKey" + ] + }, + "StampLoginRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_STAMP_LOGIN" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/StampLoginIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "StampLoginResult": { + "type": "object", + "properties": { + "session": { + "type": "string", + "description": "Signed JWT containing an expiry, public key, session type, user id, and organization id" + } + }, + "required": [ + "session" + ] + }, + "Status": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Any" + } + } + } + }, + "SwapError": { + "type": "object", + "properties": { + "reason": { + "type": "string", + "description": "Stable machine-readable failure reason. One of ORIGIN_TRANSACTION_FAILED or PROVIDER_FILL_FAILED." + }, + "message": { + "type": "string", + "description": "Human-readable description of the swap failure." + }, + "originTxError": { + "$ref": "#/components/schemas/TxError" + } + }, + "required": [ + "reason", + "message" + ] + }, + "SwapQuote": { + "type": "object", + "properties": { + "quoteId": { + "type": "string", + "description": "Identifier for this provider quote. Pass this value to execute_swap_v2 to bind execution to this exact quote. The signer is derived from the quote; clients do not resupply sign_with on execute." + }, + "provider": { + "type": "string", + "description": "Swap provider that produced this quote." + }, + "outputAmount": { + "type": "string", + "description": "Estimated base-unit amount of the output asset." + }, + "minOutputAmount": { + "type": "string", + "description": "Minimum acceptable base-unit amount of the output asset after slippage." + }, + "expiresAt": { + "type": "string", + "description": "Quote expiration as a millisecond epoch string." + }, + "slippageBps": { + "type": "string", + "description": "Provider-neutral maximum allowed slippage in basis points, echoed from the quote request when set.", + "nullable": true + }, + "clientFeeBps": { + "type": "string", + "description": "Client fee in basis points applied for this pair. Informational only; already reflected in output_amount and min_output_amount." + }, + "estimatedTimeSeconds": { + "type": "string", + "description": "Provider-estimated completion time in seconds, when available.", + "nullable": true + } + }, + "required": [ + "quoteId", + "provider", + "outputAmount", + "minOutputAmount", + "expiresAt", + "clientFeeBps" + ] + }, + "SwapRefund": { + "type": "object", + "properties": { + "asset": { + "type": "string", + "description": "CAIP-19 asset returned to the user after a failed swap." + }, + "amount": { + "type": "string", + "description": "Base-unit amount of the refunded asset." + }, + "txHash": { + "type": "string", + "description": "Transaction that delivered the refunded funds, when applicable.", + "nullable": true + } + }, + "required": [ + "asset", + "amount" + ] + }, + "TagType": { + "type": "string", + "enum": [ + "TAG_TYPE_USER", + "TAG_TYPE_PRIVATE_KEY" + ] + }, + "TokenUsage": { + "type": "object", + "properties": { + "type": { + "$ref": "#/components/schemas/UsageType" + }, + "tokenId": { + "type": "string", + "description": "Unique identifier for the verification token" + }, + "signup": { + "$ref": "#/components/schemas/SignupUsage" + }, + "login": { + "$ref": "#/components/schemas/LoginUsage" + }, + "signupV2": { + "$ref": "#/components/schemas/SignupUsageV2" + } + }, + "required": [ + "type", + "tokenId" + ] + }, + "TransactionHistoryAsset": { + "type": "object", + "properties": { + "caip19": { + "type": "string", + "description": "The CAIP-19 asset identifier." + }, + "symbol": { + "type": "string", + "description": "The asset symbol." + }, + "name": { + "type": "string", + "description": "The asset name." + }, + "decimals": { + "type": "integer", + "format": "int32", + "description": "The number of decimals this asset uses." + } + }, + "required": [ + "caip19", + "symbol", + "name", + "decimals" + ] + }, + "TransactionHistoryBlock": { + "type": "object", + "properties": { + "number": { + "type": "string", + "format": "int64", + "description": "Block number containing the transaction." + }, + "hash": { + "type": "string", + "description": "Block hash containing the transaction." + }, + "timestamp": { + "type": "string", + "description": "Block timestamp in RFC 3339 format." + } + }, + "required": [ + "number", + "hash", + "timestamp" + ] + }, + "TransactionHistoryDisplay": { + "type": "object", + "properties": { + "crypto": { + "type": "string", + "description": "Normalized crypto value for display purposes only. Do not do any arithmetic or calculations with these, as the results could be imprecise." + }, + "usd": { + "type": "string", + "description": "USD value for display purposes only. Do not do any arithmetic or calculations with these, as the results could be imprecise." + } + } + }, + "TransactionHistoryFee": { + "type": "object", + "properties": { + "amount": { + "type": "string", + "description": "Fee amount in atomic units." + }, + "caip19": { + "type": "string", + "description": "The CAIP-19 asset identifier." + } + }, + "required": [ + "amount", + "caip19" + ] + }, + "TransactionHistoryTransfer": { + "type": "object", + "properties": { + "direction": { + "type": "string", + "enum": [ + "IN", + "OUT" + ], + "description": "Transfer direction relative to the queried address." + }, + "asset": { + "$ref": "#/components/schemas/TransactionHistoryAsset" + }, + "amount": { + "type": "string", + "description": "Transfer amount in atomic units." + }, + "counterparty": { + "type": "string", + "description": "Counterparty address for the transfer." + }, + "display": { + "$ref": "#/components/schemas/TransactionHistoryDisplay" + } + }, + "required": [ + "direction", + "amount", + "counterparty" + ] + }, + "TransactionHistoryTurnkey": { + "type": "object", + "properties": { + "sponsored": { + "type": "boolean", + "description": "Whether the transaction fee was sponsored by Turnkey." + }, + "activityFingerprint": { + "type": "string", + "description": "Fingerprint of the Turnkey activity that submitted the transaction." + }, + "submittedAt": { + "type": "string", + "description": "Timestamp when Turnkey submitted the transaction, in RFC 3339 format." + } + }, + "required": [ + "sponsored" + ] + }, + "TransactionType": { + "type": "string", + "enum": [ + "TRANSACTION_TYPE_ETHEREUM", + "TRANSACTION_TYPE_SOLANA", + "TRANSACTION_TYPE_TRON", + "TRANSACTION_TYPE_BITCOIN", + "TRANSACTION_TYPE_TEMPO" + ] + }, + "TransportEncryptionSuite": { + "type": "string", + "enum": [ + "TRANSPORT_ENCRYPTION_SUITE_ENCLAVE_ENCRYPT_V1" + ] + }, + "TvcApp": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique Identifier for this TVC App." + }, + "organizationId": { + "type": "string", + "description": "Unique Identifier of the Organization for this TVC App" + }, + "name": { + "type": "string", + "description": "Name for this TVC App." + }, + "quorumPublicKey": { + "type": "string", + "description": "Public key for the Quorum Key associated with this TVC App" + }, + "manifestSet": { + "$ref": "#/components/schemas/TvcOperatorSet" + }, + "shareSet": { + "$ref": "#/components/schemas/TvcOperatorSet" + }, + "enableEgress": { + "type": "boolean", + "description": "Whether or not this TVC App has network egress enabled." + }, + "createdAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + }, + "liveDeploymentId": { + "type": "string", + "description": "The deployment currently designated to receive traffic. Null if no deployment for this app is deployed.", + "nullable": true + }, + "publicDomain": { + "type": "string", + "description": "The public domain for ingress to this TVC App (in the format \"app-.turnkey.cloud\")." + }, + "enableDebugModeDeployments": { + "type": "boolean", + "description": "Whether this app permits debug-mode deployments. Set at app creation via CreateTvcAppIntent.enable_debug_mode_deployments and never updated thereafter. Debug-mode deployments expose logs and emit zero'd attestation PCRs, so remote attestation cannot succeed. The app's quorum key is therefore considered permanently insecure once enabled — a new app with a fresh quorum key must be created to return to a secure posture." + } + }, + "required": [ + "id", + "organizationId", + "name", + "quorumPublicKey", + "manifestSet", + "shareSet", + "enableEgress", + "createdAt", + "updatedAt", + "publicDomain", + "enableDebugModeDeployments" + ] + }, + "TvcContainerSpec": { + "type": "object", + "properties": { + "containerUrl": { + "type": "string", + "description": "The URL for this container image." + }, + "path": { + "type": "string", + "description": "The path (in-container) to the executable binary." + }, + "args": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The arguments to pass to the executable." + }, + "hasPullSecret": { + "type": "boolean", + "description": "Whether or not this container requires a pull secret to access." + }, + "healthCheckType": { + "$ref": "#/components/schemas/TvcHealthCheckType" + }, + "healthCheckPort": { + "type": "integer", + "format": "int64", + "description": "The port to use for health checks against this executable." + }, + "publicIngressPort": { + "type": "integer", + "format": "int64", + "description": "The port to use for public ingress to this executable." + } + }, + "required": [ + "containerUrl", + "path", + "args", + "hasPullSecret", + "healthCheckType", + "healthCheckPort", + "publicIngressPort" + ] + }, + "TvcDeployment": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique Identifier for this TVC Deployment." + }, + "organizationId": { + "type": "string", + "description": "Unique Identifier of the Organization for this TVC Deployment" + }, + "appId": { + "type": "string", + "description": "Unique Identifier of the TVC App for this deployment" + }, + "manifestSet": { + "$ref": "#/components/schemas/TvcOperatorSet" + }, + "shareSet": { + "$ref": "#/components/schemas/TvcOperatorSet" + }, + "manifest": { + "$ref": "#/components/schemas/TvcManifest" + }, + "manifestApprovals": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TvcOperatorApproval" + }, + "description": "List of operator approvals for this manifest" + }, + "qosVersion": { + "type": "string", + "description": "QOS Version used for this deployment" + }, + "pivotContainer": { + "$ref": "#/components/schemas/TvcContainerSpec" + }, + "createdAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + }, + "delete": { + "type": "boolean", + "description": "Whether or not the user wants this deployment deleted from the cluster." + }, + "debugMode": { + "type": "boolean", + "description": "Whether this deployment is running in debug mode. Debug-mode deployments expose enclave logs and cannot be remotely attested." + } + }, + "required": [ + "id", + "organizationId", + "appId", + "manifestSet", + "shareSet", + "manifest", + "manifestApprovals", + "qosVersion", + "pivotContainer", + "createdAt", + "updatedAt", + "delete", + "debugMode" + ] + }, + "TvcDeploymentDebugLogEntry": { + "type": "object", + "properties": { + "line": { + "$ref": "#/components/schemas/LogLine" + }, + "replicaLabel": { + "type": "string", + "description": "Public replica label that produced this log line, for example 'replica 2/3'." + } + }, + "required": [ + "line", + "replicaLabel" + ] + }, + "TvcHealthCheckType": { + "type": "string", + "enum": [ + "TVC_HEALTH_CHECK_TYPE_HTTP", + "TVC_HEALTH_CHECK_TYPE_GRPC" + ] + }, + "TvcManifest": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique Identifier for this TVC Manifest." + }, + "manifest": { + "type": "string", + "format": "byte", + "description": "The manifest content (raw UTF-8 JSON bytes)" + }, + "createdAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + } + }, + "required": [ + "id", + "manifest", + "createdAt", + "updatedAt" + ] + }, + "TvcManifestApproval": { + "type": "object", + "properties": { + "operatorId": { + "type": "string", + "description": "Unique identifier of the operator providing this approval" + }, + "signature": { + "type": "string", + "description": "Signature from the operator approving the manifest" + } + }, + "required": [ + "operatorId", + "signature" + ] + }, + "TvcOperator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique Identifier for this TVC Operator." + }, + "name": { + "type": "string", + "description": "Name of this TVC Operator." + }, + "publicKey": { + "type": "string", + "description": "Public key for this TVC Operator." + }, + "createdAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + } + }, + "required": [ + "id", + "name", + "publicKey", + "createdAt", + "updatedAt" + ] + }, + "TvcOperatorApproval": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique ID for this approval" + }, + "manifestId": { + "type": "string", + "description": "Unique Identifier of the TVC Manifest being approved" + }, + "operator": { + "$ref": "#/components/schemas/TvcOperator" + }, + "approval": { + "type": "string", + "format": "byte", + "description": "Signature of the operator over the deployment manifest" + }, + "createdAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + } + }, + "required": [ + "id", + "manifestId", + "operator", + "approval", + "createdAt", + "updatedAt" + ] + }, + "TvcOperatorParams": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The name for this new operator" + }, + "publicKey": { + "type": "string", + "description": "Public key for this operator" + } + }, + "required": [ + "name", + "publicKey" + ] + }, + "TvcOperatorSet": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique Identifier for this TVC Operator Set." + }, + "name": { + "type": "string", + "description": "Name of this TVC Operator Set." + }, + "organizationId": { + "type": "string", + "description": "Unique Identifier of the Organization for this TVC Operator Set" + }, + "operators": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TvcOperator" + }, + "description": "List of TVC Operators in this set" + }, + "threshold": { + "type": "integer", + "format": "int64", + "description": "Threshold number of operators required for quorum." + }, + "createdAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + } + }, + "required": [ + "id", + "name", + "organizationId", + "operators", + "threshold", + "createdAt", + "updatedAt" + ] + }, + "TvcOperatorSetParams": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Short description for this new operator set" + }, + "newOperators": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TvcOperatorParams" + }, + "description": "Operators to create as part of this new operator set" + }, + "existingOperatorIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Existing operators to use as part of this new operator set" + }, + "threshold": { + "type": "integer", + "format": "int64", + "description": "The threshold of operators needed to reach consensus in this new Operator Set" + } + }, + "required": [ + "name", + "threshold" + ] + }, + "TxError": { + "type": "object", + "properties": { + "message": { + "type": "string", + "description": "Human-readable error message describing what went wrong." + }, + "revertChain": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RevertChainEntry" + }, + "description": "Chain of revert errors from nested contract calls, ordered from outermost to innermost." + }, + "solana": { + "$ref": "#/components/schemas/SolanaFailureDetails" + }, + "eth": { + "$ref": "#/components/schemas/EthFailureDetails" + } + } + }, + "UnknownRevertError": { + "type": "object", + "properties": { + "selector": { + "type": "string", + "description": "The 4-byte error selector, if available.", + "nullable": true + }, + "data": { + "type": "string", + "description": "The raw error data, hex-encoded.", + "nullable": true + } + } + }, + "UpdateAllowedOriginsIntent": { + "type": "object", + "properties": { + "allowedOrigins": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Additional origins requests are allowed from besides Turnkey origins" + } + }, + "required": [ + "allowedOrigins" + ] + }, + "UpdateAllowedOriginsResult": { + "type": "object" + }, + "UpdateAuthProxyConfigIntent": { + "type": "object", + "properties": { + "allowedOrigins": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Updated list of allowed origins for CORS." + }, + "allowedAuthMethods": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Updated list of allowed proxy authentication methods." + }, + "sendFromEmailAddress": { + "type": "string", + "description": "Custom 'from' address for auth-related emails.", + "nullable": true + }, + "replyToEmailAddress": { + "type": "string", + "description": "Custom reply-to address for auth-related emails.", + "nullable": true + }, + "emailAuthTemplateId": { + "type": "string", + "description": "Template ID for email-auth messages.", + "nullable": true + }, + "otpTemplateId": { + "type": "string", + "description": "Template ID for OTP SMS messages.", + "nullable": true + }, + "emailCustomizationParams": { + "$ref": "#/components/schemas/EmailCustomizationParams" + }, + "smsCustomizationParams": { + "$ref": "#/components/schemas/SmsCustomizationParams" + }, + "walletKitSettings": { + "$ref": "#/components/schemas/WalletKitSettingsParams" + }, + "otpExpirationSeconds": { + "type": "integer", + "format": "int32", + "description": "OTP code lifetime in seconds.", + "nullable": true + }, + "verificationTokenExpirationSeconds": { + "type": "integer", + "format": "int32", + "description": "Verification-token lifetime in seconds.", + "nullable": true + }, + "sessionExpirationSeconds": { + "type": "integer", + "format": "int32", + "description": "Session lifetime in seconds.", + "nullable": true + }, + "otpAlphanumeric": { + "type": "boolean", + "description": "Enable alphanumeric OTP codes.", + "nullable": true + }, + "otpLength": { + "type": "integer", + "format": "int32", + "description": "Desired OTP code length (6–9).", + "nullable": true + }, + "sendFromEmailSenderName": { + "type": "string", + "description": "Custom 'from' email sender for auth-related emails.", + "nullable": true + }, + "verificationTokenRequiredForGetAccountPii": { + "type": "boolean", + "description": "Verification token required for get account with PII (email/phone number). Default false.", + "nullable": true + }, + "socialLinkingClientIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Whitelisted OAuth client IDs for social account linking. When a user authenticates via a social provider with an email matching an existing account, the accounts will be linked if the client ID is in this list and the issuer is considered a trusted provider." + }, + "captchaEnabled": { + "type": "boolean", + "description": "Whether captcha verification is required on sign up & otp init.", + "nullable": true + } + } + }, + "UpdateAuthProxyConfigResult": { + "type": "object", + "properties": { + "configId": { + "type": "string", + "description": "Unique identifier for a given User. (representing the turnkey signer user id)" + } + } + }, + "UpdateFiatOnRampCredentialIntent": { + "type": "object", + "properties": { + "fiatOnrampCredentialId": { + "type": "string", + "description": "The ID of the fiat on-ramp credential to update" + }, + "onrampProvider": { + "$ref": "#/components/schemas/FiatOnRampProvider" + }, + "projectId": { + "type": "string", + "description": "Project ID for the on-ramp provider. Some providers, like Coinbase, require this additional identifier.", + "nullable": true + }, + "publishableApiKey": { + "type": "string", + "description": "Publishable API key for the on-ramp provider" + }, + "encryptedSecretApiKey": { + "type": "string", + "description": "Secret API key for the on-ramp provider encrypted to our on-ramp encryption public key" + }, + "encryptedPrivateApiKey": { + "type": "string", + "description": "Private API key for the on-ramp provider encrypted to our on-ramp encryption public key. Some providers, like Coinbase, require this additional key.", + "nullable": true + } + }, + "required": [ + "fiatOnrampCredentialId", + "onrampProvider", + "publishableApiKey", + "encryptedSecretApiKey" + ] + }, + "UpdateFiatOnRampCredentialRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_UPDATE_FIAT_ON_RAMP_CREDENTIAL" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/UpdateFiatOnRampCredentialIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "UpdateFiatOnRampCredentialResult": { + "type": "object", + "properties": { + "fiatOnRampCredentialId": { + "type": "string", + "description": "Unique identifier of the Fiat On-Ramp credential that was updated" + } + }, + "required": [ + "fiatOnRampCredentialId" + ] + }, + "UpdateMfaPolicyIntent": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "The ID of the User to update the MFA Policy for." + }, + "mfaPolicyId": { + "type": "string", + "description": "Unique identifier for a given MFA Policy." + }, + "mfaPolicyName": { + "type": "string", + "description": "Human-readable name for a Policy.", + "nullable": true + }, + "condition": { + "type": "string", + "description": "A condition expression that evaluates to true or false, determining when this MFA policy applies.", + "nullable": true + }, + "requiredAuthenticationMethods": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RequiredAuthenticationMethodParams" + }, + "description": "An ordered list of authentication requirements. Each requirement must be satisfied sequentially to complete MFA." + }, + "order": { + "type": "integer", + "format": "int64", + "description": "The order in which this MFA policy is evaluated, starting from 0, relative to other MFA policies. Lower order values are evaluated first.", + "nullable": true + }, + "notes": { + "type": "string", + "description": "Notes for an MFA Policy.", + "nullable": true + } + }, + "required": [ + "userId", + "mfaPolicyId" + ] + }, + "UpdateMfaPolicyRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_UPDATE_MFA_POLICY" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/UpdateMfaPolicyIntent" + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "UpdateMfaPolicyResult": { + "type": "object", + "properties": { + "mfaPolicyId": { + "type": "string", + "description": "Unique identifier for a given MFA Policy." + } + }, + "required": [ + "mfaPolicyId" + ] + }, + "UpdateOauth2CredentialIntent": { + "type": "object", + "properties": { + "oauth2CredentialId": { + "type": "string", + "description": "The ID of the OAuth 2.0 credential to update" + }, + "provider": { + "$ref": "#/components/schemas/Oauth2Provider" + }, + "clientId": { + "type": "string", + "description": "The Client ID issued by the OAuth 2.0 provider" + }, + "encryptedClientSecret": { + "type": "string", + "description": "The client secret issued by the OAuth 2.0 provider encrypted to the TLS Fetcher quorum key" + } + }, + "required": [ + "oauth2CredentialId", + "provider", + "clientId", + "encryptedClientSecret" + ] + }, + "UpdateOauth2CredentialRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_UPDATE_OAUTH2_CREDENTIAL" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/UpdateOauth2CredentialIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "UpdateOauth2CredentialResult": { + "type": "object", + "properties": { + "oauth2CredentialId": { + "type": "string", + "description": "Unique identifier of the OAuth 2.0 credential that was updated" + } + }, + "required": [ + "oauth2CredentialId" + ] + }, + "UpdateOrganizationNameIntent": { + "type": "object", + "properties": { + "organizationName": { + "type": "string", + "description": "New name for the Organization." + } + }, + "required": [ + "organizationName" + ] + }, + "UpdateOrganizationNameRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_UPDATE_ORGANIZATION_NAME" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/UpdateOrganizationNameIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "UpdateOrganizationNameResult": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for the Organization." + }, + "organizationName": { + "type": "string", + "description": "The updated organization name." + } + }, + "required": [ + "organizationId", + "organizationName" + ] + }, + "UpdatePolicyIntent": { + "type": "object", + "properties": { + "policyId": { + "type": "string", + "description": "Unique identifier for a given Policy." + }, + "policyName": { + "type": "string", + "description": "Human-readable name for a Policy.", + "nullable": true + }, + "policyEffect": { + "$ref": "#/components/schemas/Effect" + }, + "policyCondition": { + "type": "string", + "description": "The condition expression that triggers the Effect (optional).", + "nullable": true + }, + "policyConsensus": { + "type": "string", + "description": "The consensus expression that triggers the Effect (optional).", + "nullable": true + }, + "policyNotes": { + "type": "string", + "description": "Accompanying notes for a Policy (optional).", + "nullable": true + } + }, + "required": [ + "policyId" + ] + }, + "UpdatePolicyIntentV2": { + "type": "object", + "properties": { + "policyId": { + "type": "string", + "description": "Unique identifier for a given Policy." + }, + "policyName": { + "type": "string", + "description": "Human-readable name for a Policy.", + "nullable": true + }, + "policyEffect": { + "$ref": "#/components/schemas/Effect" + }, + "policyCondition": { + "type": "string", + "description": "The condition expression that triggers the Effect (optional).", + "nullable": true + }, + "policyConsensus": { + "type": "string", + "description": "The consensus expression that triggers the Effect (optional).", + "nullable": true + }, + "policyNotes": { + "type": "string", + "description": "Accompanying notes for a Policy (optional).", + "nullable": true + }, + "time": { + "type": "string", + "description": "The time expression that triggers the Effect (optional).", + "nullable": true + } + }, + "required": [ + "policyId" + ] + }, + "UpdatePolicyRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_UPDATE_POLICY_V2" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/UpdatePolicyIntentV2" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "UpdatePolicyResult": { + "type": "object", + "properties": { + "policyId": { + "type": "string", + "description": "Unique identifier for a given Policy." + } + }, + "required": [ + "policyId" + ] + }, + "UpdatePolicyResultV2": { + "type": "object", + "properties": { + "policyId": { + "type": "string", + "description": "Unique identifier for a given Policy." + } + }, + "required": [ + "policyId" + ] + }, + "UpdatePrivateKeyTagIntent": { + "type": "object", + "properties": { + "privateKeyTagId": { + "type": "string", + "description": "Unique identifier for a given Private Key Tag." + }, + "newPrivateKeyTagName": { + "type": "string", + "description": "The new, human-readable name for the tag with the given ID.", + "nullable": true + }, + "addPrivateKeyIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of Private Keys IDs to add this tag to." + }, + "removePrivateKeyIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of Private Key IDs to remove this tag from." + } + }, + "required": [ + "privateKeyTagId", + "addPrivateKeyIds", + "removePrivateKeyIds" + ] + }, + "UpdatePrivateKeyTagRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_UPDATE_PRIVATE_KEY_TAG" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/UpdatePrivateKeyTagIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "UpdatePrivateKeyTagResult": { + "type": "object", + "properties": { + "privateKeyTagId": { + "type": "string", + "description": "Unique identifier for a given Private Key Tag." + } + }, + "required": [ + "privateKeyTagId" + ] + }, + "UpdateRootQuorumIntent": { + "type": "object", + "properties": { + "threshold": { + "type": "integer", + "format": "int32", + "description": "The threshold of unique approvals to reach quorum." + }, + "userIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The unique identifiers of users who comprise the quorum set." + } + }, + "required": [ + "threshold", + "userIds" + ] + }, + "UpdateRootQuorumRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_UPDATE_ROOT_QUORUM" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/UpdateRootQuorumIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "UpdateRootQuorumResult": { + "type": "object" + }, + "UpdateTvcAppLiveDeploymentIntent": { + "type": "object", + "properties": { + "deploymentId": { + "type": "string", + "description": "The unique identifier of the TVC deployment to set as live for the app." + } + }, + "required": [ + "deploymentId" + ] + }, + "UpdateTvcAppLiveDeploymentRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_UPDATE_TVC_APP_LIVE_DEPLOYMENT" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/UpdateTvcAppLiveDeploymentIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "UpdateTvcAppLiveDeploymentResult": { + "type": "object" + }, + "UpdateUserEmailIntent": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "Unique identifier for a given User." + }, + "userEmail": { + "type": "string", + "description": "The user's email address. Setting this to an empty string will remove the user's email." + }, + "verificationToken": { + "type": "string", + "description": "Signed JWT containing a unique id, expiry, verification type, contact", + "nullable": true + } + }, + "required": [ + "userId", + "userEmail" + ] + }, + "UpdateUserEmailRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_UPDATE_USER_EMAIL" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/UpdateUserEmailIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "UpdateUserEmailResult": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "Unique identifier of the User whose email was updated." + } + }, + "required": [ + "userId" + ] + }, + "UpdateUserIntent": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "Unique identifier for a given User." + }, + "userName": { + "type": "string", + "description": "Human-readable name for a User.", + "nullable": true + }, + "userEmail": { + "type": "string", + "description": "The user's email address.", + "nullable": true + }, + "userTagIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "An updated list of User Tags to apply to this User. This field, if not needed, should be an empty array in your request body." + }, + "userPhoneNumber": { + "type": "string", + "description": "The user's phone number in E.164 format e.g. +13214567890", + "nullable": true + } + }, + "required": [ + "userId" + ] + }, + "UpdateUserNameIntent": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "Unique identifier for a given User." + }, + "userName": { + "type": "string", + "description": "Human-readable name for a User." + } + }, + "required": [ + "userId", + "userName" + ] + }, + "UpdateUserNameRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_UPDATE_USER_NAME" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/UpdateUserNameIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "UpdateUserNameResult": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "Unique identifier of the User whose name was updated." + } + }, + "required": [ + "userId" + ] + }, + "UpdateUserPhoneNumberIntent": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "Unique identifier for a given User." + }, + "userPhoneNumber": { + "type": "string", + "description": "The user's phone number in E.164 format e.g. +13214567890. Setting this to an empty string will remove the user's phone number." + }, + "verificationToken": { + "type": "string", + "description": "Signed JWT containing a unique id, expiry, verification type, contact", + "nullable": true + } + }, + "required": [ + "userId", + "userPhoneNumber" + ] + }, + "UpdateUserPhoneNumberRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_UPDATE_USER_PHONE_NUMBER" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/UpdateUserPhoneNumberIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "UpdateUserPhoneNumberResult": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "Unique identifier of the User whose phone number was updated." + } + }, + "required": [ + "userId" + ] + }, + "UpdateUserRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_UPDATE_USER" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/UpdateUserIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "UpdateUserResult": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "A User ID." + } + }, + "required": [ + "userId" + ] + }, + "UpdateUserTagIntent": { + "type": "object", + "properties": { + "userTagId": { + "type": "string", + "description": "Unique identifier for a given User Tag." + }, + "newUserTagName": { + "type": "string", + "description": "The new, human-readable name for the tag with the given ID.", + "nullable": true + }, + "addUserIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User IDs to add this tag to." + }, + "removeUserIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User IDs to remove this tag from." + } + }, + "required": [ + "userTagId", + "addUserIds", + "removeUserIds" + ] + }, + "UpdateUserTagRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_UPDATE_USER_TAG" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/UpdateUserTagIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "UpdateUserTagResult": { + "type": "object", + "properties": { + "userTagId": { + "type": "string", + "description": "Unique identifier for a given User Tag." + } + }, + "required": [ + "userTagId" + ] + }, + "UpdateWalletAccountNameIntent": { + "type": "object", + "properties": { + "walletAccountId": { + "type": "string", + "description": "Unique identifier for a given Wallet Account." + }, + "name": { + "type": "string", + "description": "Human-readable name for this Wallet Account." + } + }, + "required": [ + "walletAccountId", + "name" + ] + }, + "UpdateWalletAccountNameResult": { + "type": "object", + "properties": { + "walletAccountId": { + "type": "string", + "description": "Unique identifier for a given Wallet Account." + } + }, + "required": [ + "walletAccountId" + ] + }, + "UpdateWalletIntent": { + "type": "object", + "properties": { + "walletId": { + "type": "string", + "description": "Unique identifier for a given Wallet." + }, + "walletName": { + "type": "string", + "description": "Human-readable name for a Wallet." + } + }, + "required": [ + "walletId" + ] + }, + "UpdateWalletRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_UPDATE_WALLET" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/UpdateWalletIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "UpdateWalletResult": { + "type": "object", + "properties": { + "walletId": { + "type": "string", + "description": "A Wallet ID." + } + }, + "required": [ + "walletId" + ] + }, + "UpdateWebhookEndpointIntent": { + "type": "object", + "properties": { + "endpointId": { + "type": "string", + "description": "Unique identifier of the webhook endpoint to update." + }, + "url": { + "type": "string", + "description": "Updated destination URL for webhook delivery.", + "nullable": true + }, + "name": { + "type": "string", + "description": "Updated human-readable name for this webhook endpoint.", + "nullable": true + }, + "isActive": { + "type": "boolean", + "description": "Whether this webhook endpoint is active.", + "nullable": true + } + }, + "required": [ + "endpointId" + ] + }, + "UpdateWebhookEndpointRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_UPDATE_WEBHOOK_ENDPOINT" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/UpdateWebhookEndpointIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "UpdateWebhookEndpointResult": { + "type": "object", + "properties": { + "endpointId": { + "type": "string", + "description": "Unique identifier of the updated webhook endpoint." + }, + "webhookEndpoint": { + "$ref": "#/components/schemas/WebhookEndpointData" + } + }, + "required": [ + "endpointId", + "webhookEndpoint" + ] + }, + "UpsertGasUsageConfigIntent": { + "type": "object", + "properties": { + "orgWindowLimitUsd": { + "type": "string", + "description": "Gas sponsorship USD limit for the billing organization window." + }, + "subOrgWindowLimitUsd": { + "type": "string", + "description": "Gas sponsorship USD limit for sub-organizations under the billing organization." + }, + "windowDurationMinutes": { + "type": "string", + "description": "Rolling sponsorship window duration, expressed in minutes. This value can't exceed 30 days (43200 minutes)." + }, + "enabled": { + "type": "boolean", + "description": "Whether gas sponsorship is enabled for the organization.", + "nullable": true + }, + "solanaConfig": { + "$ref": "#/components/schemas/SolanaConfig" + } + }, + "required": [ + "orgWindowLimitUsd", + "subOrgWindowLimitUsd", + "windowDurationMinutes" + ] + }, + "UpsertGasUsageConfigResult": { + "type": "object", + "properties": { + "gasUsageConfigId": { + "type": "string", + "description": "Unique identifier for the gas usage configuration that was created or updated." + } + }, + "required": [ + "gasUsageConfigId" + ] + }, + "UpsertSwapConfigIntent": { + "type": "object", + "properties": { + "feeReceiverWalletAddress": { + "type": "string", + "nullable": true + }, + "feeBps": { + "type": "string", + "description": "Client fee in basis points applied to swaps; used for all pairs unless stable_fee_bps is set.", + "nullable": true + }, + "stableFeeBps": { + "type": "string", + "description": "Optional Enterprise-only override applied when both swap assets are stablecoins; falls back to fee_bps when unset. Non-Enterprise orgs may only set fee_bps.", + "nullable": true + } + } + }, + "UpsertSwapConfigRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_UPSERT_SWAP_CONFIG" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/UpsertSwapConfigIntent" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "UpsertSwapConfigResult": { + "type": "object", + "properties": { + "feeReceiverWalletAddress": { + "type": "string", + "nullable": true + }, + "feeBps": { + "type": "string", + "nullable": true + }, + "stableFeeBps": { + "type": "string", + "nullable": true + } + } + }, + "UsageType": { + "type": "string", + "enum": [ + "USAGE_TYPE_SIGNUP", + "USAGE_TYPE_LOGIN" + ] + }, + "User": { + "type": "object", + "properties": { + "userId": { + "type": "string", + "description": "Unique identifier for a given User." + }, + "userName": { + "type": "string", + "description": "Human-readable name for a User." + }, + "userEmail": { + "type": "string", + "description": "The user's email address.", + "nullable": true + }, + "userPhoneNumber": { + "type": "string", + "description": "The user's phone number in E.164 format e.g. +13214567890", + "nullable": true + }, + "authenticators": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Authenticator" + }, + "description": "A list of Authenticator parameters." + }, + "apiKeys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ApiKey" + }, + "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." + }, + "userTags": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User Tag IDs." + }, + "oauthProviders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OauthProvider" + }, + "description": "A list of Oauth Providers." + }, + "createdAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + }, + "mfaPolicies": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MfaPolicy" + }, + "description": "A list of MFA Policies that define multi-factor authentication requirements for this user." + } + }, + "required": [ + "userId", + "userName", + "authenticators", + "apiKeys", + "userTags", + "oauthProviders", + "createdAt", + "updatedAt", + "mfaPolicies" + ] + }, + "UserParams": { + "type": "object", + "properties": { + "userName": { + "type": "string", + "description": "Human-readable name for a User." + }, + "userEmail": { + "type": "string", + "description": "The user's email address.", + "nullable": true + }, + "accessType": { + "$ref": "#/components/schemas/AccessType" + }, + "apiKeys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ApiKeyParams" + }, + "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." + }, + "authenticators": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AuthenticatorParams" + }, + "description": "A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body." + }, + "userTags": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User Tag IDs. This field, if not needed, should be an empty array in your request body." + } + }, + "required": [ + "userName", + "accessType", + "apiKeys", + "authenticators", + "userTags" + ] + }, + "UserParamsV2": { + "type": "object", + "properties": { + "userName": { + "type": "string", + "description": "Human-readable name for a User." + }, + "userEmail": { + "type": "string", + "description": "The user's email address.", + "nullable": true + }, + "apiKeys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ApiKeyParams" + }, + "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." + }, + "authenticators": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AuthenticatorParamsV2" + }, + "description": "A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body." + }, + "userTags": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User Tag IDs. This field, if not needed, should be an empty array in your request body." + } + }, + "required": [ + "userName", + "apiKeys", + "authenticators", + "userTags" + ] + }, + "UserParamsV3": { + "type": "object", + "properties": { + "userName": { + "type": "string", + "description": "Human-readable name for a User." + }, + "userEmail": { + "type": "string", + "description": "The user's email address.", + "nullable": true + }, + "userPhoneNumber": { + "type": "string", + "description": "The user's phone number in E.164 format e.g. +13214567890", + "nullable": true + }, + "apiKeys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ApiKeyParamsV2" + }, + "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." + }, + "authenticators": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AuthenticatorParamsV2" + }, + "description": "A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body." + }, + "oauthProviders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OauthProviderParams" + }, + "description": "A list of Oauth providers. This field, if not needed, should be an empty array in your request body." + }, + "userTags": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User Tag IDs. This field, if not needed, should be an empty array in your request body." + } + }, + "required": [ + "userName", + "apiKeys", + "authenticators", + "oauthProviders", + "userTags" + ] + }, + "UserParamsV4": { + "type": "object", + "properties": { + "userName": { + "type": "string", + "description": "Human-readable name for a User." + }, + "userEmail": { + "type": "string", + "description": "The user's email address.", + "nullable": true + }, + "userPhoneNumber": { + "type": "string", + "description": "The user's phone number in E.164 format e.g. +13214567890", + "nullable": true + }, + "apiKeys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ApiKeyParamsV2" + }, + "description": "A list of API Key parameters. This field, if not needed, should be an empty array in your request body." + }, + "authenticators": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AuthenticatorParamsV2" + }, + "description": "A list of Authenticator parameters. This field, if not needed, should be an empty array in your request body." + }, + "oauthProviders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OauthProviderParamsV2" + }, + "description": "A list of Oauth providers. This field, if not needed, should be an empty array in your request body." + }, + "userTags": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of User Tag IDs. This field, if not needed, should be an empty array in your request body." + } + }, + "required": [ + "userName", + "apiKeys", + "authenticators", + "oauthProviders", + "userTags" + ] + }, + "ValidateTvcImageRequest": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "pivotContainerImageUrl": { + "type": "string", + "description": "URL of the container image." + }, + "pivotContainerEncryptedPullSecret": { + "type": "string", + "description": "HPKE-encrypted pull secret for private images.", + "nullable": true + } + }, + "required": [ + "organizationId", + "pivotContainerImageUrl" + ] + }, + "ValidateTvcImageResponse": { + "type": "object", + "properties": { + "resolvedImageDigest": { + "type": "string" + } + } + }, + "VerifyOtpIntent": { + "type": "object", + "properties": { + "otpId": { + "type": "string", + "description": "ID representing the result of an init OTP activity." + }, + "otpCode": { + "type": "string", + "description": "OTP sent out to a user's contact (email or SMS)" + }, + "expirationSeconds": { + "type": "string", + "description": "Expiration window (in seconds) indicating how long the verification token is valid for. If not provided, a default of 1 hour will be used. Maximum value is 86400 seconds (24 hours)", + "nullable": true + }, + "publicKey": { + "type": "string", + "description": "Client-side public key generated by the user, which will be added to the JWT response and verified in subsequent requests via a client proof signature", + "nullable": true + } + }, + "required": [ + "otpId", + "otpCode" + ] + }, + "VerifyOtpIntentV2": { + "type": "object", + "properties": { + "otpId": { + "type": "string", + "description": "UUID representing an OTP flow. A new UUID is created for each init OTP activity." + }, + "encryptedOtpBundle": { + "type": "string", + "description": "Encrypted bundle containing the OTP code and a client-generated public key. Turnkey's secure enclaves will decrypt this bundle, verify the OTP code, and issue a new Verification Token. Encrypted using the target encryption key provided in the INIT_OTP activity result." + }, + "expirationSeconds": { + "type": "string", + "description": "Expiration window (in seconds) indicating how long the verification token is valid for. If not provided, a default of 1 hour will be used. Maximum value is 86400 seconds (24 hours)", + "nullable": true + } + }, + "required": [ + "otpId", + "encryptedOtpBundle" + ] + }, + "VerifyOtpRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ACTIVITY_TYPE_VERIFY_OTP_V2" + ] + }, + "timestampMs": { + "type": "string", + "description": "Timestamp (in milliseconds) of the request, used to verify liveness of user requests." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "parameters": { + "$ref": "#/components/schemas/VerifyOtpIntentV2" + }, + "generateAppProofs": { + "type": "boolean", + "nullable": true + } + }, + "required": [ + "type", + "timestampMs", + "organizationId", + "parameters" + ] + }, + "VerifyOtpResult": { + "type": "object", + "properties": { + "verificationToken": { + "type": "string", + "description": "Signed JWT containing a unique id, expiry, verification type, contact. Verification status of a user is updated when the token is consumed (in OTP_LOGIN requests)" + } + }, + "required": [ + "verificationToken" + ] + }, + "Vote": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for a given Vote object." + }, + "userId": { + "type": "string", + "description": "Unique identifier for a given User." + }, + "user": { + "$ref": "#/components/schemas/User" + }, + "activityId": { + "type": "string", + "description": "Unique identifier for a given Activity object." + }, + "selection": { + "type": "string", + "enum": [ + "VOTE_SELECTION_APPROVED", + "VOTE_SELECTION_REJECTED" + ] + }, + "message": { + "type": "string", + "description": "The raw message being signed within a Vote." + }, + "publicKey": { + "type": "string", + "description": "The public component of a cryptographic key pair used to sign messages and transactions." + }, + "signature": { + "type": "string", + "description": "The signature applied to a particular vote." + }, + "scheme": { + "type": "string", + "description": "Method used to produce a signature." + }, + "createdAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + } + }, + "required": [ + "id", + "userId", + "user", + "activityId", + "selection", + "message", + "publicKey", + "signature", + "scheme", + "createdAt" + ] + }, + "Wallet": { + "type": "object", + "properties": { + "walletId": { + "type": "string", + "description": "Unique identifier for a given Wallet." + }, + "walletName": { + "type": "string", + "description": "Human-readable name for a Wallet." + }, + "createdAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + }, + "exported": { + "type": "boolean", + "description": "True when a given Wallet is exported, false otherwise." + }, + "imported": { + "type": "boolean", + "description": "True when a given Wallet is imported, false otherwise." + } + }, + "required": [ + "walletId", + "walletName", + "createdAt", + "updatedAt", + "exported", + "imported" + ] + }, + "WalletAccount": { + "type": "object", + "properties": { + "walletAccountId": { + "type": "string", + "description": "Unique identifier for a given Wallet Account." + }, + "organizationId": { + "type": "string", + "description": "The Organization the Account belongs to." + }, + "walletId": { + "type": "string", + "description": "The Wallet the Account was derived from." + }, + "curve": { + "$ref": "#/components/schemas/Curve" + }, + "pathFormat": { + "$ref": "#/components/schemas/PathFormat" + }, + "path": { + "type": "string", + "description": "Path used to generate the Account." + }, + "addressFormat": { + "$ref": "#/components/schemas/AddressFormat" + }, + "address": { + "type": "string", + "description": "Address generated using the Wallet seed and Account parameters." + }, + "createdAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + }, + "publicKey": { + "type": "string", + "description": "The public component of this wallet account's underlying cryptographic key pair.", + "nullable": true + }, + "walletDetails": { + "$ref": "#/components/schemas/Wallet" + }, + "name": { + "type": "string", + "description": "Human-readable name for this Wallet Account, unique within the organization.", + "nullable": true + } + }, + "required": [ + "walletAccountId", + "organizationId", + "walletId", + "curve", + "pathFormat", + "path", + "addressFormat", + "address", + "createdAt", + "updatedAt" + ] + }, + "WalletAccountParams": { + "type": "object", + "properties": { + "curve": { + "$ref": "#/components/schemas/Curve" + }, + "pathFormat": { + "$ref": "#/components/schemas/PathFormat" + }, + "path": { + "type": "string", + "description": "Path used to generate a wallet Account." + }, + "addressFormat": { + "$ref": "#/components/schemas/AddressFormat" + }, + "name": { + "type": "string", + "description": "Optional human-readable name for the account.", + "nullable": true + } + }, + "required": [ + "curve", + "pathFormat", + "path", + "addressFormat" + ] + }, + "WalletKitSettingsParams": { + "type": "object", + "properties": { + "enabledSocialProviders": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of enabled social login providers (e.g., 'apple', 'google', 'facebook')", + "title": "Enabled Social Providers" + }, + "oauthClientIds": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Mapping of social login providers to their Oauth client IDs.", + "title": "Oauth Client IDs" + }, + "oauthRedirectUrl": { + "type": "string", + "description": "Oauth redirect URL to be used for social login flows.", + "title": "Oauth Redirect URL" + } + } + }, + "WalletParams": { + "type": "object", + "properties": { + "walletName": { + "type": "string", + "description": "Human-readable name for a Wallet." + }, + "accounts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/WalletAccountParams" + }, + "description": "A list of wallet Accounts. This field, if not needed, should be an empty array in your request body." + }, + "mnemonicLength": { + "type": "integer", + "format": "int32", + "description": "Length of mnemonic to generate the Wallet seed. Defaults to 12. Accepted values: 12, 15, 18, 21, 24.", + "nullable": true + } + }, + "required": [ + "walletName", + "accounts" + ] + }, + "WalletResult": { + "type": "object", + "properties": { + "walletId": { + "type": "string" + }, + "addresses": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of account addresses." + } + }, + "required": [ + "walletId", + "addresses" + ] + }, + "WebAuthnStamp": { + "type": "object", + "properties": { + "credentialId": { + "type": "string", + "description": "A base64 url encoded Unique identifier for a given credential." + }, + "clientDataJson": { + "type": "string", + "description": "A base64 encoded payload containing metadata about the signing context and the challenge." + }, + "authenticatorData": { + "type": "string", + "description": "A base64 encoded payload containing metadata about the authenticator." + }, + "signature": { + "type": "string", + "description": "The base64 url encoded signature bytes contained within the WebAuthn assertion response." + } + }, + "required": [ + "credentialId", + "clientDataJson", + "authenticatorData", + "signature" + ] + }, + "WebhookEndpointData": { + "type": "object", + "properties": { + "endpointId": { + "type": "string", + "description": "Unique identifier of the webhook endpoint." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for a given Organization." + }, + "url": { + "type": "string", + "description": "The destination URL for webhook delivery." + }, + "name": { + "type": "string", + "description": "Human-readable name for this webhook endpoint." + }, + "isActive": { + "type": "boolean", + "description": "Whether this webhook endpoint is active." + }, + "subscriptions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/WebhookSubscriptionParams" + }, + "description": "Current subscriptions attached to this endpoint." + } + }, + "required": [ + "endpointId", + "organizationId", + "url", + "name", + "isActive" + ] + }, + "WebhookSubscriptionParams": { + "type": "object", + "properties": { + "eventType": { + "type": "string", + "description": "The event type to subscribe to (for example, ACTIVITY_UPDATES, BALANCE_CONFIRMED_UPDATES, or BALANCE_FINALIZED_UPDATES)." + }, + "filtersJson": { + "type": "string", + "description": "JSON-encoded filter criteria for this subscription.", + "nullable": true + }, + "isActive": { + "type": "boolean", + "description": "Whether this subscription is active.", + "nullable": true + } + }, + "required": [ + "eventType" + ] + }, + "activity.v1.Address": { + "type": "object", + "properties": { + "format": { + "$ref": "#/components/schemas/AddressFormat" + }, + "address": { + "type": "string" + } + } + }, + "activity.v1.PolicyEvaluation": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for a given policy evaluation." + }, + "activityId": { + "type": "string", + "description": "Unique identifier for a given Activity." + }, + "organizationId": { + "type": "string", + "description": "Unique identifier for the Organization the Activity belongs to." + }, + "voteId": { + "type": "string", + "description": "Unique identifier for the Vote associated with this policy evaluation." + }, + "policyEvaluations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/common.v1.PolicyEvaluation" + }, + "description": "Detailed evaluation result for each Policy that was run." + }, + "createdAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + } + }, + "required": [ + "id", + "activityId", + "organizationId", + "voteId", + "policyEvaluations", + "createdAt" + ] + }, + "common.v1.PolicyEvaluation": { + "type": "object", + "properties": { + "policyId": { + "type": "string" + }, + "outcome": { + "$ref": "#/components/schemas/Outcome" + } + } + }, + "data.v1.Address": { + "type": "object", + "properties": { + "format": { + "$ref": "#/components/schemas/AddressFormat" + }, + "address": { + "type": "string" + } + } + }, + "data.v1.SignatureScheme": { + "type": "string", + "enum": [ + "SIGNATURE_SCHEME_EPHEMERAL_KEY_P256" + ] + }, + "data.v1.SmartContractInterface": { + "type": "object", + "properties": { + "organizationId": { + "type": "string", + "description": "The Organization the Smart Contract Interface belongs to." + }, + "smartContractInterfaceId": { + "type": "string", + "description": "Unique identifier for a given Smart Contract Interface (ABI or IDL)." + }, + "smartContractAddress": { + "type": "string", + "description": "The address corresponding to the Smart Contract or Program." + }, + "smartContractInterface": { + "type": "string", + "description": "The JSON corresponding to the Smart Contract Interface (ABI or IDL)." + }, + "type": { + "type": "string", + "description": "The type corresponding to the Smart Contract Interface (either ETHEREUM or SOLANA)." + }, + "label": { + "type": "string", + "description": "The label corresponding to the Smart Contract Interface (either ETHEREUM or SOLANA)." + }, + "notes": { + "type": "string", + "description": "The notes corresponding to the Smart Contract Interface (either ETHEREUM or SOLANA)." + }, + "createdAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + } + }, + "required": [ + "organizationId", + "smartContractInterfaceId", + "smartContractAddress", + "smartContractInterface", + "type", + "label", + "notes", + "createdAt", + "updatedAt" + ] + }, + "external.data.v1.Credential": { + "type": "object", + "properties": { + "publicKey": { + "type": "string", + "description": "The public component of a cryptographic key pair used to sign messages and transactions." + }, + "type": { + "$ref": "#/components/schemas/CredentialType" + }, + "sessionProfileId": { + "type": "string", + "description": "The session profile associated with this credential, if any. This field is only applicable for credentials of type CREDENTIAL_TYPE_LOGIN.", + "nullable": true + } + }, + "required": [ + "publicKey", + "type" + ] + }, + "external.data.v1.Quorum": { + "type": "object", + "properties": { + "threshold": { + "type": "integer", + "format": "int32", + "description": "Count of unique approvals required to meet quorum." + }, + "userIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Unique identifiers of quorum set members." + } + }, + "required": [ + "threshold", + "userIds" + ] + }, + "external.data.v1.Timestamp": { + "type": "object", + "properties": { + "seconds": { + "type": "string" + }, + "nanos": { + "type": "string" + } + }, + "required": [ + "seconds", + "nanos" + ] + }, + "v1.Tag": { + "type": "object", + "properties": { + "tagId": { + "type": "string", + "description": "Unique identifier for a given Tag." + }, + "tagName": { + "type": "string", + "description": "Human-readable name for a Tag." + }, + "tagType": { + "$ref": "#/components/schemas/TagType" + }, + "createdAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + }, + "updatedAt": { + "$ref": "#/components/schemas/external.data.v1.Timestamp" + } + }, + "required": [ + "tagId", + "tagName", + "tagType", + "createdAt", + "updatedAt" + ] + } + } + }, + "x-tagGroups": [ + { + "name": "ORGANIZATIONS", + "tags": [ + "Organizations", + "Invitations", + "Policies", + "Features", + "IP Allowlist" + ] + }, + { + "name": "WALLETS AND PRIVATE KEYS", + "tags": [ + "Wallets", + "Signing", + "Private Keys", + "Private Key Tags" + ] + }, + { + "name": "USERS", + "tags": [ + "Users", + "User Tags", + "User Recovery", + "User Auth" + ] + }, + { + "name": "CREDENTIALS", + "tags": [ + "Authenticators", + "API Keys", + "Sessions" + ] + }, + { + "name": "ACTIVITIES", + "tags": [ + "Activities", + "Consensus" + ] + } + ], + "x-original-swagger-version": "2.0" +} \ No newline at end of file diff --git a/scripts/openapi-gen/utils/mdx-generator/generator.ts b/scripts/openapi-gen/utils/mdx-generator/generator.ts index 46aea6b9..f25b9ec9 100644 --- a/scripts/openapi-gen/utils/mdx-generator/generator.ts +++ b/scripts/openapi-gen/utils/mdx-generator/generator.ts @@ -217,14 +217,12 @@ export function generateResponseFieldMdxRecursive( // Top-level Primitive: Use if (!parentKey) { - // Enum fields carry a paragraph break before the options list, so the - // description must start on its own line (block JSX) to parse as MDX. - mdx += isEnum - ? ` -${description.trim()} -${generateEnumOptionsMdx(options)} -` - : `${description.trim()} + mdx += `${description.trim()}${ + isEnum + ? ` + ${generateEnumOptionsMdx(options)}` + : "" + } `; // Removed newline before closing tag } else { // ANY NESTED Primitive: Use diff --git a/snippets/data/endpoint-tags.mdx b/snippets/data/endpoint-tags.mdx index 3a59c71d..01509f59 100644 --- a/snippets/data/endpoint-tags.mdx +++ b/snippets/data/endpoint-tags.mdx @@ -32,17 +32,6 @@ export const endpoints = [ } ] }, - { - "name": "Claim earn fees", - "id": "claim-earn-fees", - "type": "activity", - "tags": [ - { - "id": "earn", - "label": "Earn" - } - ] - }, { "name": "Claim Spark transfer", "id": "claim-spark-transfer", @@ -131,17 +120,6 @@ export const endpoints = [ } ] }, - { - "name": "Create MFA policy", - "id": "create-mfa-policy", - "type": "activity", - "tags": [ - { - "id": "mfa-policies", - "label": "MFA Policies" - } - ] - }, { "name": "Create Oauth providers", "id": "create-oauth-providers", @@ -219,17 +197,6 @@ export const endpoints = [ } ] }, - { - "name": "Create session profile", - "id": "create-session-profile", - "type": "activity", - "tags": [ - { - "id": "session-profiles", - "label": "Session Profiles" - } - ] - }, { "name": "Create smart contract interface", "id": "create-smart-contract-interface", @@ -395,17 +362,6 @@ export const endpoints = [ } ] }, - { - "name": "Delete MFA policy", - "id": "delete-mfa-policy", - "type": "activity", - "tags": [ - { - "id": "mfa-policies", - "label": "MFA Policies" - } - ] - }, { "name": "Delete Oauth providers", "id": "delete-oauth-providers", @@ -538,28 +494,6 @@ export const endpoints = [ } ] }, - { - "name": "Deploy Earn wrapper", - "id": "deploy-earn-wrapper", - "type": "activity", - "tags": [ - { - "id": "earn", - "label": "Earn" - } - ] - }, - { - "name": "Deposit into Earn vault", - "id": "deposit-into-earn-vault", - "type": "activity", - "tags": [ - { - "id": "earn", - "label": "Earn" - } - ] - }, { "name": "Export private key", "id": "export-private-key", @@ -824,17 +758,6 @@ export const endpoints = [ } ] }, - { - "name": "Set Earn wrapper state", - "id": "set-earn-wrapper-state", - "type": "activity", - "tags": [ - { - "id": "earn", - "label": "Earn" - } - ] - }, { "name": "Set IP Allowlist", "id": "set-ip-allowlist", @@ -945,17 +868,6 @@ export const endpoints = [ } ] }, - { - "name": "Update MFA policy", - "id": "update-mfa-policy", - "type": "activity", - "tags": [ - { - "id": "mfa-policies", - "label": "MFA Policies" - } - ] - }, { "name": "Update organization name", "id": "update-organization-name", @@ -1088,17 +1000,6 @@ export const endpoints = [ } ] }, - { - "name": "Withdraw from Earn vault", - "id": "withdraw-from-earn-vault", - "type": "activity", - "tags": [ - { - "id": "earn", - "label": "Earn" - } - ] - }, { "name": "", "id": "", @@ -1193,72 +1094,6 @@ export const endpoints = [ } ] }, - { - "name": "Get Earn deploy status", - "id": "get-earn-deploy-status", - "type": "query", - "tags": [ - { - "id": "earn", - "label": "Earn" - } - ] - }, - { - "name": "Get Earn deposit status", - "id": "get-earn-deposit-status", - "type": "query", - "tags": [ - { - "id": "earn", - "label": "Earn" - } - ] - }, - { - "name": "Get Earn enabled vaults", - "id": "get-earn-enabled-vaults", - "type": "query", - "tags": [ - { - "id": "earn", - "label": "Earn" - } - ] - }, - { - "name": "Get Earn positions", - "id": "get-earn-positions", - "type": "query", - "tags": [ - { - "id": "earn", - "label": "Earn" - } - ] - }, - { - "name": "Get Earn vault catalog", - "id": "get-earn-vault-catalog", - "type": "query", - "tags": [ - { - "id": "earn", - "label": "Earn" - } - ] - }, - { - "name": "Get Earn withdraw status", - "id": "get-earn-withdraw-status", - "type": "query", - "tags": [ - { - "id": "earn", - "label": "Earn" - } - ] - }, { "name": "Get gas usage", "id": "get-gas-usage", @@ -1281,39 +1116,6 @@ export const endpoints = [ } ] }, - { - "name": "Get MFA policies", - "id": "get-mfa-policies", - "type": "query", - "tags": [ - { - "id": "mfa-policies", - "label": "MFA Policies" - } - ] - }, - { - "name": "Get MFA policy", - "id": "get-mfa-policy", - "type": "query", - "tags": [ - { - "id": "mfa-policies", - "label": "MFA Policies" - } - ] - }, - { - "name": "Get MFA status", - "id": "get-mfa-status", - "type": "query", - "tags": [ - { - "id": "mfa-policies", - "label": "MFA Policies" - } - ] - }, { "name": "Get nonces", "id": "get-nonces", @@ -1397,28 +1199,6 @@ export const endpoints = [ } ] }, - { - "name": "Get session profile", - "id": "get-session-profile", - "type": "query", - "tags": [ - { - "id": "session-profiles", - "label": "Session Profiles" - } - ] - }, - { - "name": "Get session profiles", - "id": "get-session-profiles", - "type": "query", - "tags": [ - { - "id": "session-profiles", - "label": "Session Profiles" - } - ] - }, { "name": "Get smart contract interface", "id": "get-smart-contract-interface", @@ -1485,17 +1265,6 @@ export const endpoints = [ } ] }, - { - "name": "Get TVC Deployment debug logs", - "id": "get-tvc-deployment-debug-logs", - "type": "query", - "tags": [ - { - "id": "tvc", - "label": "TVC" - } - ] - }, { "name": "Get user", "id": "get-user", @@ -1749,10 +1518,6 @@ export const tags = [ "id": "broadcasting", "label": "Broadcasting" }, - { - "id": "earn", - "label": "Earn" - }, { "id": "signing", "label": "Signing" @@ -1781,10 +1546,6 @@ export const tags = [ "id": "invitations", "label": "Invitations" }, - { - "id": "mfa-policies", - "label": "MFA Policies" - }, { "id": "policies", "label": "Policies" @@ -1801,10 +1562,6 @@ export const tags = [ "id": "sessions", "label": "Sessions" }, - { - "id": "session-profiles", - "label": "Session Profiles" - }, { "id": "organizations", "label": "Organizations" From b75ba8878a5168ee0d1f60377bc6bf74a1c36a22 Mon Sep 17 00:00:00 2001 From: DeRauk Gibble Date: Thu, 6 Aug 2026 14:14:10 -0400 Subject: [PATCH 15/15] Remove beta note --- snippets/shared/earn-beta-note.mdx | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 snippets/shared/earn-beta-note.mdx diff --git a/snippets/shared/earn-beta-note.mdx b/snippets/shared/earn-beta-note.mdx deleted file mode 100644 index 5e1f1e72..00000000 --- a/snippets/shared/earn-beta-note.mdx +++ /dev/null @@ -1,3 +0,0 @@ - - Earn is currently an Early Access Product. [Contact us](https://www.turnkey.com/contact-us) to enable it for your organization. - \ No newline at end of file