{"openapi":"3.0.0","info":{"title":"Utila API","version":"v2"},"tags":[{"name":"Overview","description":"Utila provides a robust API for developers to programmatically leverage Utila's capabilities without compromising on security.\n\nThese abilities mainly include:\n\n1. **Monitoring** wallets, transactions, balances and other types of financial and blockchain data.\n2. Registering for various events using **webhooks**.\n3. **Initiating** transactions.\n4. Transaction **signing** via an automated co-signer.\n\n\nUtila Terminology:\n\n**Vault** - an organization's workspace having a single security policy and key material for all underlying assets.\nA vault can contain multiple wallets.\n\n**Wallet** - a set of blockchain addresses, grouped to serve a separate financial entity or functionality.\nEach wallet has a list of enabled chains. For each chain, a wallet will have a single blockchain address (except bitcoin).\n\n**Asset** - a cryptocurrency. \n\n**Balances** - the token or $USD equivalent amount of the assets in a wallet.\n\n**Transaction** - a logged asset transfer or a key signature action. \nA transaction can appear in different stages: created, approved, signed, published, mined and completed.\n\n**Service Account** - a virtual user account allowed to perform API based actions. \nA service account can be granted either a viewer or a signer role (co-signer).\n\n**Co-Signer** - A tool integrated in Utila CLI, which allows you to sign transactions automatically\nby accessing a secure key share programmatically in the organization's environment.\n\n"},{"name":"Authentication","description":"In order to autheticate with Utila API you will need to:\n\n1. Create a service account.\n1. Add the service account as a member to any desired vaults.\n1. Generate an access token and provide it alongside the request.\n\n## Create a Service Account\n\n1. Generate an RSA keypair to be used for the service account authentication (using `openssl`, KMS, etc.).\n\n1. In the [Console](https://console.utila.io) navigate to `Vault Settings` &rarr; `Service Accounts`.\n\n1. Create a new service account with the desired public key, display name and email address.\n\n1. Add your service account as a member to any desired vaults _(this operation is subject to admin quorum approval)_.\n\n## Generate Access Token Using Private Key\n\nGenerating an access token using a private key is done by signing using the private key associated with the service account on a JWT with the following claims:\n\n- `sub` (Subject): The email of the service account (e.g. `my-service-account@vault-aa11bb2cc33dd44.utilaserviceaccount.io`).\n- `aud` (Audience): The Utila API URI (`https://api.utila.io/`).\n- `exp` (Expiration Time): The expiration time of the token, must be no longer than an hour since the current time or since the `iat` (Issued At), if specified.\n\n### Python\n\n```python\nSERVICE_ACCOUNT_EMAIL = os.getenv('SA_EMAIL')\nSERVICE_ACCOUNT_PRIVATE_KEY = os.getenv('SA_PRIVATE_KEY')\n\ndef generate_token():\n    return jwt.encode(\n    {\n        \"sub\": SERVICE_ACCOUNT_EMAIL,\n        \"aud\": \"https://api.utila.io/\",\n        \"exp\": datetime.datetime.utcnow() + datetime.timedelta(hours=1)\n    },\n    SERVICE_ACCOUNT_PRIVATE_KEY,\n    algorithm=\"RS256\"\n)\n```\n\n### TypeScript\n\n```js\nimport jwt from 'jsonwebtoken';\n\nconst SERVICE_ACCOUNT_EMAIL = 'SA_EMAIL'\nconst SERVICE_ACCOUNT_PRIVATE_KEY = 'SA_PRIVATE_KEY'\n\nfunction generateToken() {\n  const options = <jwt.SignOptions>{\n    subject: SERVICE_ACCOUNT_EMAIL,\n    audience: \"https://api.utila.io/\",\n    expiresIn: \"1h\",\n    algorithm: <jwt.Algorithm>\"RS256\",\n  };\n  return jwt.sign({}, SERVICE_ACCOUNT_PRIVATE_KEY, options);\n}\n```\n\n## Using Access Token\n\nProvide the access token as a header parameter, `Authorization: Bearer ${Token}` to all endpoints of this API.\n\n### Python\n\n```python\nclass RestClient:\n    def __init__(self, token, domain):\n        self.token = token\n        self.domain = domain\n\n    def get(self, endpoint):\n        res = requests.get(f'https://{self.domain}{endpoint}', headers=self._common_headers())\n        res.raise_for_status()\n        return res.json()\n\n    def post(self, endpoint, req):\n        headers = self._common_headers()\n        headers['Content-Type'] = 'application/json'\n        res = requests.post(f'https://{self.domain}{endpoint}', headers=headers, json=req)\n        res.raise_for_status()\n        return res.json()\n\n    def _common_headers(self):\n        return {'Authorization': f'Bearer {self.token}'}\n```\n\n### Typescript\n\n```js\n/**\n * Simplistic REST client for making authenticated HTTP requests.\n * In real-life applications, this may be replaced with a more robust HTTP client package, such as `axios`.\n */\nexport class RestClient {\n\tconstructor(private readonly accessToken: string, private readonly domain: string) {\n\t}\n\n\tasync get(path: string): Promise<any> {\n\t\tconst res = await fetch(`https://${this.domain}${path}`, {\n\t\t\tmethod: 'GET',\n\t\t\theaders: this.buildCommonHeaders(),\n\t\t});\n\t\treturn res.json();\n\t}\n\n\tasync post(path: string, body: Record<string, unknown>): Promise<any> {\n\t\tconst res = await fetch(`https://${this.domain}${path}`, {\n\t\t\tmethod: 'POST',\n\t\t\theaders: this.buildCommonHeaders(),\n\t\t\tbody: JSON.stringify(body),\n\t\t});\n\t\treturn res.json();\n\t}\n\n\tprivate buildCommonHeaders(): Record<string, string> {\n\t\treturn {\n\t\t\t'Authorization': `Bearer ${this.accessToken}`,\n\t\t\t'Content-Type': 'application/json',\n\t\t};\n\t}\n}\n```\n"},{"name":"Vaults"},{"name":"Transactions"},{"name":"Address Book"},{"name":"Wallets"},{"name":"Balances"},{"name":"Blockchains"},{"name":"Assets"},{"name":"Webhooks","description":"Webhooks are a powerful feature that enables you to stay up-to-date with events in Utila without the need for constant polling. Instead, we send data directly to your application when relevant events occur such as deposit to specific wallets, transaction state change, and wallet creation.\n\n## Webhook Creation\n\n1. In the [Console](https://console.utila.io) navigate to `Vault Settings` &rarr; `Webhooks`.\n\n1. Click on `Add Webhook`.\n\n1. Provide a display name for your webhook.\n\n1. Provide the URL where you want to receive webhook data. This is where we'll send notifications when the selected events occur.\\\n   You can test the endpoint by clicking on `Test` - this will send a test event to your endpoint.\n\n1. Select the events you want to be notified about. For example, you can choose to receive notifications when a new transaction is created.\n\n1. Click `Add` to save the webhook.\n\n## Webhook Event Payload\n\nWhen an event occurs, we'll send you a JSON payload containing the relevant information about the event.\\\n Here are example messages of what you might receive:\n\n### Transaction Created\n\n```json\n{\n  \"id\": \"94ea3ce9-fb6d-41f3-91aa-8c42f17df1f6\",\n  \"vault\": \"vaults/3bf247bc8ee2c\",\n  \"type\": \"TRANSACTION_CREATED\",\n  \"resourceType\": \"TRANSACTION\",\n  \"resource\": \"vaults/3bf247bc8ee2c/transactions/b6e3cd32e827\"\n}\n```\n\n### Transaction State Updated\n\n```json\n{\n  \"id\": \"9c683b37-bfb6-42f4-bcaa-1a6f46d3b6f8\",\n  \"vault\": \"vaults/3bf247bc8ee2c\",\n  \"type\": \"TRANSACTION_STATE_UPDATED\",\n  \"details\": {\n    \"transactionStateUpdated\": {\n      \"newState\": \"CONFIRMED\"\n    }\n  },\n  \"resourceType\": \"TRANSACTION\",\n  \"resource\": \"vaults/3bf247bc8ee2c/transactions/b6e3cd2e8217\"\n}\n```\n\n### Wallet Created\n\n```json\n{\n  \"id\": \"94ea3ce9-fb6d-41f3-91aa-8c42f17df1f6\",\n  \"vault\": \"vaults/3bf247bc8ee2c\",\n  \"type\": \"WALLET_CREATED\",\n  \"resourceType\": \"WALLET\",\n  \"resource\": \"vaults/3bf247bc8ee2c/wallets/b6e3cd32e827\"\n}\n```\n\n### Wallet Address Created\n\n```json\n{\n  \"id\": \"94ea3ce9-fb6d-41f3-91aa-8c42f17df1f6\",\n  \"vault\": \"vaults/3bf247bc8ee2c\",\n  \"type\": \"WALLET_ADDRESS_CREATED\",\n  \"resourceType\": \"WALLET_ADDRESS\",\n  \"resource\": \"vaults/3bf247bc8ee2c/wallets/b6e3cd32e827/addresses/4340c6919558\"\n}\n```\n\n### Transaction AML Screening Result Ready\n\n```json\n{\n  \"id\": \"30tv7byD3k1DLTU1xVVfeNnX3pa\",\n  \"vault\": \"vaults/489c81985ea0\",\n  \"type\": \"TRANSACTION_AML_SCREENING_RESULT_READY\",\n  \"details\": {\n    \"transactionAmlScreeningResultReady\": {\n      \"action\": \"ALLOW\"\n    }\n  },\n  \"resourceType\": \"TRANSACTION\",\n  \"resource\": \"vaults/489c81985ea0/transactions/fb9bb214db4a\"\n}\n``` \n\n## Webhook Security\n\nHere are some important requirements and guidelines to keep your webhook integration secure:\n\n- Use HTTPS in your webhook endpoint, to ensure data is encrypted in transit.\n\n- Validate the events using the signature attached in the request header:\n\n  - A signature on the event payload is attached in a request header named `x-utila-signature`.\n\n  - The signature is computed using RSA-4096 encryption, SHA512 hash and PSS padding, and encoded in base64.\n\n  - The signature can be validated using Utila's webhook public key:\n\n    ```text\n    -----BEGIN PUBLIC KEY-----\n    MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAulI1XPGRDFcymdf2zXvD\n    spfdTXA1g0NOavZ50+AtcQP7f+KTpXoO1bkr6x9dO2Jq8FHImRT1sbhKhcNXT4WC\n    dLSa/2Zh60QE3tp9d51o1XDSnzRMwcGbFyJ7C30DVpVEIwqD2Z5GRlzXinqIeVdY\n    GOubuVol/wOAynS32DX+6y2PiqbYj7P84csBOgpNT27Mc6InEqKb7LWQtU8LPttx\n    tfyceOPXE5G4h+UujPsPG6WN5MHHVbP9r6oneEF3knbfL3hCJRjwV9HfTtG6JyYr\n    25Dy6SOCphrlEZi8IGcKxL6fEMetDGGVCjm7XfHyt6fYoUonD9lZsvbSyUsRwf/1\n    +x77F2LxtzQyvMJR9jD16WUyzm+fUBSVQixxKnKSrVkeLqkmGboDTY5kw3doSVTP\n    zcGDzWkzqC3lgwRLnSg4J+koQY+yo9jYBbFdSp+/PfVmp9NEaBuCV63mp/85VWIh\n    1FRYe6lEdGZWdmIcbDvNYU/Cui/yGZoID7+sJJq/rWN0Qxx/0skEaT/083+iYLVA\n    QNLvWtmQfgNKPm6GeQknRUEWyWUJtq6ANeP/8hGVM1G/edOdLn+KfhXZvw41O5z1\n    uKHEqHIV+NaCNnFbDj924bJhA/fWNKxYv7/Nm44Wy1nXlgqdHiFkSqtjUBPmzE/n\n    yj92azWBq1RbGHY+9/POguMCAwEAAQ==\n    -----END PUBLIC KEY-----\n    ```\n\n  - See example below for validation\n\n## Webhook Response\n\nThe webhook endpoint is expected to respond with a success status code (200-299) to confirm the webhook event was received.\n\n## Webhook Retries\n\nIn case the webhook endpoint does not respond with a successful acknowledgment, we'll make multiple attempts to deliver the event using an exponential back-off mechanism (which means the time between each attempt gradually increases) for up to 24 hours, after which the event will be considered undeliverable and be discarded.\n\nThis retry mechanism ensures that even if there are temporary issues on your end, you have a 24-hour window to receive the event data successfully. It's designed to make your webhook integration as reliable as possible.\n\n## Webhook Example\n\nThe following code snippet is a webhook function configured to parse the event, handle it and return a 200 response upon successful handling.\n\n### Python\n\n```python\nimport base64\nfrom Cryptodome.PublicKey import RSA\nfrom Cryptodome.Signature import pss\nfrom Cryptodome.Hash import SHA512\nfrom flask import Flask, request\n\n\napp = Flask(__name__)\n\n@app.route('/webhook', methods=['POST'])\ndef webhook():\n    # Check if the request contains JSON data\n    if request.is_json:\n        data = request.get_json()\n\n\t\tif not verify_signature(request.headers.get('x-utila-signature'), request.data, utila_public_key):\n\t\t\treturn 'Invalid signature', 400\n\n        # Check the event type\n        event_type = data.get(\"type\")\n\n        if event_type:\n            # Process based on the event type\n            if event_type == \"TRANSACTION_CREATED\":\n                # handle_transaction_created(data)\n            elif event_type == \"TRANSACTION_STATE_UPDATED\":\n                # handle_transaction_state_updated(data)\n            else:\n                # handle_unknown_event(data)\n\n            # Respond with a success status code (HTTP 200 OK)\n            return '', 200\n\n    # If the request doesn't contain valid JSON data or an unknown event type, respond with an error\n    return 'Invalid request data or event type', 400\n\ndef verify_signature(signature_base64, data, public_key_pem):\n    try:\n        # Load the public key from its PEM-encoded representation\n        public_key = RSA.import_key(public_key_pem)\n\n        # Decode the base64-encoded signature\n        signature = base64.b64decode(signature_base64)\n\n        # Create a SHA-512 hash object and update it with the data\n        h = SHA512.new(data)\n\n        # Verify the signature\n        pss.new(public_key).verify(h, signature)\n\n        return True\n    except (ValueError, TypeError, AssertionError) as e:\n        print(f\"Signature verification failed: {str(e)}\")\n        return False\n\nif __name__ == '__main__':\n    app.run(host='0.0.0.0', port=5000)\n\n```\n\n### TypeScript\n\n```js\nimport { createVerify, constants } from \"crypto\";\nimport express from \"express\";\n\nconst publicKey = `...`;\nconst app = express();\nconst port = 5000;\n\nfunction verifyUtilaSignatureMiddleware(req, res, next) {\n  let data = \"\";\n\n  req.on(\"data\", (chunk) => (data += chunk));\n\n  req.on(\"end\", () => {\n    try {\n      const isValid = verifySignature(\n        req.headers[\"x-utila-signature\"],\n        data,\n        publicKey\n      );\n\n      if (!isValid) {\n        throw new Error(\"Signature verification failed\");\n      }\n\n      req.body = JSON.parse(data);\n      next();\n    } catch (e) {\n      res.status(401).send({ error: e.message });\n    }\n  });\n}\n\napp.post(\"/my-webhook\", verifyUtilaSignatureMiddleware, (req, res) => {\n  console.log(req.body);\n\n  if (req.body.type === \"TEST\") {\n    // Do something when the webhook type is TEST\n  }\n\n  return res.json({ success: true });\n});\n\nfunction verifySignature(signatureBase64, data, publicKey) {\n  try {\n    const signatureBuffer = Buffer.from(signatureBase64, \"base64\");\n    const verifier = createVerify(\"RSA-SHA512\");\n\n    verifier.update(data);\n\n    const isValid = verifier.verify(\n      {\n        key: publicKey,\n        padding: constants.RSA_PKCS1_PSS_PADDING,\n        saltLength: constants.RSA_PSS_SALTLEN_DIGEST,\n      },\n      signatureBuffer\n    );\n\n    return isValid;\n  } catch (error) {\n    return false;\n  }\n}\n\napp.listen(port, () => {\n  console.log(`Webhook server listening at http://localhost:${port}`);\n});\n```\n"},{"name":"CLI","description":"The CLI is a tool that allows you to interact with the Utila API from the command line. Using the CLI you can set up a device, download key shares and sign transactions on a machine of your desire.\n\n## Downloads\n\nYou can download the CLI from the [Resource Center in the Utila Console](https://console.utila.io/resource-center).\n\n## CLI Commands\n\nThe CLI has several commands under its hood, some of which are:\n\n- `vaults` - Vault operations\n  - `list` - List vaults\n- `devices` - Device Operations\n  - `list` - List vault devices\n  - `register` - Create device\n- `keys` - Keys and key shares operations\n  - `list` - List vault keys\n  - `download` - Download and activate key share\n- `transactions` - Transaction operations\n  - `sign` - Sign a transaction\n- `cosigner` - Co-Signer operations\n  - `run` - Run the co-signer\n- `auth` - CLI Authentication configuration\n- `config` - CLI configuration\n- `utils` - CLI utils\n  - `generate-keypair` - Generate RSA key-pair\n\nFor a full list of commands, please read the CLI help by using the `--help` flag.\n\n## Authentication\n\nAuthentication in the CLI is done using a service account.\\\nPlease refer to the [Create a Service Account section](#tag/Authentication/Create-a-Service-Account) to learn how to create a service account.\n\nTo configure the CLI to authenticate using a service account, you'll need to set the authentication details for the service account using the `auth set-service-account-credentials` command, and specify the desired account to use when running a command using the `--account` top-level flag (or using the `$UTILA_ACCOUNT` environment variable).\n\nAlternatively, you can set the authentication details of the user, in one of following forms:\n\n- Set the service account's private key using the `$UTILA_SA_PRIVATE_KEY` environment variable\n- Put the service account's private key under the config dir in the following location: `<config-dir>/credentials/<account-email>/private_key.pem`\\\n\n## CLI config\n\nIn various CLI commands you will need to specify parameters like vault ID, device ID, key ID, etc.\n\nAs you probably will use the CLI with the same vault and the same device, for the ease of use, instead of specifying them on each and every command you can set the default parameters to use using the `config set` command, as follows:\\\n`./utila config set account <account-email>`\n\n## Device Creation\n\nTo be able to sign transactions using the CLI and the co-signer, a device and a key share are needed. Follow the following steps to create a device and download a key share.\n\n### Prepare a keypair for the device\n\nDevice creation requires a key-pair which will be associated with the device. You have multiple options of key-pairs to use for the device keypair:\n\n1. Re-use the keypair that is associated with the service account.\n1. Generate a new keypair.\\\n   You can do it by yourself, or by running the following command:\\\n   `./utila utils generate-keypair --name <key-file-name>`\n\n### Create device\n\nOnce you have your keypair ready, run the following commands to create a device:\\\n`./utila devices register --vault-id <vault-id> --private-device-key <private-key-file-path>`\n\n### Approve and sign the device\n\nNow that you've created a device for the service account, it needs to get approved by the admin quorum, signed and get the relevant wallet keyshares, which will be used for signing transactions.\n\nUse the Utila mobile app to approve and sign the service account's device.\n\n### Download the wallet keyshares\n\nNow that the device has been approved and signed by the admin quorum and encrypted wallet key shares were generated and uploaded for the new device, run the following command to download and decrypt the key shares:\\\n`./utila keys download --vault-id <vault-id> --device-id <device-id>`\n"},{"name":"Co-Signer","description":"The co-signer is a tool integrated in the CLI which allows you to sign transactions automatically.\n\nThe co-signer polls the transactions in a given vault, and operates on any transaction which is awaiting signature and for which the authenticated service account is set as the designated signer.\n\nThe co-signer has two modes of operation:\n\n- Sign all transactions - in this mode, the co-signer signs all the transactions which are designated to it.\n- Webhook - in this mode, the co-signer sends transactions which are designated to it to the specified webhook, and signs or cancels the transaction depending on the webhook's response.\n\n## Setup\n\nIn order to setup the co-signer, a device and a keyshare need to be created. Follow the steps under the [Device Creation section](https://api-preview.docs.utila.io/v2/index.html#tag/CLI/Device-Creation)\n\n## Sign all transactions\n\nIn order to run the co-signer in its basic configuration, which signs all of the relevant transactions, run the following command:\\\n`./utila cosigner run  --vault-id <vault-id> --device-id <device-id> --sign-all-txs`\n\n## Co-Signer Webhook\n\nYou can configure a webhook for the co-signer using the `--webhook-url` flag.\n\nEach transaction which is awaiting signtaure and designated to the authenticated service account will be sent to the specified webhook and based on the response the co-signer will sign or cancel the transaction.\n\nNote: Don't confuse the co-signer webhook with the event webhooks, which are configured using the console.\n\n### Webhook Input\n\nThe webhook will get the transaction object, as is supplied in the Utila API (same as in `ListTransactions`, etc.).\n\n### Webhook Output\n\nThe webhook is expected to respond with a status of `200 OK` and a JSON containing a boolean field `signTransaction`, which indicates if the transaction should be signed or canceled. For example:\n\n```json\n{\n  \"signTransaction\": true\n}\n```\n"},{"name":"Changelog","description":"The current API version is v2.\nv1alpha1 is planned to be deprecated by 01/03/2025.\n"}],"paths":{"/v2/vaults/{vault_id}/addressBookEntries":{"get":{"summary":"ListAddressBookEntries","description":"Retrieve a list of all address book entries in a vault.","operationId":"AddressBook_ListAddressBookEntries","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v2ListAddressBookEntriesResponse"}}}}},"parameters":[{"name":"vault_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"pageSize","description":"The maximum number of address book entries to return.\nThe service may return fewer than this value.\nIf unspecified, at most 50 address book entries will be returned.\nThe maximum value is 1000; values above 1000 will be coerced to 1000.","in":"query","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"pageToken","description":"A page token, received from a previous `ListAddressBookEntries` call.\nProvide this to retrieve the subsequent page.\n\nWhen paginating, all other parameters provided to `ListAddressBookEntries` must\nmatch the call that provided the page token.","in":"query","required":false,"schema":{"type":"string"}},{"name":"filter","description":"A filter expression that filters address book entries listed in the response.\n\nThe expression must specify the field name, a comparison operator, and the value that you want to use for filtering. The value must be a string, a number, or a boolean. The comparison operator must be either `=`, `!=`, `>`, or `<`.\n\nFor example, if you are filtering address book entries, you can include address book entries of a specific network: `network = \"networks/ethereum-mainnet\"`.\n\nFor more information about filtering, see [API Filtering](https://aip.dev/160).","in":"query","required":false,"schema":{"type":"string"}},{"name":"orderBy","description":"A comma-separated list of fields by which to order the results.\nValid fields are:\n  * `create_time`\n  * `display_name`\n  * `address`\n  * `network`\n\nThe default sorting order is ascending. To specify descending order for a field, a suffix ` desc` should be appended to the field name. For example: `create_time desc`.\n\nRedundant field names are collapsed. For example if one specifies `create_time desc, create_time`, the results will be sorted by `create_time desc` only.\n\nIf a field is not specified, the results will be sorted by the default sorting order.","in":"query","required":false,"schema":{"type":"string"}}],"tags":["Address Book"]}},"/v2/vaults/{vault_id}/addressBookEntries:batchGet":{"get":{"summary":"BatchGetAddressBookEntries","description":"Retrieve multiple address book entries by resource name.","operationId":"AddressBook_BatchGetAddressBookEntries","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v2BatchGetAddressBookEntriesResponse"}}}}},"parameters":[{"name":"vault_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"names","description":"The resource names of the address book entries to retrieve.\n\nFormat: `vaults/{vault_id}/addressBookEntries/{entry_id}`","in":"query","required":true,"explode":true,"schema":{"type":"array","items":{"type":"string"}}}],"tags":["Address Book"]}},"/v2/vaults/{vault_id}/addressBookEntries:batchCreate":{"post":{"summary":"BatchCreateAddressBookEntries","description":"Batch creates address book entries.","operationId":"AddressBook_BatchCreateAddressBookEntries","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v2BatchCreateAddressBookEntriesResponse"}}}}},"parameters":[{"name":"vault_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddressBookBatchCreateAddressBookEntriesBody"}}},"required":true},"tags":["Address Book"]}},"/v2/assets/{asset_id}":{"get":{"summary":"GetAsset","description":"Retrieves an asset by resource name.","operationId":"Assets_GetAsset","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v2GetAssetResponse"}}}}},"parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string"}}],"tags":["Assets"]}},"/v2/assets:batchGet":{"get":{"summary":"BatchGetAssets","description":"Retrieves a list of assets by resource name.","operationId":"Assets_BatchGetAssets","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v2BatchGetAssetsResponse"}}}}},"parameters":[{"name":"names","description":"Repeated resource names of the requested assets.\n\nFormat: `assets/{asset_id}`","in":"query","required":true,"explode":true,"schema":{"type":"array","items":{"type":"string"}}}],"tags":["Assets"]}},"/v2/vaults/{vault_id}/assets/{asset_id}":{"get":{"summary":"GetVaultAsset","description":"Retrieves a vault scoped asset (imported token or custom chain token) by resource name.","operationId":"Assets_GetVaultAsset","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v2GetVaultAssetResponse"}}}}},"parameters":[{"name":"vault_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"asset_id","in":"path","required":true,"schema":{"type":"string"}}],"tags":["Assets"]}},"/v2/vaults/{vault_id}:queryBalances":{"post":{"summary":"QueryBalances","description":"Retrieve a list of all asset balances in all wallets in a vault.","operationId":"Balances_QueryBalances","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v2QueryBalancesResponse"}}}}},"parameters":[{"name":"vault_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BalancesQueryBalancesBody"}}},"required":true},"tags":["Balances"]}},"/v2/vaults/{vault_id}/wallets/{wallet_id}:queryBalances":{"post":{"summary":"QueryWalletBalances","description":"Retrieve a list of all asset balances in a wallet. Can be used also to retrieve assets across all wallets as per\n[AIP-159](https://google.aip.dev/159) by using '-' (the hyphen or dash character) as a wildcard character instead of wallet ID in the parent.","operationId":"Balances_QueryWalletBalances","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v2QueryWalletBalancesResponse"}}}}},"parameters":[{"name":"vault_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"wallet_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BalancesQueryWalletBalancesBody"}}},"required":true},"tags":["Balances"]}},"/v2/vaults/{vault_id}/wallets/{wallet_id}/addresses/{address_id}:queryBalances":{"post":{"summary":"QueryWalletAddressBalances","description":"Retrieve a list of all asset balances in a wallet address. Can be used also to retrieve assets across all wallet adresses of a wallet as per\n[AIP-159](https://google.aip.dev/159) by using '-' (the hyphen or dash character) as a wildcard character instead of wallet address ID in the parent.","operationId":"Balances_QueryWalletAddressBalances","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v2QueryWalletAddressBalancesResponse"}}}}},"parameters":[{"name":"vault_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"wallet_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"address_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BalancesQueryWalletAddressBalancesBody"}}},"required":true},"tags":["Balances"]}},"/v2/vaults/{vault_id}:refreshAssetAddressBalance":{"post":{"summary":"RefreshAssetAddressBalance","description":"Refreshes address balance for given address.","operationId":"Balances_RefreshAssetAddressBalance","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v2RefreshAssetAddressBalanceResponse"}}}}},"parameters":[{"name":"vault_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BalancesRefreshAssetAddressBalanceBody"}}},"required":true},"tags":["Balances"]}},"/v2/vaults/{vault_id}/wallets/{wallet_id}:queryUTXOs":{"post":{"summary":"QueryWalletUTXOs","description":"Retrieve a list of all UTXOs in a wallet.","operationId":"Balances_QueryWalletUTXOs","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v2QueryWalletUTXOsResponse"}}}}},"parameters":[{"name":"vault_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"wallet_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BalancesQueryWalletUTXOsBody"}}},"required":true},"tags":["Balances"]}},"/v2/networks/{network_id}":{"get":{"summary":"GetNetwork","description":"Retrieves a Network by resource name.","operationId":"Blockchains_GetNetwork","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v2GetNetworkResponse"}}}}},"parameters":[{"name":"network_id","in":"path","required":true,"schema":{"type":"string"}}],"tags":["Blockchains"]}},"/v2/networks":{"get":{"summary":"ListNetworks","description":"Returns the list of networks available for use.\n\nTo list custom EVM networks, use [ListVaultNetworks](#operation/Blockchains_ListVaultNetworks)","operationId":"Blockchains_ListNetworks","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v2ListNetworksResponse"}}}}},"parameters":[{"name":"pageSize","description":"The maximum number of items to return. The service may return fewer than this value.\n\nNote: pagination is currently not supported.","in":"query","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"pageToken","description":"A page token, received from the previous list call as `nextPageToken`.\n\nNote: pagination is currently not supported.","in":"query","required":false,"schema":{"type":"string"}}],"tags":["Blockchains"]}},"/v2/vaults/{vault_id}/networks":{"get":{"summary":"ListVaultNetworks","description":"Returns the list of vault networks available for use.","operationId":"Blockchains_ListVaultNetworks","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v2ListVaultNetworksResponse"}}}}},"parameters":[{"name":"vault_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"pageSize","description":"Note: pagination is currently not supported.","in":"query","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"pageToken","description":"A page token, received from the previous list call as `nextPageToken`.\n\nNote: pagination is currently not supported.","in":"query","required":false,"schema":{"type":"string"}}],"tags":["Blockchains"]}},"/v2/networks/{network_id}/batchContracts/latest":{"get":{"summary":"GetLatestBatchContract","description":"Retrieves the latest BatchContract. Batch transfer of ERC20 tokens require a token approval for that contract.","operationId":"Blockchains_GetLatestBatchContract","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v2BatchContract"}}}}},"parameters":[{"name":"network_id","in":"path","required":true,"schema":{"type":"string"}}],"tags":["Blockchains"]}},"/v2/vaults/{vault_id}/transactions/{transaction_id}":{"get":{"summary":"GetTransaction","description":"Retrieves a transaction by resource name.","operationId":"Transactions_GetTransaction","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v2GetTransactionResponse"}}}}},"parameters":[{"name":"vault_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"transaction_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"includeReferencedResources","description":"Include referenced resources in the response.","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"view","description":"The view of the transaction.\n\n - BASIC: The default view. Does not include certain fields such as blocking transactions.\n - FULL: Full view, include all fields.","in":"query","required":false,"schema":{"type":"string","enum":["BASIC","FULL"]}}],"tags":["Transactions"]}},"/v2/vaults/{vault_id}/transactions:batchGet":{"get":{"summary":"BatchGetTransactions","description":"Retrieves multiple transactions by resource name.","operationId":"Transactions_BatchGetTransactions","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v2BatchGetTransactionsResponse"}}}}},"parameters":[{"name":"vault_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"names","description":"The resource names of the transactions to retrieve.\n\nFormat: `vaults/{vault_id}/transactions/{transaction_id}`","in":"query","required":true,"explode":true,"schema":{"type":"array","items":{"type":"string"}}},{"name":"includeReferencedResources","description":"Include referenced resources in the response.","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"view","description":"The view of the transaction.\n\n - BASIC: The default view. Does not include certain fields such as blocking transactions.\n - FULL: Full view, include all fields.","in":"query","required":false,"schema":{"type":"string","enum":["BASIC","FULL"]}}],"tags":["Transactions"]}},"/v2/vaults/{vault_id}/transactions":{"get":{"summary":"ListTransactions","description":"Retrieve a list of all transactions in a vault.","operationId":"Transactions_ListTransactions","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v2ListTransactionsResponse"}}}}},"parameters":[{"name":"vault_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"filter","description":"A filter string to filter the results.\nMore details about filtering can be found in the [Filtering Documentation Page](https://docs.utila.io/reference/filtering).\n\nSupported fields and functions:\n| Name | Type | Description | Example |\n|------|------|-------------|---------|\n| `create_time` | `string` | Filter by creation time. | `create_time > \"2023-08-29T18:04:00Z\"` |\n| `state` | `function(enum...)` | Filter by one or more states. | `state(AWAITING_APPROVAL,AWAITING_SIGNATURE)` |\n| `spam` | `function(bool)` | Filter by spam status. | `spam(false)` |\n| `from_wallet` | `function(string...)` | Filter by one or more source wallets. | `from_wallet(\"0x1234567890\")` |\n| `to_wallet` | `function(string...)` | Filter by one or more destination wallets. | `to_wallet(\"0x1234567890\")` |\n| `pending_user_approval` | `function(string)` | Filter by user for which the transaction is awaiting approval | `pending_user_approval(\"users/name@example.com\")` |\n| `asset` | `function(string...)` | Filter by one or more assets. Supports v2 asset aliases. | `asset(\"assets/erc20.ethereum-mainnet.0x6b175474e89094c44da98b954eedeac495271d0f\")` |\n| `external_id` | `function(string)` | Filter by client-provided external ID. | `external_id(\"order-123\")` |","in":"query","required":false,"schema":{"type":"string"}},{"name":"orderBy","description":"SQL-like ordering specifications.\nSupports the field `create_time`.","in":"query","required":false,"schema":{"type":"string"}},{"name":"pageSize","description":"The maximum number of items to return. The service may return fewer than\nthis value.\n\nIf unspecified, at most 50 will be returned.","in":"query","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"pageToken","description":"A page token, received from the previous list call as `nextPageToken`.\nProvide this to retrieve the subsequent page.\n\nWhen paginating, all other parameters must match the call that provided\nthe page token.","in":"query","required":false,"schema":{"type":"string"}},{"name":"skip","description":"How many results to skip.\n\nNote: may be used alongside token-based pagination (see `pageToken`),\nalthough this won't be needed for most use cases.","in":"query","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"includeReferencedResources","description":"Include referenced resources in the response.","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"view","description":"The view of the transaction.\n\n - BASIC: The default view. Does not include certain fields such as blocking transactions.\n - FULL: Full view, include all fields.","in":"query","required":false,"schema":{"type":"string","enum":["BASIC","FULL"]}}],"tags":["Transactions"]}},"/v2/vaults/{vault_id}/transactions:initiate":{"post":{"summary":"InitiateTransaction","description":"Initiate a new transaction.","operationId":"Transactions_InitiateTransaction","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v2InitiateTransactionResponse"}}}}},"parameters":[{"name":"vault_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionsInitiateTransactionBody"}}},"required":true},"tags":["Transactions"]}},"/v2/vaults/{vault_id}/transactionRequests/{transaction_request_id}:vote":{"post":{"summary":"VoteOnTransactionRequest","description":"Vote on a transaction request.","operationId":"Transactions_VoteOnTransactionRequest","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v2VoteOnTransactionRequestResponse"}}}}},"parameters":[{"name":"vault_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"transaction_request_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionsVoteOnTransactionRequestBody"}}},"required":true},"tags":["Transactions"]}},"/v2/vaults/{vault_id}/transactions:estimateFee":{"post":{"summary":"EstimateTransactionFee","description":"Estimate the fee for a transaction.","operationId":"Transactions_EstimateTransactionFee","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v2EstimateTransactionFeeResponse"}}}}},"parameters":[{"name":"vault_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionsEstimateTransactionFeeBody"}}},"required":true},"tags":["Transactions"]}},"/v2/vaults/{vault_id}/transactions/{transaction_id}/simulations/latest":{"get":{"summary":"GetLatestTransactionSimulation","operationId":"Transactions_GetLatestTransactionSimulation","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v2GetLatestTransactionSimulationResponse"}}}}},"parameters":[{"name":"vault_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"transaction_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"includeReferencedResources","description":"Include referenced resources in the response.","in":"query","required":false,"schema":{"type":"boolean"}}],"tags":["Transactions"]}},"/v2/vaults/{vault_id}/transactions/{transaction_id}:cancel":{"post":{"summary":"CancelTransaction","description":"Cancels a transaction. Used to cancel a transaction before it is signed.\n\nOnly the transaction's initiator or an admin can cancel a transaction.\n\nIf the transaction has already been signed, use\n[ReplaceTransaction](#tag/Transactions/operation/Transactions_ReplaceTransaction) instead.","operationId":"Transactions_CancelTransaction","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v2CancelTransactionResponse"}}}}},"parameters":[{"name":"vault_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"transaction_id","in":"path","required":true,"schema":{"type":"string"}}],"tags":["Transactions"]}},"/v2/vaults/{vault_id}/transactions/{transaction_id}:replace":{"post":{"summary":"ReplaceTransaction","description":"Creates a new transaction that replaces an existing signed transaction in the system which has not been mined yet.\n\nOnly works for blockchains that support replacement of signed transactions, e.g.\n- Ethereum - which has nonce management.\n- BTC - which has RBF (Replace-By-Fee) and CPFP (Child-Pays-For-Parent) mechanisms.\n\nSome blockchains do not support transaction replacement, e.g. TRON - which is based on\ntransaction expiration time - for these cases, the transaction will be either mined or\nexpired after the configured expiration time.\n\nIf the transaction has not been signed yet, and you wish to cancel it, use\n[CancelTransaction](#tag/Transactions/operation/Transactions_CancelTransaction)\ninstead.","operationId":"Transactions_ReplaceTransaction","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v2ReplaceTransactionResponse"}}}}},"parameters":[{"name":"vault_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"transaction_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionsReplaceTransactionBody"}}},"required":true},"tags":["Transactions"]}},"/v2/vaults/{vault_id}/transactions/{transaction_id}:publish":{"post":{"summary":"PublishTransaction","description":"Manually publishes a signed transaction to the blockchain. This endpoint synchronously\nbroadcasts the transaction to the network and returns the updated transaction details.\nThe transaction must be fully signed before publishing.\n\n**Note:** Currently only available for EVM-compatible blockchains. Support for additional\nblockchains will be added in future releases.","operationId":"Transactions_PublishTransaction","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v2PublishTransactionResponse"}}}}},"parameters":[{"name":"vault_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"transaction_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionsPublishTransactionBody"}}},"required":true},"tags":["Transactions"]}},"/v2/vaults/{vault_id}/transactions/{transaction_id}/amlScreening":{"get":{"summary":"GetTransactionAMLScreening","description":"If the transaction was screened for AML, this endpoint will return the results. Relevant where screening is configured.","operationId":"Transactions_GetTransactionAMLScreening","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v2GetTransactionAMLScreeningResponse"}}}}},"parameters":[{"name":"vault_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"transaction_id","in":"path","required":true,"schema":{"type":"string"}}],"tags":["Transactions"]}},"/v2/vaults/{vault_id}":{"get":{"summary":"GetVault","description":"Retrieve a vault by resource name.","operationId":"Vaults_GetVault","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v2GetVaultResponse"}}}}},"parameters":[{"name":"vault_id","in":"path","required":true,"schema":{"type":"string"}}],"tags":["Vaults"]}},"/v2/vaults":{"get":{"summary":"ListVaults","description":"Retrieve a list of all vaults accessible to the authenticated user.","operationId":"Vaults_ListVaults","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v2ListVaultsResponse"}}}}},"parameters":[{"name":"orderBy","description":"SQL-like ordering specifications.\nSupports the fields `display_name` and `create_time`.","in":"query","required":false,"schema":{"type":"string"}},{"name":"pageSize","description":"The maximum number of items to return. The service may return fewer than this value.","in":"query","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"pageToken","description":"A page token, received from the previous list call as `nextPageToken`.\nProvide this to retrieve the subsequent page.\n\nWhen paginating, all other parameters must match the call that provided\nthe page token.","in":"query","required":false,"schema":{"type":"string"}},{"name":"skip","description":"How many results to skip.\n\nNote: may be used alongside token-based pagination (see `pageToken`),\nalthough this won't be needed for most use cases.","in":"query","required":false,"schema":{"type":"integer","format":"int32"}}],"tags":["Vaults"]}},"/v2/vaults/{vault_id}/wallets":{"get":{"summary":"ListWallets","description":"Retrieve a list of all wallets in a vault.","operationId":"Wallets_ListWallets","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v2ListWalletsResponse"}}}}},"parameters":[{"name":"vault_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"view","description":"Whether to include the converted value (`wallet.converted_value`) in the response.\n\n - BASIC: The default view. Does not include the converted value.\n - FULL: Calculate and include the converted value and additional fields.","in":"query","required":false,"schema":{"type":"string","enum":["BASIC","FULL"]}},{"name":"showArchived","description":"Optional. When true, archived wallets are included together with non-archived wallets.\nWhen false or omitted, only non-archived wallets are returned.","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"filter","description":"Filter results using EBNF syntax.\n\nSupported fields:\n* `displayName` (with regex support)\n* `createTime`\n* `external`\n\nSupported functions:\n* `wallet_archived()` - matches archived wallets. Takes no arguments.\n  Use together with `show_archived` to get only archived wallets.\n\nExamples:\n- `displayName = \"My Wallet\"` (All wallets with the display name \"My Wallet\")\n- `regex(displayName, \"^My \")` (All wallets with names starting with \"My \")\n- `regex(displayName, \"(?i)^mY \")` (All wallets with names starting with \"My \", case insensitive)\n- `external`, `-external`, `NOT external`\n- `createTime > \"2023-08-29T18:04:00Z\"`\n- `createTime > \"2023-08-29T18:04:00Z\" AND displayName = \"My Wallet\"`\n- `wallet_archived()` (Archived wallets only; set `show_archived` so archived wallets are returned)","in":"query","required":false,"schema":{"type":"string"}},{"name":"orderBy","description":"SQL-like ordering specifications.\nSupports the fields\n* `display_name`\n* `create_time`\n* `update_time`\n* `converted_value.amount` (available through the FULL view).","in":"query","required":false,"schema":{"type":"string"}},{"name":"pageSize","description":"The maximum number of items to return. The service may return fewer than\nthis value.\n\nIf unspecified, at most 50 will be returned.\nThe maximum value is 1000; values above 1000 will be coerced to 1000.","in":"query","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"pageToken","description":"A page token, received from the previous list call as `nextPageToken`.\nProvide this to retrieve the subsequent page.\n\nWhen paginating, all other parameters must match the call that provided\nthe page token.","in":"query","required":false,"schema":{"type":"string"}},{"name":"skip","description":"How many results to skip.\n\nNote: may be used alongside token-based pagination (see `pageToken`),\nalthough this won't be needed for most use cases.","in":"query","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"includeReferencedResources","description":"Include referenced resources in the response.","in":"query","required":false,"schema":{"type":"boolean"}}],"tags":["Wallets"]},"post":{"summary":"CreateWallet","description":"Create a new wallet.","operationId":"Wallets_CreateWallet","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v2CreateWalletResponse"}}}}},"parameters":[{"name":"vault_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/v2Wallet"}}},"description":"The wallet resource to create.","required":true},"tags":["Wallets"]}},"/v2/vaults/{vault_id}/wallets/{wallet_id}":{"get":{"summary":"GetWallet","description":"Retrieve a wallet by resource name.","operationId":"Wallets_GetWallet","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v2GetWalletResponse"}}}}},"parameters":[{"name":"vault_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"wallet_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"view","description":"Whether to include the converted value (`wallet.converted_value`) in the response.\n\n - BASIC: The default view. Does not include the converted value.\n - FULL: Calculate and include the converted value and additional fields.","in":"query","required":false,"schema":{"type":"string","enum":["BASIC","FULL"]}},{"name":"includeReferencedResources","description":"Include referenced resources in the response.","in":"query","required":false,"schema":{"type":"boolean"}}],"tags":["Wallets"]}},"/v2/vaults/{vault_id}/wallets:batchGet":{"get":{"summary":"BatchGetWallets","description":"Retrieve multiple wallets by resource name.","operationId":"Wallets_BatchGetWallets","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v2BatchGetWalletsResponse"}}}}},"parameters":[{"name":"vault_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"names","description":"The resource names of the wallets to retrieve.\n\nFormat: `vaults/{vault_id}/wallets/{wallet_id}`","in":"query","required":true,"explode":true,"schema":{"type":"array","items":{"type":"string"}}},{"name":"view","description":"Whether to include the converted value (`wallet.converted_value`) in the response.\n\n - BASIC: The default view. Does not include the converted value.\n - FULL: Calculate and include the converted value and additional fields.","in":"query","required":false,"schema":{"type":"string","enum":["BASIC","FULL"]}}],"tags":["Wallets"]}},"/v2/vaults/{vault_id}/wallets/{wallet_id}:archive":{"post":{"summary":"ArchiveWallet","description":"Archive a wallet.","operationId":"Wallets_ArchiveWallet","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{}}}}}},"parameters":[{"name":"vault_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"wallet_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletsArchiveWalletBody"}}},"required":true},"tags":["Wallets"]}},"/v2/vaults/{vault_id}/wallets:batchArchive":{"post":{"summary":"BatchArchiveWallets","description":"Archive multiple wallets.","operationId":"Wallets_BatchArchiveWallets","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{}}}}}},"parameters":[{"name":"vault_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletsBatchArchiveWalletsBody"}}},"required":true},"tags":["Wallets"]}},"/v2/vaults/{vault_id}/wallets/{wallet_id}:unarchive":{"post":{"summary":"UnarchiveWallet","description":"Unarchive a wallet.","operationId":"Wallets_UnarchiveWallet","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{}}}}}},"parameters":[{"name":"vault_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"wallet_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletsUnarchiveWalletBody"}}},"required":true},"tags":["Wallets"]}},"/v2/vaults/{vault_id}/wallets:batchUnarchive":{"post":{"summary":"BatchUnarchiveWallets","description":"Unarchive multiple wallets.","operationId":"Wallets_BatchUnarchiveWallets","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{}}}}}},"parameters":[{"name":"vault_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletsBatchUnarchiveWalletsBody"}}},"required":true},"tags":["Wallets"]}},"/v2/vaults/{vault_id}/wallets/{wallet_id}/addresses":{"get":{"summary":"ListWalletAddresses","description":"Retrieve a list of all wallet addresses of a specific wallet.","operationId":"Wallets_ListWalletAddresses","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v2ListWalletAddressesResponse"}}}}},"parameters":[{"name":"vault_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"wallet_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"pageSize","description":"The maximum number of items to return. The service may return fewer than this value.\n\nIf unspecified, at most 50 will be returned. The maximum value is 1000; values above 1000 will be coerced to 1000.","in":"query","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"pageToken","description":"A page token, received from the previous list call as `nextPageToken`.","in":"query","required":false,"schema":{"type":"string"}},{"name":"skip","description":"How many results to skip.\n\nNote: may be used alongside token-based pagination (see `pageToken`),\nalthough this won't be needed for most use cases.","in":"query","required":false,"schema":{"type":"integer","format":"int32"}}],"tags":["Wallets"]},"post":{"summary":"CreateWalletAddress","description":"Generates a new address in a wallet for the specificied blockchain network.\n\nThe address is derived from the appropriate MPC key that is used by that blockchain,\ni.e. ECDSA for Bitcoin and Ethereum, and EdDSA for Solana.\nThe MPC key will be selected automatically for you. If a key is not available,\nan error will be returned.\n\nCurrently, creation of multiple addresses is supported only for UTXO-based blockchains.\n\nAddresses in the EVM protocol family (Ethereum, Binance Smart Chain, etc.) generated in\nthe same wallet will share the same address. This abstraction is useful for DeFi applications,\nwhere identical addresses are used across multiple blockchains.","operationId":"Wallets_CreateWalletAddress","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v2CreateWalletAddressResponse"}}}}},"parameters":[{"name":"vault_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"wallet_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/v2WalletAddress"}}},"description":"The wallet address resource to create.","required":true},"tags":["Wallets"]}},"/v2/vaults/{vault_id}/wallets/{wallet_id}/addresses/{address_id}":{"get":{"summary":"GetWalletAddress","description":"Retrieve a wallet address by resource name.","operationId":"Wallets_GetWalletAddress","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v2GetWalletAddressResponse"}}}}},"parameters":[{"name":"vault_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"wallet_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"address_id","in":"path","required":true,"schema":{"type":"string"}}],"tags":["Wallets"]}},"/v2/vaults/{vault_id}/wallets/{wallet_id}/addresses:batchGet":{"get":{"summary":"BatchGetWalletAddresses","description":"Retrieve multiple wallet addresses by resource name.","operationId":"Wallets_BatchGetWalletAddresses","responses":{"200":{"description":"A successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/v2BatchGetWalletAddressesResponse"}}}}},"parameters":[{"name":"vault_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"wallet_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"names","description":"The resource names of the wallet addresses to retrieve.\n\nFormat: `vaults/{vault_id}/wallets/{wallet_id}/addresses/{address_id}`","in":"query","required":true,"explode":true,"schema":{"type":"array","items":{"type":"string"}}}],"tags":["Wallets"]}}},"servers":[{"url":"https://api.utila.io"}],"components":{"schemas":{"AddressBookBatchCreateAddressBookEntriesBody":{"type":"object","properties":{"requests":{"type":"array","items":{"$ref":"#/components/schemas/v2CreateAddressBookEntryRequest"},"description":"The individual create requests for each address book entry."}},"required":["requests"]},"AssetTokenInfoStandardEnum":{"type":"string","enum":["ERC20","ERC721","ERC1155","TRC20","SPL_TOKEN","SPL_TOKEN_2022","ICS20","JETTON","TIP20"],"description":" - ERC20: ERC20 is the most common fungible token standard.\n - ERC721: ERC721 is the most common non-fungible token standard.\n - ERC1155: ERC1155 is a newer token standard that allows for multiple tokens to be\nheld in a single contract.\n - TRC20: TRC20 is the most common tron's fungible token standard.\n - SPL_TOKEN: SPL Token - solana's token standard.\n - SPL_TOKEN_2022: Token2020 - solana's new token extension for spl tokens.\n - ICS20: ICS20 cosmos's token standard.\n - JETTON: JETTON TON's token standard.\n - TIP20: TIP20 is the Tempo blockchain token standard (ERC-20 extension with compliance features)."},"AssetTransferStellarOptions":{"type":"object","properties":{"memo":{"description":"Optional typed memo for Stellar native and token transfers.\n\nWhen set, the type must be explicit (TEXT, ID, HASH, or RETURN).\nSee StellarTransaction.Memo for format and validation rules.\nIf not set for a Stellar transfer, no memo is attached.","allOf":[{"$ref":"#/components/schemas/apiv2StellarTransactionMemo"}]}},"title":"Blockchain specific options for Stellar Asset Transfer"},"AssetTransferXRPLOptions":{"type":"object","properties":{"destinationTag":{"type":"string","description":"Destination tag for XRPL (XRP) transfers.\n\nDecimal string of a 32-bit unsigned integer in the range 0..4294967295 (XRPL DestinationTag).\nEmpty string is invalid when this field is set; omit the field entirely when no tag applies."}},"title":"Blockchain specific options for XRPL Asset Transfer"},"BTCDetailsBTCNetworkDetails":{"type":"object","properties":{"network":{"type":"string","example":"networks/bitcoin-mainnet","description":"A specific btc network of the wallet.","readOnly":true},"mainAddress":{"type":"string","description":"The main deposit address of the wallet in the network.","readOnly":true},"xpub":{"type":"string","description":"The xpub of the wallet in the network. Included only when `FULL` view is requested.","readOnly":true}}},"BTCTransactionUTXOIn":{"type":"object","properties":{"address":{"description":"Input address.","allOf":[{"$ref":"#/components/schemas/apiv2Address"}]},"amount":{"type":"string","description":"Amount in asset unit (BTC)."},"signingSession":{"type":"string","example":"vaults/2d2e40r3/signingSessions/132e40r3","description":"The signing session which was used to sign the input. Available when the transaction has been prepared for signing / signed.\n\nDeprecated: Use request.signing_sessions instead."}}},"BTCTransactionUTXOOut":{"type":"object","properties":{"address":{"description":"Output address.","allOf":[{"$ref":"#/components/schemas/apiv2Address"}]},"amount":{"type":"string","description":"Amount in asset unit (BTC)."}}},"BalancesQueryBalancesBody":{"type":"object","properties":{"filter":{"type":"string","description":"Filter results using EBNF syntax.\n\nSupported functions:\n* `asset(asset_name)` (example: `asset(\"assets/native.ethereum-mainnet\")`)\n* `network(network_name)` (example: `network(\"networks/ethereum-mainnet\")`)\n* `wallet_external()` (example: `wallet_external()`)"},"pageSize":{"type":"integer","format":"int32","description":"The maximum number of items to return. The service may return fewer than this value."},"pageToken":{"type":"string","description":"A page token, received from the previous list call as `nextPageToken`."},"includeReferencedResources":{"type":"boolean","description":"Include referenced resources in the response."}}},"BalancesQueryWalletAddressBalancesBody":{"type":"object","properties":{"filter":{"type":"string","description":"Filter results using EBNF syntax.\n\nSupported functions:\n* `asset(asset_name)` (example: `asset(\"assets/native.ethereum-mainnet\")`)\n* `network(network_name)` (example: `network(\"networks/ethereum-mainnet\")`)\n* `wallet_external()` (example: `wallet_external()`)"},"pageSize":{"type":"integer","format":"int32","description":"The maximum number of items to return. The service may return fewer than this value."},"pageToken":{"type":"string","description":"A page token, received from the previous list call as `nextPageToken`."},"includeReferencedResources":{"type":"boolean","description":"Include referenced resources in the response."}}},"BalancesQueryWalletBalancesBody":{"type":"object","properties":{"filter":{"type":"string","description":"Filter results using EBNF syntax.\n\nSupported functions:\n* `asset(asset_name)` (example: `asset(\"assets/native.ethereum-mainnet\")`)\n* `network(network_name)` (example: `network(\"networks/ethereum-mainnet\")`)\n* `wallet_external()` (example: `wallet_external()`)"},"pageSize":{"type":"integer","format":"int32","description":"The maximum number of items to return. The service may return fewer than this value."},"pageToken":{"type":"string","description":"A page token, received from the previous list call as `nextPageToken`."},"includeReferencedResources":{"type":"boolean","description":"Include referenced resources in the response."}}},"BalancesQueryWalletUTXOsBody":{"type":"object","properties":{"network":{"type":"string","description":"The resource name of the network whose UTXOs are to be listed.\n\nFormat: `networks/{network_id}`."},"filter":{"type":"string","description":"Filter results using EBNF syntax.\n\nSupported fields:\n* `txHash` (example: `txHash = \"60887d40d469af2b52cf7dc35e6c33241610aa22ca0c8d0d5e4d9027e91c2946\"`)\n* `address` (example: `address = \"bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4\"`)\n* `state` (example: `state = AVAILABLE OR state = FROZEN`)"},"orderBy":{"type":"string","description":"SQL-like ordering specifications.\nSupports the fields `create_time`, `value`."},"pageSize":{"type":"integer","format":"int32","description":"The maximum number of items to return. The service may return fewer than\nthis value.\n\nIf unspecified, at most 50 will be returned.\nThe maximum value is 100; values above 100 will be coerced to 100."},"pageToken":{"type":"string","description":"A page token, received from the previous list call as `nextPageToken`.\nProvide this to retrieve the subsequent page.\n\nWhen paginating, all other parameters must match the call that provided\nthe page token."},"skip":{"type":"integer","format":"int32","description":"How many results to skip.\n\nNote: may be used alongside token-based pagination (see `pageToken`),\nalthough this won't be needed for most use cases."},"includeReferencedResources":{"type":"boolean","description":"Include referenced resources in the response."}},"required":["network"]},"BalancesRefreshAssetAddressBalanceBody":{"type":"object","properties":{"asset":{"type":"string","example":"assets/e72ff35a5b15"},"address":{"type":"string"},"includeReferencedResources":{"type":"boolean","description":"Include referenced resources in the response."}},"required":["asset","address"]},"BatchAssetTransferBatchTransferDestination":{"type":"object","properties":{"destination":{"type":"string","description":"The destination of the transfer.\n\nCan be one of the following:\n1. A raw string address (example: `0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48` or `bc1q3vfght7rln2c3733dl42navt8pslfya7talfns`)\n2. A wallet: `vaults/{vault_id}/wallets/{wallet_id}`.\n3. A specific wallet address: `vaults/{vault_id}/wallets/{wallet_id}/addresses/{address_id}`."},"amount":{"type":"string","description":"The amount of the asset to transfer for this entry in asset units.\n\nExample: `1.1`."},"note":{"type":"string","description":"The note to attach to the transfer.\n\nThis note will be visible to all vault members."}},"title":"BatchTransferDestination","required":["destination","amount"]},"DecodedCallArg":{"type":"object","properties":{"name":{"type":"string","title":"The name of the argument, for example: \"dest\""},"type":{"type":"string","title":"The type of the argument, for example: \"AccountId\""},"value":{"type":"string","title":"The value of the argument as a hex encoded byte array, for example: \"0x1234\""}}},"NetworkCAIPDetails":{"type":"object","properties":{"chainId":{"type":"string","example":"eip155:1","description":"The CAIP-2 compliant chain id.\n\nFormat: `{namespace}:{reference}`"},"namespace":{"type":"string","example":"eip155","description":"The CAIP-2 compliant namespace.\n\nSee: https://github.com/ChainAgnostic/namespaces\n\nFormat: `[-a-z0-9]{3,8}`"},"reference":{"type":"string","example":"1","description":"The CAIP-2 compliant reference.\n\nFormat: `[-_a-zA-Z0-9]{1,32}`"}},"description":"Chain-Agnostic Identifiers (CAIP) details for this network."},"OperationBody":{"type":"object","properties":{"raw":{"type":"string","format":"byte","x-protoOneof":"type"},"payment":{"$ref":"#/components/schemas/OperationBodyPayment"},"createAccount":{"$ref":"#/components/schemas/OperationBodyCreateAccount"},"changeTrust":{"$ref":"#/components/schemas/OperationBodyChangeTrust"}}},"OperationBodyChangeTrust":{"type":"object","properties":{"asset":{"type":"string","description":"A Stellar asset `{asset_code}-{issuer}`.\n\nExample: `USDC-GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN`."},"limit":{"type":"string","description":"The limit of the change trust.\nFor unlimited amount, don't provide this field.\n\nExample: `10000000` (1 XLM in stroops)."}},"required":["asset"]},"OperationBodyCreateAccount":{"type":"object","properties":{"destinationAddress":{"type":"string","description":"A Stellar address (example: `GAAAAAAAACGC6SEYFBKQ33QJ2FXVEP3EJ6BE2FCVW2SSP6X5TBNQYQ`)."},"rawStartingBalance":{"type":"string","description":"Example: `10000000` (1 XLM in stroops)."}},"required":["destinationAddress","rawStartingBalance"]},"OperationBodyPayment":{"type":"object","properties":{"destinationAddress":{"type":"string","description":"A Stellar address (example: `GAAAAAAAACGC6SEYFBKQ33QJ2FXVEP3EJ6BE2FCVW2SSP6X5TBNQYQ`)."},"asset":{"type":"string","example":"USDC-GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN","description":"The asset to transfer.\n\nA Stellar asset `{asset_code}-{issuer}` (example: `USDC-GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN`)."},"rawAmount":{"type":"string","description":"Example: `10000000` (1 XLM in stroops)."}},"required":["destinationAddress","asset","rawAmount"]},"StellarTransactionDecodedOperationBody":{"type":"object","properties":{"payment":{"$ref":"#/components/schemas/StellarTransactionDecodedOperationBodyPayment"},"createAccount":{"$ref":"#/components/schemas/StellarTransactionDecodedOperationBodyCreateAccount"},"changeTrust":{"$ref":"#/components/schemas/StellarTransactionDecodedOperationBodyChangeTrust"}}},"StellarTransactionDecodedOperationBodyChangeTrust":{"type":"object","properties":{"asset":{"type":"string","description":"The asset of the change trust.\n\nExample: `assets/asset.stellar-mainnet.USDC-GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN`."},"assetRef":{"type":"string","description":"A weak reference to the asset. The reference is not guaranteed to be valid.\n\nExample: `assets/asset.stellar-mainnet.USDC-GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN`."},"limit":{"type":"string","description":"The limit of the change trust.\nFor unlimited amount, this field will be empty.\n\nExample: `10000000` (1 XLM in stroops)."},"unlimited":{"type":"boolean","description":"Whether the limit is considered by utila as unlimited."}}},"StellarTransactionDecodedOperationBodyCreateAccount":{"type":"object","properties":{"destinationAddress":{"$ref":"#/components/schemas/apiv2Address"},"startingBalance":{"type":"string"}}},"StellarTransactionDecodedOperationBodyPayment":{"type":"object","properties":{"destinationAddress":{"$ref":"#/components/schemas/apiv2Address"},"asset":{"type":"string","description":"The asset of the payment.\n\nExample: `USDC-GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN`."},"assetRef":{"type":"string","description":"A weak reference to the asset. The reference is not guaranteed to be valid.\n\nExample: `assets/asset.stellar-mainnet.USDC-GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN`."},"amount":{"type":"string","description":"The amount of the payment.\n\nExample: `10000000` (1 XLM in stroops)."}}},"StellarTransactionStellarOperation":{"type":"object","properties":{"sourceAccountAddress":{"$ref":"#/components/schemas/apiv2Address"},"rawBody":{"type":"string","format":"byte"},"decodedBody":{"$ref":"#/components/schemas/StellarTransactionDecodedOperationBody"}}},"SubstrateTransactionDecodedCall":{"type":"object","properties":{"pallet":{"type":"string","title":"The pallet to be called, for example: \"Balances\""},"palletIndex":{"type":"integer","format":"int32","title":"The index of the pallet, for example: 2"},"method":{"type":"string","title":"The method to be called, for example: \"transfer_allow_death\""},"methodIndex":{"type":"integer","format":"int32","title":"The index of the method, for example: 4"},"args":{"type":"array","items":{"$ref":"#/components/schemas/DecodedCallArg"},"title":"The arguments of the call"}}},"ThetaTransactionCoins":{"type":"object","properties":{"thetaWei":{"type":"string","description":"The amount of THETA in wei."},"tfuelWei":{"type":"string","description":"The amount of TFUEL in wei."}},"description":"Represents the amount of THETA and TFUEL coins in wei units."},"ThetaTransactionSendTransaction":{"type":"object","properties":{"inputs":{"type":"array","items":{"$ref":"#/components/schemas/ThetaTransactionTxInput"},"description":"The transaction inputs that provide the coins to be transferred."},"outputs":{"type":"array","items":{"$ref":"#/components/schemas/ThetaTransactionTxOutput"},"description":"The transaction outputs that receive the transferred coins."},"fee":{"description":"The transaction fee in THETA and TFUEL coins.","allOf":[{"$ref":"#/components/schemas/ThetaTransactionCoins"}]}},"description":"Represents a Theta send transaction with inputs, outputs, and fee."},"ThetaTransactionTxInput":{"type":"object","properties":{"address":{"description":"The address that provides the coins for this input.","allOf":[{"$ref":"#/components/schemas/apiv2Address"}]},"coins":{"description":"The amount of THETA and TFUEL coins from this input.","allOf":[{"$ref":"#/components/schemas/ThetaTransactionCoins"}]}},"description":"Represents a transaction input with address and coin amounts."},"ThetaTransactionTxOutput":{"type":"object","properties":{"address":{"description":"The address that receives the coins for this output.","allOf":[{"$ref":"#/components/schemas/apiv2Address"}]},"coins":{"description":"The amount of THETA and TFUEL coins to this output.","allOf":[{"$ref":"#/components/schemas/ThetaTransactionCoins"}]}},"description":"Represents a transaction output with address and coin amounts."},"TransactionAMLDetails":{"type":"object","properties":{"screeningState":{"$ref":"#/components/schemas/v2ScreeningStateEnum"},"screeningPolicyResult":{"description":"Relevant only if the transaction was screened by an AML provider (i.e., screening_state is READY).","allOf":[{"$ref":"#/components/schemas/v2AMLActionEnum"}]},"resolved":{"type":"boolean","description":"Relevant only if transaction assets were freezed by an AML provider. (i.e., screening_policy_result is DENY)."}}},"TransactionAMLScreeningProviderEnum":{"type":"string","enum":["CHAINALYSIS","ELLIPTIC"]},"TransactionAptosTransaction":{"type":"object","properties":{"sender":{"description":"The source of the transfer. A `0x`-prefixed hex string address.","allOf":[{"$ref":"#/components/schemas/apiv2Address"}]},"sequenceNumber":{"type":"string","format":"int64"},"payloadBytes":{"type":"string","format":"byte"},"decodedPayload":{"$ref":"#/components/schemas/v2DecodedAptosTransactionPayload"},"maxGasAmount":{"type":"string","format":"int64"},"gasUnitPrice":{"type":"string","format":"int64"},"expirationTime":{"type":"string","format":"date-time","description":"In seconds."},"chainId":{"type":"string","format":"int64"}}},"TransactionBTCTransaction":{"type":"object","properties":{"inputs":{"type":"array","items":{"$ref":"#/components/schemas/BTCTransactionUTXOIn"},"description":"Transaction inputs."},"outputs":{"type":"array","items":{"$ref":"#/components/schemas/BTCTransactionUTXOOut"},"description":"Transaction outputs."},"fee":{"type":"string","description":"Transaction fee in asset unit (BTC)."},"asset":{"type":"string","example":"assets/native.bitcoin-mainnet","description":"Asset name."}}},"TransactionEVMMessage":{"type":"object","properties":{"type":{"description":"The type of the message.","allOf":[{"$ref":"#/components/schemas/TransactionEVMMessageTypeEnum"}]},"message":{"type":"string","description":"The payload of the message as a plain UTF-8 string."},"signature":{"type":"string","format":"byte","description":"ECDSA signature (65 bytes) of the message."}}},"TransactionEVMMessageTypeEnum":{"type":"string","enum":["PERSONAL_SIGN","SIGN_TYPED_DATA_V4"],"description":"- PERSONAL_SIGN: A simple personal sign message.\n - SIGN_TYPED_DATA_V4: A structured message as defined by EIP-712. See https://eips.ethereum.org/EIPS/eip-712 for more information.","title":"Enum"},"TransactionRequestDappInfo":{"type":"object","properties":{"url":{"type":"string","description":"The URL of the dApp."}},"description":"Details of the dApp - reported from the transaction initiator, as this cannot be validated by Utila."},"TransactionRequestOriginEnum":{"type":"string","enum":["WALLET_CONNECT","EXTENSION"],"description":" - WALLET_CONNECT: Transaction received via WalletConnect connection.\n - EXTENSION: Transaction received via Extension - can not be validated by Utila."},"TransactionStellarTransactionStellarTimeBounds":{"type":"object","properties":{"minUnixTime":{"type":"string","format":"int64"},"maxUnixTime":{"type":"string","format":"int64"}}},"TransactionSubstrateTransaction":{"type":"object","properties":{"fromAddress":{"description":"The source of the transfer. A `0x`-prefixed hex string address.\nThe extrinsic dispatcher's address.","allOf":[{"$ref":"#/components/schemas/apiv2Address"}]},"nonce":{"type":"string","format":"int64","description":"The nonce of the transaction."},"encodedCall":{"type":"string","title":"The hex encoded call"},"call":{"title":"The decoded representation of the call to be made","allOf":[{"$ref":"#/components/schemas/SubstrateTransactionDecodedCall"}]},"genesisHash":{"type":"string","title":"The hex encoded genesis hash of the chain"}}},"TransactionSuiTransaction":{"type":"object","properties":{"sender":{"description":"The source of the transfer. A `0x`-prefixed hex string address.","allOf":[{"$ref":"#/components/schemas/apiv2Address"}]},"gasBudget":{"type":"string"},"gasPrice":{"type":"string"},"expirationEpoch":{"type":"string"},"txBcsBytes":{"type":"string","format":"byte"},"decodedTransaction":{"type":"string","readOnly":true}}},"TransactionThetaTransaction":{"type":"object","properties":{"sendTransaction":{"description":"A send transaction that transfers THETA and TFUEL coins between addresses.","allOf":[{"$ref":"#/components/schemas/ThetaTransactionSendTransaction"}]}},"description":"For Theta transaction: Low level transaction details."},"TransactionTokenAllowance":{"type":"object","properties":{"approverAddress":{"description":"The address of the approver.","allOf":[{"$ref":"#/components/schemas/apiv2Address"}]},"spenderAddress":{"description":"The address of the spender.","allOf":[{"$ref":"#/components/schemas/apiv2Address"}]},"asset":{"type":"string","example":"assets/native.ethereum-mainnet","description":"The asset to approve."},"amount":{"type":"string","description":"The amount to approve (allowance) in asset units.\n\nExample: `1.1`."},"miningPrice":{"description":"The price of the asset at the time of the mining.","allOf":[{"$ref":"#/components/schemas/v2ConvertedValue"}]}}},"TransactionTonTransaction":{"type":"object","properties":{"sender":{"description":"Ths source address of the transaction.","allOf":[{"$ref":"#/components/schemas/apiv2Address"}]},"seqno":{"type":"string","format":"int64","description":"The sequence number of the transaction."},"messages":{"type":"array","items":{"$ref":"#/components/schemas/TransactionTonTransactionMessage"},"title":"The messages posted to the blockchain"},"memo":{"type":"string","description":"The memo of the transaction."},"validUntil":{"type":"string","format":"int64","description":"The time the transaction is valid until."},"amount":{"type":"string","description":"The native amount passed to the transaction."}}},"TransactionTonTransactionMessage":{"type":"object","properties":{"address":{"type":"string","description":"The destination of the call."},"amount":{"type":"string","description":"Native Nanoton amount to send."},"payload":{"type":"string","title":"The payload of the message.\nIf not provided - This means this message is a contract deployment or a native transfer"},"stateInit":{"type":"string","description":"The initial state of the message."}},"required":["address","amount"]},"TransactionTransfer":{"type":"object","properties":{"sourceAddress":{"description":"Transfer source address. Not populated for BTC transactions.","allOf":[{"$ref":"#/components/schemas/apiv2Address"}]},"destinationAddress":{"description":"Transfer destination address.","allOf":[{"$ref":"#/components/schemas/apiv2Address"}]},"amount":{"type":"string","description":"Amount of the transfer."},"asset":{"type":"string","example":"assets/native.ethereum-mainnet","description":"Asset name."},"miningPrice":{"description":"The price of the asset at the time of the mining.","allOf":[{"$ref":"#/components/schemas/v2ConvertedValue"}]},"note":{"type":"string","description":"An optional note to attach to the specific transfer (possible for batch transfers)."}}},"TransactionXRPLTransaction":{"type":"object","properties":{"jsonTransactionData":{"type":"object","readOnly":true}}},"TransactionsEstimateTransactionFeeBody":{"type":"object","properties":{"details":{"description":"Input to estimate the transaction fee.\n\nChoose one of the available messages.","allOf":[{"$ref":"#/components/schemas/v2EstimateTransactionFeeRequestDetails"}]},"priority":{"title":"Priority","allOf":[{"$ref":"#/components/schemas/v2TransactionPriorityEnum"}]}},"required":["details"]},"TransactionsInitiateTransactionBody":{"type":"object","properties":{"details":{"example":{"assetTransfer":{"asset":"assets/native.ethereum-mainnet","amount":"1.5","source":"vaults/1b25635a5b3f/wallets/95257c5a522f","destination":"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"}},"description":"Input to create the transaction.\n\nChoose one of the available messages.","allOf":[{"$ref":"#/components/schemas/v2InitiateTransactionRequestDetails"}]},"priority":{"$ref":"#/components/schemas/v2TransactionPriorityEnum"},"note":{"type":"string","description":"A note to attach to the transaction.\n\nThis note will be visible to all vault members."},"designatedSigners":{"type":"array","example":["users/name@example.com"],"items":{"type":"string"},"description":"If the transaction is designated to be signed by a specific signer, this field should be set.\n\nFormat: `users/{email}` or `users/{id}`\n\nExample: `[\"users/name@example.com\"]` or `[\"users/a3e4f5\"]`"},"validateOnly":{"type":"boolean","description":"If set to true, the transaction will be validated but not created."},"requestId":{"type":"string","example":"4ba6b3b1-ee91-4dcf-a4b3-e4487d7f0f46","description":"An optional request ID to identify requests. Specify a unique request ID\nso that if you must retry your request, the server will know to ignore\nthe request if it has already been completed. The server will guarantee\nthat for at least 60 minutes after the first request.\n\nThe request ID must be a valid UUID with the exception that zero UUID is\nnot supported (00000000-0000-0000-0000-000000000000)."},"externalId":{"type":"string","description":"A client-provided identifier for the transaction.\n\nMust be unique per vault. Can be used to correlate the transaction\nwith an entity in an external system."},"runSimulation":{"type":"boolean","description":"Run a simulation against a blockchain node to get the estimated execution results of the transaction like balance changes."},"expireTime":{"type":"string","format":"date-time","description":"The expiration time of the transaction.\n\nExample: `2025-06-10T12:30:05Z`"},"includeReferencedResources":{"type":"boolean","description":"Include referenced resources in the response."}},"required":["details"]},"TransactionsPublishTransactionBody":{"type":"object"},"TransactionsReplaceTransactionBody":{"type":"object","properties":{"type":{"description":"The type of the replacement.","allOf":[{"$ref":"#/components/schemas/v2TransactionReplacementTypeEnum"}]},"designatedSigners":{"type":"array","example":["users/name@example.com"],"items":{"type":"string"},"description":"If the transaction is designated to be signed by a specific signer, this field should be set.\n\nFormat: `users/{email}` or `users/{id}`\n\nExample: `[\"users/name@example.com\"]` or `[\"users/a3e4f5\"]`"},"note":{"type":"string","description":"The note to be added to the replacement transaction.\n\nThis note will be visible to all vault members."},"expireTime":{"type":"string","format":"date-time","description":"The expiration time of the replacement transaction.\n\nFormat: `2023-08-29T18:04:00Z`"},"includeReferencedResources":{"type":"boolean","description":"Include referenced resources in the response."}},"required":["type"]},"TransactionsVoteOnTransactionRequestBody":{"type":"object","properties":{"vote":{"$ref":"#/components/schemas/v2VoteOnTransactionRequestRequestVote"}},"required":["vote"]},"WalletAddressFormat":{"type":"string","enum":["BITCOIN_P2PKH","BITCOIN_P2WPKH","EVM","TRON_BASE58","BASE58","TON_NON_BOUNCEABLE","SUBSTRATE_58"],"description":" - BITCOIN_P2PKH: Bitcoin P2PKH address format.\n - BITCOIN_P2WPKH: Bitcoin P2WPKH address format.\n - EVM: Ethereum address format.\n - TRON_BASE58: Tron base58 address format.\n - BASE58: Solana address format.\n - TON_NON_BOUNCEABLE: Ton address format.\n - SUBSTRATE_58: Substrate address format."},"WalletBTCDetails":{"type":"object","properties":{"btcNetworkDetails":{"type":"array","items":{"$ref":"#/components/schemas/BTCDetailsBTCNetworkDetails"},"readOnly":true}}},"WalletCreateParams":{"type":"object","properties":{"walletGroups":{"type":"array","example":["vaults/1b25635a5b3f/walletGroups/95257c5a522f"],"items":{"type":"string"},"description":"Wallet will be assigned to these wallet groups upon creation.\nEach group must support assignment of empty wallets on creation in the dedicated group setting.\n\nFormat: `vaults/{vault_id}/walletGroups/{wallet_group_id}`."}},"description":"Parameters only used during wallet creation."},"WalletSolanaDetails":{"type":"object","properties":{"address":{"type":"string","description":"The address of the wallet.","readOnly":true}}},"WalletTronDetails":{"type":"object","properties":{"address":{"type":"string","description":"The address of the wallet.","readOnly":true}}},"WalletconnectSessionPeer":{"type":"object","properties":{"uri":{"type":"string","description":"The URI of the peer."},"name":{"type":"string","description":"The name of the peer."},"description":{"type":"string","description":"The description of the peer."},"icon":{"type":"string","description":"The icon of the peer."}}},"WalletsArchiveWalletBody":{"type":"object","properties":{"allowMissing":{"type":"boolean","description":"If set to true, the operation will not fail if the wallet is missing."}}},"WalletsBatchArchiveWalletsBody":{"type":"object","properties":{"names":{"type":"array","items":{"type":"string"},"description":"The resource names of the wallets to archive.\nA maximum of 1000 wallets can be archived in a batch.\n\nFormat: `vaults/{vault_id}/wallets/{wallet_id}`"},"allowMissing":{"type":"boolean","description":"If set to true, the operation will not fail if any of the wallets are missing."}},"required":["names"]},"WalletsBatchUnarchiveWalletsBody":{"type":"object","properties":{"names":{"type":"array","items":{"type":"string"},"description":"The resource names of the wallets to unarchive.\nA maximum of 1000 wallets can be unarchived in a batch.\n\nFormat: `vaults/{vault_id}/wallets/{wallet_id}`"},"allowMissing":{"type":"boolean","description":"If set to true, the operation will not fail if any of the wallets are missing."}},"required":["names"]},"WalletsUnarchiveWalletBody":{"type":"object","properties":{"allowMissing":{"type":"boolean","description":"If set to true, the operation will not fail if the wallet is missing."}}},"apiUserRoleEnum":{"type":"string","enum":["ADMIN","SIGNER","VIEWER","OWNER"]},"apiUserStatusEnum":{"type":"string","enum":["PENDING","ACTIVE"]},"apiUserTypeEnum":{"type":"string","enum":["USER_ACCOUNT","SERVICE_ACCOUNT"]},"apiv2Address":{"type":"object","properties":{"value":{"type":"string","description":"The actual address."},"infoRef":{"type":"string","description":"If it's an address in the vault (e.g., a wallet address), a reference to address information will be listed here.\nAddress information can be fetched from `ReferencedAddressesInfo` map with the reference as the key.\n\nWill be populated only if `includeReferencedResources` is set to `true`."}}},"apiv2EVMAccountDelegation":{"type":"object","properties":{"fromAddress":{"type":"string","description":"The source of the transaction.\n\nA `0x`-prefixed hex string address, (example: `0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48`)"},"contractAddress":{"type":"string","description":"The address of the contract the account is delegating to."},"chainId":{"type":"string","description":"The chain ID of the transaction.\nIf not provided, the chain ID will be 0 and apply to all chains."},"nonce":{"type":"string","format":"int64","description":"The nonce of the transaction.\nIf not provided, the nonce will be the next available nonce for signer."},"offsetNonce":{"type":"boolean","description":"If set to true, nonce must not be set, will offset the calculated nonce by +1.\n\nThis is useful for self-delegation."}},"required":["fromAddress","contractAddress"]},"apiv2EVMTransaction":{"type":"object","properties":{"network":{"type":"string","example":"networks/ethereum-mainnet","description":"The resource name of the network of the transaction.\n\nFormat: `networks/{network_id}`."},"fromAddress":{"type":"string","description":"The source of the transaction.\n\nCan be one of the following:\n1. A `0x`-prefixed hex string address, (example: `0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48`)\n2. An EVM wallet resource name: `vaults/{vault_id}/wallets/{wallet_id}`\n3. A specific wallet address: `vaults/{vault_id}/wallets/{wallet_id}/addresses/{address_id}`"},"toAddress":{"type":"string","description":"The destination of the transfer.\n\nIf empty, the transaction is a contract deployment.\n\nCan be one of the following:\n1. A `0x`-prefixed hex string address (example: `0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48`)\n2. A wallet: `vaults/{vault_id}/wallets/{wallet_id}`.\n3. A specific wallet address: `vaults/{vault_id}/wallets/{wallet_id}/addresses/{address_id}`."},"value":{"type":"string","description":"The amount to transfer in wei. Can be hex or decimal.\n\nExample: `0x32` or `50`."},"data":{"type":"string","example":"0xda82fb4c00000a","description":"Hex encoded transaction data, must be prefixed with `0x`.\n\nExample: `0xda82fb4c00000a`."},"overrideParams":{"description":"Advanced parameters.","allOf":[{"$ref":"#/components/schemas/v2EVMTransactionParams"}]},"authorizationDetails":{"description":"The authorization list of the transaction (EIP-7702).\n\nSee: https://eips.ethereum.org/EIPS/eip-7702","allOf":[{"$ref":"#/components/schemas/apiv2EVMTransactionAuthorizationDetails"}]},"publish":{"type":"boolean","description":"Set to true if you wish for Utila to automatically broadcast the transaction after it is signed. If not provided, defaults to `true`."}},"required":["network","fromAddress"]},"apiv2EVMTransactionAuthorization":{"type":"object","properties":{"address":{"type":"string","description":"The address of the authorization.\n\nA `0x`-prefixed hex string address, (example: `0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48`)"},"chainId":{"type":"string","description":"The chain ID of the authorization."},"nonce":{"type":"string","format":"int64","description":"The nonce of the authorization."},"signature":{"type":"string","format":"byte","description":"The signature of the authorization."}},"required":["address","chainId","nonce","signature"]},"apiv2EVMTransactionAuthorizationDetails":{"type":"object","properties":{"authorizationList":{"type":"array","items":{"$ref":"#/components/schemas/apiv2EVMTransactionAuthorization"},"description":"The list of authorizations."}},"required":["authorizationList"]},"apiv2ExchangeWithdrawal":{"type":"object","properties":{"asset":{"type":"string","example":"assets/binance.USDC","description":"The asset to withdraw. Must be an exchange asset.\n\nFormat: `assets/{exchange}.{symbol}`\nExample: `assets/binance.USDC`"},"amount":{"type":"string","example":"1.1","description":"The amount of the asset to withdraw in asset units."},"source":{"type":"string","example":"vaults/1b25635a5b3f/exchangeConnections/95257c5a522f","description":"The source of the withdrawal. Specifies the exchange connection to withdraw from.\nThe source should be a valid exchange connection resource name in the current vault (shown in the Console).\nThe main account of the exchange connection will be used for the withdrawal.\n\nFormat: `vaults/{vault_id}/exchangeConnections/{exchange_connection_id}`"},"destination":{"type":"string","example":"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48","description":"The destination of the transfer.\n\nCan be one of the following:\n1. A raw string address (example: `0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48` or `bc1q3vfght7rln2c3733dl42navt8pslfya7talfns`)\n2. A wallet: `vaults/{vault_id}/wallets/{wallet_id}`.\n3. A specific wallet address: `vaults/{vault_id}/wallets/{wallet_id}/addresses/{address_id}`.\n\n**Must be an address managed by the current vault.**"},"destinationNetwork":{"type":"string","example":"networks/ethereum-mainnet","description":"The destination network of the transfer."},"payFeeFromAmount":{"type":"boolean","title":"Whether or not fees should be paid from transaction amount`"}},"required":["asset","amount","source","destination","destinationNetwork"]},"apiv2StellarTimeBounds":{"type":"object","properties":{"minUnixTime":{"type":"string","format":"int64","description":"Minimum time (Unix timestamp)."},"maxUnixTime":{"type":"string","format":"int64","description":"Maximum time (Unix timestamp)."}},"required":["maxUnixTime"]},"apiv2StellarTransaction":{"type":"object","properties":{"network":{"type":"string","example":"networks/stellar-mainnet","description":"The resource name of the network of the transaction.\n\nFormat: `networks/{network_id}`."},"sourceAddress":{"type":"string","description":"The source of the transaction.\n\nA Utila wallet Stellar address (example: `GAAAAAAAACGC6SEYFBKQ33QJ2FXVEP3EJ6BE2FCVW2SSP6X5TBNQYQ`).\nThe address which will publish the transaction."},"operations":{"type":"array","items":{"$ref":"#/components/schemas/v2StellarTransactionOperation"},"description":"The operations to include in the transaction."},"memo":{"description":"Optional memo to attach to the transaction.","allOf":[{"$ref":"#/components/schemas/apiv2StellarTransactionMemo"}]},"fee":{"type":"string","format":"int64","description":"Optional fee in stroops. If not provided, the network will determine the fee."},"timeBounds":{"description":"Optional timebounds for the transaction.","allOf":[{"$ref":"#/components/schemas/apiv2StellarTimeBounds"}]},"publish":{"type":"boolean","description":"Set to true if you wish for Utila to automatically broadcast the transaction after it is signed. Default: true."}},"required":["network","sourceAddress","operations"]},"apiv2StellarTransactionMemo":{"type":"object","properties":{"type":{"description":"The type of the memo.","allOf":[{"$ref":"#/components/schemas/apiv2StellarTransactionMemoTypeEnum"}]},"data":{"type":"string","description":"The data of the memo. See documentation on enum values for the exact format.\n\nSee https://developers.stellar.org/docs/learn/fundamentals/transactions/operations-and-transactions#memo for more information."}},"required":["type","data"]},"apiv2StellarTransactionMemoTypeEnum":{"type":"string","enum":["TEXT","ID","HASH","RETURN"],"description":" - TEXT: A text memo. Limited to 28 bytes.\n - ID: A id memo. An unsigned 64-bit integer.\n - HASH: A hash memo. A hex string of the hash with a `0x` prefix.\n - RETURN: A return memo. A hex string of the return hash with a `0x` prefix."},"apiv2TronTransaction":{"type":"object","properties":{"network":{"type":"string","example":"networks/tron-mainnet","description":"The resource name of the network of the transaction.\n\nFormat: `networks/{network_id}`."},"publish":{"type":"boolean","description":"Set to true if you wish for Utila to automatically broadcast the transaction after it is signed. Default: true."},"triggerSmartContract":{"$ref":"#/components/schemas/apiv2TronTransactionTriggerSmartContract"},"freezeBalanceV2":{"$ref":"#/components/schemas/apiv2TronTransactionFreezeBalanceV2"},"unfreezeBalanceV2":{"$ref":"#/components/schemas/apiv2TronTransactionUnfreezeBalanceV2"},"withdrawExpireUnfreeze":{"$ref":"#/components/schemas/apiv2TronTransactionWithdrawExpireUnfreeze"},"delegateResource":{"$ref":"#/components/schemas/apiv2TronTransactionDelegateResource"},"undelegateResource":{"$ref":"#/components/schemas/apiv2TronTransactionUnDelegateResource"},"cancelAllUnfreezeV2":{"$ref":"#/components/schemas/apiv2TronTransactionCancelAllUnfreezeV2"},"voteWitness":{"$ref":"#/components/schemas/apiv2TronTransactionVoteWitness"},"withdrawBalance":{"$ref":"#/components/schemas/apiv2TronTransactionWithdrawBalance"}},"required":["network"]},"apiv2TronTransactionCancelAllUnfreezeV2":{"type":"object","properties":{"ownerAddress":{"type":"string","description":"The source of the transaction.\n\nCan be one of the following:\n1. A hex string address, must start with 41 (example: `418840E6C55B9ADA326D211D818C34A994AECED808`)\n2. A base58 string address (example: `TZ4UXDV5ZhNW7fb2AMSbgfAEZ7hWsnYS2g`)"}},"required":["ownerAddress"]},"apiv2TronTransactionDelegateResource":{"type":"object","properties":{"ownerAddress":{"type":"string","description":"The source of the transaction.\n\nCan be one of the following:\n1. A hex string address, must start with 41 (example: `418840E6C55B9ADA326D211D818C34A994AECED808`)\n2. A base58 string address (example: `TZ4UXDV5ZhNW7fb2AMSbgfAEZ7hWsnYS2g`)"},"resource":{"description":"The type of resource to delegate.\n\nCan be one of the following:\n1. `BANDWIDTH`\n2. `ENERGY`","allOf":[{"$ref":"#/components/schemas/apiv2TronTransactionTronResourceEnum"}]},"amount":{"type":"string","example":"1500000","description":"The amount of the resource to delegate, in SUN.\n\nExample: `1500000`."},"receiverAddress":{"type":"string","description":"The address to delegate the resource to.\n\nCan be one of the following:\n1. A hex string address, must start with 41 (example: `418840E6C55B9ADA326D211D818C34A994AECED808`)\n2. A base58 string address (example: `TZ4UXDV5ZhNW7fb2AMSbgfAEZ7hWsnYS2g`)"},"lock":{"type":"boolean","description":"Whether to lock the delegation.\n\nDefault: false."},"lockPeriod":{"type":"string","description":"The period to lock the delegation, in block numbers, 1 block ≈ 3 seconds.\n\nExample: `1000`."}},"required":["ownerAddress","resource","amount","receiverAddress"]},"apiv2TronTransactionFreezeBalanceV2":{"type":"object","properties":{"ownerAddress":{"type":"string","description":"The source of the transaction.\n\nCan be one of the following:\n1. A hex string address, must start with 41 (example: `418840E6C55B9ADA326D211D818C34A994AECED808`)\n2. A base58 string address (example: `TZ4UXDV5ZhNW7fb2AMSbgfAEZ7hWsnYS2g`)"},"amount":{"type":"string","example":"1500000","description":"Amount of TRX to be staked, in SUN.\n\nExample: `1500000`."},"resource":{"description":"The type of resource to obtain by staking TRX.\n\nCan be one of the following:\n1. `BANDWIDTH`\n2. `ENERGY`","allOf":[{"$ref":"#/components/schemas/apiv2TronTransactionTronResourceEnum"}]}},"required":["ownerAddress","amount","resource"]},"apiv2TronTransactionTriggerSmartContract":{"type":"object","properties":{"ownerAddress":{"type":"string","description":"The source of the transaction.\n\nCan be one of the following:\n1. A hex string address, must start with 41 (example: `418840E6C55B9ADA326D211D818C34A994AECED808`)\n2. A base58 string address (example: `TZ4UXDV5ZhNW7fb2AMSbgfAEZ7hWsnYS2g`)"},"contractAddress":{"type":"string","description":"The smart contract to trigger.\n\nCan be one of the following:\n1. A hex string address, must start with 41 (example: `418840E6C55B9ADA326D211D818C34A994AECED808`)\n2. A base58 string address (example: `TZ4UXDV5ZhNW7fb2AMSbgfAEZ7hWsnYS2g`)"},"callValue":{"type":"string","format":"int64","description":"The amount of SUN passed into the contract (1 TRX = 1,000,000 SUN).\n\nExample: `500000`."},"data":{"type":"string","example":"a9059cbb0000000000000000000000002ed5dd8a98aea00ae32517742ea5289761b2710e0000000000000000000000000000000000000000000000000000000ba43b7400","description":"Hex encoded transaction data.\n\nExample: `a9059cbb0000000000000000000000002ed5dd8a98aea00ae32517742ea5289761b2710e0000000000000000000000000000000000000000000000000000000ba43b7400`."}},"required":["ownerAddress","contractAddress"]},"apiv2TronTransactionTronResourceEnum":{"type":"string","enum":["BANDWIDTH","ENERGY"]},"apiv2TronTransactionUnDelegateResource":{"type":"object","properties":{"ownerAddress":{"type":"string","description":"The source of the transaction.\n\nCan be one of the following:\n1. A hex string address, must start with 41 (example: `418840E6C55B9ADA326D211D818C34A994AECED808`)\n2. A base58 string address (example: `TZ4UXDV5ZhNW7fb2AMSbgfAEZ7hWsnYS2g`)"},"resource":{"description":"The type of resource to undelegate.\n\nCan be one of the following:\n1. `BANDWIDTH`\n2. `ENERGY`","allOf":[{"$ref":"#/components/schemas/apiv2TronTransactionTronResourceEnum"}]},"amount":{"type":"string","example":"1500000","description":"The amount of the delegated resource to undelegate, in SUN.\n\nExample: `1500000`."},"receiverAddress":{"type":"string","description":"The address to undelegate the resource from.\n\nCan be one of the following:\n1. A hex string address, must start with 41 (example: `418840E6C55B9ADA326D211D818C34A994AECED808`)\n2. A base58 string address (example: `TZ4UXDV5ZhNW7fb2AMSbgfAEZ7hWsnYS2g`)"}},"required":["ownerAddress","resource","amount","receiverAddress"]},"apiv2TronTransactionUnfreezeBalanceV2":{"type":"object","properties":{"ownerAddress":{"type":"string","description":"The source of the transaction.\n\nCan be one of the following:\n1. A hex string address, must start with 41 (example: `418840E6C55B9ADA326D211D818C34A994AECED808`)\n2. A base58 string address (example: `TZ4UXDV5ZhNW7fb2AMSbgfAEZ7hWsnYS2g`)"},"amount":{"type":"string","example":"1500000","description":"Amount of TRX to be unstaked, in SUN.\n\nExample: `1500000`."},"resource":{"description":"The type of resource to unstake TRX from.\n\nWhen you unfreeze (unstake) TRX, you release resources that can be used for transactions.\nThe resources are available for withdrawal after 14 days.\n\nCan be one of the following:\n1. `BANDWIDTH`\n2. `ENERGY`","allOf":[{"$ref":"#/components/schemas/apiv2TronTransactionTronResourceEnum"}]}},"required":["ownerAddress","amount","resource"]},"apiv2TronTransactionVoteWitness":{"type":"object","properties":{"ownerAddress":{"type":"string","description":"Voter address.\n\nCan be one of the following:\n1. A hex string address, must start with 41 (example: `418840E6C55B9ADA326D211D818C34A994AECED808`)\n2. A base58 string address (example: `TZ4UXDV5ZhNW7fb2AMSbgfAEZ7hWsnYS2g`)"},"votes":{"type":"array","items":{"$ref":"#/components/schemas/apiv2TronTransactionVoteWitnessVote"},"description":"The votes to cast. Max 30 votes.\n\nExample: `[{\"vote_address\": \"418840E6C55B9ADA326D211D818C34A994AECED808\", \"vote_count\": \"1000\"}]`"}},"required":["ownerAddress","votes"]},"apiv2TronTransactionVoteWitnessVote":{"type":"object","properties":{"voteAddress":{"type":"string","description":"The address of Super Representatives to vote for.\n\nCan be one of the following:\n1. A hex string address, must start with 41 (example: `418840E6C55B9ADA326D211D818C34A994AECED808`)\n2. A base58 string address (example: `TZ4UXDV5ZhNW7fb2AMSbgfAEZ7hWsnYS2g`)"},"voteCount":{"type":"string","description":"Example: `1000`.","title":"Number of votes, (1 vote = 1 staked TRX)"}},"required":["voteAddress","voteCount"]},"apiv2TronTransactionWithdrawBalance":{"type":"object","properties":{"ownerAddress":{"type":"string","description":"The source of the transaction.\n\nCan be one of the following:\n1. A hex string address, must start with 41 (example: `418840E6C55B9ADA326D211D818C34A994AECED808`)\n2. A base58 string address (example: `TZ4UXDV5ZhNW7fb2AMSbgfAEZ7hWsnYS2g`)"}},"required":["ownerAddress"]},"apiv2TronTransactionWithdrawExpireUnfreeze":{"type":"object","properties":{"ownerAddress":{"type":"string","description":"The source of the transaction.\n\nCan be one of the following:\n1. A hex string address, must start with 41 (example: `418840E6C55B9ADA326D211D818C34A994AECED808`)\n2. A base58 string address (example: `TZ4UXDV5ZhNW7fb2AMSbgfAEZ7hWsnYS2g`)"}},"required":["ownerAddress"]},"apiv2UTXO":{"type":"object","properties":{"network":{"type":"string","example":"networks/bitcoin-mainnet","description":"The resource name of the network of the UTXO.\n\nFormat: `networks/{network_id}`.","readOnly":true},"txHash":{"type":"string","example":"4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b","description":"The hash of the transaction that created this UTXO.","readOnly":true},"vout":{"type":"integer","format":"int32","example":1,"description":"The output index in the transaction that created this UTXO.","readOnly":true},"walletAddress":{"type":"string","example":"vaults/1b25635a5b3f/wallets/67af44031584/addresses/519c67ddae33","description":"The resource name of the wallet address that owns this UTXO.\n\nFormat: `vaults/{vault_id}/wallets/{wallet_id}/addresses/{address_id}`","readOnly":true},"scriptType":{"type":"string","example":"P2WPKH","description":"The script type of the UTXO.","readOnly":true},"state":{"example":"AVAILABLE","description":"The current spending state of the UTXO.","readOnly":true,"allOf":[{"$ref":"#/components/schemas/v2UTXOState"}]},"confirmations":{"type":"integer","format":"int32","example":6,"description":"The number of confirmations for this UTXO.","readOnly":true},"value":{"type":"string","example":"2.1","description":"The amount of the UTXO, in decimal form with precision included.","readOnly":true},"convertedValue":{"description":"The value of the UTXO converted to fiat currency.","readOnly":true,"allOf":[{"$ref":"#/components/schemas/v2ConvertedValue"}]},"createTime":{"type":"string","format":"date-time","description":"First time the UTXO was seen by Utila.","readOnly":true}},"description":"Represents an unspent transaction output (UTXO) belonging to a wallet."},"apiv2VaultContext":{"type":"object","properties":{"vaultId":{"type":"string","readOnly":true},"role":{"title":"The user's role in this vault","readOnly":true,"allOf":[{"$ref":"#/components/schemas/apiUserRoleEnum"}]},"status":{"title":"The user's status in this vault","readOnly":true,"allOf":[{"$ref":"#/components/schemas/apiUserStatusEnum"}]}}},"googlerpcStatus":{"type":"object","properties":{"code":{"type":"integer","format":"int32","description":"The status code, which should be an enum value of\n[google.rpc.Code][google.rpc.Code]."},"message":{"type":"string","description":"A developer-facing error message, which should be in English. Any\nuser-facing error message should be localized and sent in the\n[google.rpc.Status.details][google.rpc.Status.details] field, or localized\nby the client."},"details":{"type":"array","items":{"$ref":"#/components/schemas/protobufAny"},"description":"A list of messages that carry the error details.  There is a common set of\nmessage types for APIs to use."}},"description":"The `Status` type defines a logical error model that is suitable for\ndifferent programming environments, including REST APIs and RPC APIs. It is\nused by [gRPC](https://github.com/grpc). Each `Status` message contains\nthree pieces of data: error code, error message, and error details.\n\nYou can find out more about this error model and how to work with it in the\n[API Design Guide](https://cloud.google.com/apis/design/errors)."},"protobufAny":{"type":"object","properties":{"@type":{"type":"string","description":"A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n  value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n  URL, or have them precompiled into a binary to avoid any\n  lookup. Therefore, binary compatibility needs to be preserved\n  on changes to types. (Use versioned type names to manage\n  breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics."}},"additionalProperties":{},"description":"`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n    Foo foo = ...;\n    Any any;\n    any.PackFrom(foo);\n    ...\n    if (any.UnpackTo(&foo)) {\n      ...\n    }\n\nExample 2: Pack and unpack a message in Java.\n\n    Foo foo = ...;\n    Any any = Any.pack(foo);\n    ...\n    if (any.is(Foo.class)) {\n      foo = any.unpack(Foo.class);\n    }\n    // or ...\n    if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n      foo = any.unpack(Foo.getDefaultInstance());\n    }\n\n Example 3: Pack and unpack a message in Python.\n\n    foo = Foo(...)\n    any = Any()\n    any.Pack(foo)\n    ...\n    if any.Is(Foo.DESCRIPTOR):\n      any.Unpack(foo)\n      ...\n\n Example 4: Pack and unpack a message in Go\n\n     foo := &pb.Foo{...}\n     any, err := anypb.New(foo)\n     if err != nil {\n       ...\n     }\n     ...\n     foo := &pb.Foo{}\n     if err := any.UnmarshalTo(foo); err != nil {\n       ...\n     }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n    package google.profile;\n    message Person {\n      string first_name = 1;\n      string last_name = 2;\n    }\n\n    {\n      \"@type\": \"type.googleapis.com/google.profile.Person\",\n      \"firstName\": <string>,\n      \"lastName\": <string>\n    }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n    {\n      \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n      \"value\": \"1.212s\"\n    }"},"protobufNullValue":{"type":"string","description":"`NullValue` is a singleton enumeration to represent the null value for the\n`Value` type union.\n\nThe JSON representation for `NullValue` is JSON `null`."},"v2AMLActionEnum":{"type":"string","enum":["DENY","ALLOW","ALERT"]},"v2AddressBalanceChanges":{"type":"object","properties":{"address":{"description":"The address that will be affected by the transaction.","allOf":[{"$ref":"#/components/schemas/apiv2Address"}]},"balanceChanges":{"type":"array","items":{"$ref":"#/components/schemas/v2BalanceChange"},"description":"The balance changes for the address."}}},"v2AddressBookEntry":{"type":"object","properties":{"name":{"type":"string","example":"vaults/1b25635a5b3f/addressBookEntries/95257c5a522f","description":"The resource name of the address book entry.\n\nFormat: `vaults/{vault_id}/addressBookEntries/{entry_id}`","readOnly":true},"address":{"type":"string","example":"0x742d35Cc6634C0532925a3b8D4C9db96C4b4d8b6","description":"The blockchain address."},"displayName":{"type":"string","example":"My DeFi Wallet","description":"A human-readable name for the address."},"network":{"type":"string","example":"networks/ethereum-mainnet","description":"The resource name of the network this address belongs to.\n\nFormat: `networks/{network_id}`"},"note":{"type":"string","example":"This is my main trading wallet","description":"Optional note attached to the address."},"createTime":{"type":"string","format":"date-time","example":"2023-01-15T10:30:00Z","description":"Output only. Creation time.","readOnly":true},"tracked":{"type":"boolean","description":"If true, assets of this address should be tracked by Utila."},"associatedExternalWallet":{"type":"string","example":"vaults/1b25635a5b3f/wallets/95257c5a522f","description":"The wallet that is associated with this address.\nOnly set if `tracked` is true.\n\nFormat: `vaults/{vault_id}/wallets/{wallet_id}`","readOnly":true},"creator":{"type":"string","example":"users/1b25635a5b3f/users/95257c5a522f","description":"Output only. The user who issued the address book entry creation.\n\nFormat: `users/{user_id}`","readOnly":true}},"description":"An address book entry.","required":["address","displayName","network"]},"v2Asset":{"type":"object","properties":{"name":{"type":"string","description":"The resource name of the asset.\n\nFormat: `assets/{asset_id}`"},"displayName":{"type":"string","description":"The display name of the asset.\n\nExample: \"Bitcoin\""},"network":{"type":"string","example":"networks/ethereum-mainnet","description":"The resource name of the network.\n\nFormat: `networks/{network_id}`."},"type":{"description":"The type of the asset.","allOf":[{"$ref":"#/components/schemas/v2AssetTypeEnum"}]},"symbol":{"type":"string","description":"The symbol of the asset.\n\nShould not be trusted as this is the contract advertised symbol for non-native\nassets."},"decimals":{"type":"integer","format":"int32","description":"The decimals of the asset."},"convertedValue":{"description":"The converted value of the asset.","allOf":[{"$ref":"#/components/schemas/v2ConvertedValue"}]},"tokenInfo":{"description":"The token info of the asset.\n\nOnly present if the asset is a token.","allOf":[{"$ref":"#/components/schemas/v2AssetTokenInfo"}]}}},"v2AssetTokenInfo":{"type":"object","properties":{"contractAddress":{"type":"string","description":"The contract address of the token."},"standard":{"description":"The token standard.","allOf":[{"$ref":"#/components/schemas/AssetTokenInfoStandardEnum"}]},"denom":{"type":"string","description":"The denom of the token on cosmos ecosystem."},"cantonTokenDetails":{"title":"Canton token details","allOf":[{"$ref":"#/components/schemas/v2CantonTokenDetails"}]},"tip20Currency":{"type":"string","description":"ISO 4217 currency code for TIP-20 tokens (e.g. \"USD\", \"EUR\"). Empty for other standards."}}},"v2AssetTransfer":{"type":"object","properties":{"asset":{"type":"string","example":"assets/native.ethereum-mainnet","description":"The asset to transfer.\n\nCan be one of the following:\n1. A raw asset name `assets/{asset_id}` (example: `assets/e72ff35a5b15`)\n2. A native asset name `assets/native.{network_id}` (example: `assets/native.ethereum-mainnet`)\n3. An ERC20 asset name `assets/erc20.{network_id}.{contract}` (example: `assets/erc20.ethereum-mainnet.0x6b175474e89094c44da98b954eedeac495271d0f`)\n4. A TRC20 asset name `assets/trc20.{network_id}.{contract}` (example: `assets/trc20.tron-mainnet.TKieffkQXtW8Dr1hKXKGPqCqYi1UNMjJw`)\n5. A Solana SPL token asset name `assets/spl-token.{network_id}.{contract}` (example: `assets/spl-token.solana-mainnet.Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB`)\n6. A Solana SPL token2022 asset name `assets/spl-token-2022.{network_id}.{contract}` (example: `assets/spl-token-2022.solana-mainnet.2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo`)\n7. A TON Jetton token asset name `assets/jetton.{network_id}.{contract}` (example: `assets/jetton.ton-mainnet.EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs`)"},"amount":{"type":"string","example":"1.1","description":"The amount of the asset to transfer in asset units.\n\nExample: `1.1`."},"source":{"type":"string","description":"The source of the transfer.\n\nCan be one of the following:\n1. A raw string address, (example: `0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48`)\n2. A wallet containing the asset: `vaults/{vault_id}/wallets/{wallet_id}`\n3. A specific wallet address containing the asset: `vaults/{vault_id}/wallets/{wallet_id}/addresses/{address_id}`\n\nFor Bitcoin, only wallet source is supported (the second option)."},"destination":{"type":"string","description":"The destination of the transfer.\n\nCan be one of the following:\n1. A raw string address (example: `0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48` or `bc1q3vfght7rln2c3733dl42navt8pslfya7talfns`)\n2. A wallet: `vaults/{vault_id}/wallets/{wallet_id}`.\n3. A specific wallet address: `vaults/{vault_id}/wallets/{wallet_id}/addresses/{address_id}`."},"payFeeFromAmount":{"type":"boolean","description":"If set to true, fees will be paid from transfer amount.\n\nCurrently only supported for native assets on EVM-compatible networks."},"memo":{"type":"string","description":"An optional \"on-chain\" memo to attach to the transfer.\n\nImplementation may differ between assets.\nCurrently supports:\n* TON native transfers (`assets/native.ton-mainnet`)\n* TON jetton transfers (`assets/jetton.ton-mainnet.EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs`)"},"sponsor":{"type":"string","description":"Optional sponsor wallet/address that will pay transaction fees.\n\nCan be one of the following:\n1. A raw string address (example: `9B5XszUGdMaxCZ7uSQhPzdks5ZQSmWxrmzCSvtJ6Ns6g`)\n2. A wallet: `vaults/{vault_id}/wallets/{wallet_id}`\n3. A specific wallet address: `vaults/{vault_id}/wallets/{wallet_id}/addresses/{address_id}`\n\nThe sponsor must be a Utila-managed wallet with sufficient balance to pay transaction fees."},"stellarOptions":{"title":"Blockchain specific options for Stellar Asset Transfer","allOf":[{"$ref":"#/components/schemas/AssetTransferStellarOptions"}]},"xrplOptions":{"title":"Blockchain specific options for XRPL Asset Transfer","allOf":[{"$ref":"#/components/schemas/AssetTransferXRPLOptions"}]}},"required":["asset","amount","source","destination"]},"v2AssetTypeEnum":{"type":"string","enum":["NATIVE_CURRENCY","TOKEN"],"description":"The type of the asset.\n\n - NATIVE_CURRENCY: The asset is a native currency.\n - TOKEN: The asset is a token."},"v2Balance":{"type":"object","properties":{"asset":{"type":"string","example":"assets/native.ethereum-mainnet","description":"The resource name of the asset.\n\nFormat: `assets/{asset_id}`"},"value":{"type":"string","example":"1.3","description":"The amount of the asset, in decimal form with precision included."},"rawValue":{"type":"string","example":"13000000","description":"The raw amount of the asset that this balance contains.\n\nSpecified in the smallest unit of the Asset."},"frozenValue":{"type":"string","example":"0.3"}}},"v2BalanceChange":{"type":"object","properties":{"amount":{"type":"string","description":"The value of the balance change in token base units. For example: -1000000000."},"amountAbs":{"type":"string","description":"The absolute value of the balance change in token base units. For example: 1000000000."},"negative":{"type":"boolean","description":"Whether the balance change is negative. For example: true if the balance change is -1000000000."},"asset":{"type":"string","example":"assets/native.ethereum-mainnet","description":"The asset of the change. Can be a token that is not tracked by Utila."},"price":{"description":"The current price of the asset.","allOf":[{"$ref":"#/components/schemas/v2ConvertedValue"}]}}},"v2BatchAssetTransfer":{"type":"object","properties":{"asset":{"type":"string","example":"assets/native.ethereum-mainnet","description":"The asset to transfer.\n\nCan be one of the following:\n1. A raw asset name `assets/{asset_id}` (example: `assets/e72ff35a5b15`)\n2. A native asset name `assets/native.{network_id}` (example: `assets/native.ethereum-mainnet`)\n3. An ERC20 asset name `assets/erc20.{network_id}.{contract}` (example: `assets/erc20.ethereum-mainnet.0x6b175474e89094c44da98b954eedeac495271d0f`)\n\nSupported Assets: The native currency of the network and ERC20 tokens.\n\n **Note: ERC20 asset transfers require an approval. See [GetLatestBatchContract](#tag/Blockchains/operation/Blockchains_GetLatestBatchContract) for more information.**\n\n\nSupported Networks: Ethereum and Polygon (Sepolia and Mumbai)"},"source":{"type":"string","description":"The source of the transfer.\n\nCan be one of the following:\n1. A raw string address, (example: `0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48`)\n2. A wallet containing the asset: `vaults/{vault_id}/wallets/{wallet_id}`\n3. A specific wallet address containing the asset: `vaults/{vault_id}/wallets/{wallet_id}/addresses/{address_id}`\n\nFor Bitcoin, only wallet source is supported (the second option)."},"destinations":{"type":"array","items":{"$ref":"#/components/schemas/BatchAssetTransferBatchTransferDestination"},"description":"The batch transfer destinations."}},"required":["asset","source","destinations"]},"v2BatchContract":{"type":"object","properties":{"name":{"type":"string","example":"networks/ethereum-mainnet/0x1234...","description":"The resource name of the batch contract."},"network":{"type":"string","example":"networks/ethereum-mainnet","description":"The network of the batch contract."},"address":{"type":"string","example":"0x1234...","description":"The address of the batch contract."}}},"v2BatchCreateAddressBookEntriesResponse":{"type":"object","properties":{"vaultAction":{"description":"The vault action representing the quorum action.","readOnly":true,"allOf":[{"$ref":"#/components/schemas/v2VaultAction"}]}}},"v2BatchGetAddressBookEntriesResponse":{"type":"object","properties":{"addressBookEntries":{"type":"array","items":{"$ref":"#/components/schemas/v2AddressBookEntry"},"description":"The requested address book entries.","readOnly":true}}},"v2BatchGetAssetsResponse":{"type":"object","properties":{"assets":{"type":"array","items":{"$ref":"#/components/schemas/v2Asset"},"description":"The assets returned."}}},"v2BatchGetTransactionsResponse":{"type":"object","properties":{"transactions":{"type":"array","items":{"$ref":"#/components/schemas/v2Transaction"},"description":"The transactions retrieved."},"referencedResources":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/v2ReferencedResource"},"description":"A mapping of the referenced resources in the message.\nThe key is the resource name and the value is the corresponding resource."},"referencedAddressesInfo":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/v2NetworkAddressInfo"},"description":"A mapping of the referenced addresses in the message.\nThe key is the address and the value is the corresponding address info."}}},"v2BatchGetWalletAddressesResponse":{"type":"object","properties":{"walletAddresses":{"type":"array","items":{"$ref":"#/components/schemas/v2WalletAddress"},"description":"The wallet addresses retrieved."}}},"v2BatchGetWalletsResponse":{"type":"object","properties":{"wallets":{"type":"array","items":{"$ref":"#/components/schemas/v2Wallet"},"description":"The wallets retrieved."}}},"v2CancelTransactionResponse":{"type":"object"},"v2CantonTokenDetails":{"type":"object","properties":{"instrumentId":{"type":"string","description":"The instrument ID."},"instrumentAdmin":{"type":"string","description":"The instrument admin."}}},"v2ConvertedValue":{"type":"object","properties":{"amount":{"type":"string","description":"The amount in USD.","readOnly":true},"currencyCode":{"type":"string","description":"The currency code of the amount. Always USD.","readOnly":true}},"description":"A message representing a converted value."},"v2CreateAddressBookEntryRequest":{"type":"object","properties":{"address":{"type":"string","example":"0x742d35Cc6634C0532925a3b8D4C9db96C4b4d8b6","description":"The blockchain address."},"displayName":{"type":"string","example":"John's deposit address","description":"A human-readable name for the address."},"network":{"type":"string","example":"networks/ethereum-mainnet","description":"The resource name of the network this address belongs to.\n\nFormat: `networks/{network_id}`"},"note":{"type":"string","example":"This is John's deposit address ","description":"Optional note attached to the address."}},"description":"Request message for creating a single address book entry.","required":["address","displayName","network"]},"v2CreateWalletAddressResponse":{"type":"object","properties":{"walletAddress":{"$ref":"#/components/schemas/v2WalletAddress"}}},"v2CreateWalletResponse":{"type":"object","properties":{"wallet":{"description":"The created wallet resource.","allOf":[{"$ref":"#/components/schemas/v2Wallet"}]}}},"v2DecodedAptosEntryFunction":{"type":"object","properties":{"function":{"type":"string"},"typeArguments":{"type":"array","items":{"type":"string"}},"arguments":{"type":"array","items":{"type":"string"}}},"required":["function","typeArguments","arguments"]},"v2DecodedAptosTransactionPayload":{"type":"object","properties":{"entryFunction":{"$ref":"#/components/schemas/v2DecodedAptosEntryFunction"}}},"v2EVMFeeEstimation":{"type":"object","properties":{"gasUsed":{"type":"string","description":"The estimated gas to be used by the transaction (actual gas used may vary)."},"gasPrice":{"type":"string","description":"The estimated current gas price, in wei."}}},"v2EVMPersonalSign":{"type":"object","properties":{"fromAddress":{"type":"string","description":"The address to sign the message with.\n\nCan be one of the following:\n1. A `0x`-prefixed hex string address, must be matched by a wallet address in the current vault (example: `0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48`)\n2. A wallet resource name: `vaults/{vault_id}/wallets/{wallet_id}`\n3. A specific wallet address resource name: `vaults/{vault_id}/wallets/{wallet_id}/addresses/{address_id}`"},"message":{"type":"string","description":"A utf-8 encoded message to sign.\n\nOne of `message`, `messageHex` is required.\n\nExample: `hello`."},"messageHex":{"type":"string","description":"A utf-8 hex encoded message to sign, must start with `0x`.\n\nOne of `message`, `messageHex` is required.\n\nExample: `0x68656c6c6f` (representing `hello`)"}},"required":["fromAddress"]},"v2EVMPriority":{"type":"object","properties":{"gasLimit":{"type":"string","format":"int64","description":"The amount of gas to use for the transaction."},"gasPrice":{"type":"string","description":"A `0x`-prefixed hex string representing the gas price of the transaction.\n\nUsed for legacy transactions (non EIP-1559)."},"maxPriorityFeePerGas":{"type":"string","description":"A `0x`-prefixed hex string representing the maximum prioriy fee per gas unit the transaction can pay.\n\nUsed for dynamic transactions (EIP-1559)."},"maxFeePerGas":{"type":"string","description":"A `0x`-prefixed hex string representing the maximum fee per gas unit the transaction can pay.\n\nUsed for dynamic transactions (EIP-1559)."}}},"v2EVMSignTypedDataV4":{"type":"object","properties":{"fromAddress":{"type":"string","description":"The address to sign the message with.\n\nCan be one of the following:\n1. A `0x`-prefixed hex string address, must be matched by a wallet address in the current vault (example: `0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48`)\n2. A wallet resource name: `vaults/{vault_id}/wallets/{wallet_id}`\n3. A specific wallet address resource name: `vaults/{vault_id}/wallets/{wallet_id}/addresses/{address_id}`"},"message":{"type":"string","description":"An EIP-712 json string.\n\nSee https://eips.ethereum.org/EIPS/eip-712 for more information."}},"required":["fromAddress","message"]},"v2EVMTransactionGas":{"type":"object","properties":{"gasLimit":{"type":"string","format":"int64","description":"The amount of gas to use for the transaction."},"gasUsed":{"type":"string","description":"The amount of gas used by the transaction."},"gasPrice":{"type":"string","description":"A `0x`-prefixed hex string representing the gas price of the transaction.\n\nUsed for legacy transactions (non EIP-1559)."},"maxPriorityFeePerGas":{"type":"string","description":"A `0x`-prefixed hex string representing the maximum prioriy fee per gas unit the transaction can pay.\n\nUsed for dynamic transactions (EIP-1559)."},"maxFeePerGas":{"type":"string","description":"A `0x`-prefixed hex string representing the maximum fee per gas unit the transaction can pay.\n\nUsed for dynamic transactions (EIP-1559)."}}},"v2EVMTransactionParams":{"type":"object","properties":{"gasSettings":{"description":"Custom gas settings. Used only if generic priority is not set.","allOf":[{"$ref":"#/components/schemas/v2EVMPriority"}]},"nonce":{"type":"string","description":"Optional nonce for the transaction. If omitted, Utila will determine the nonce automatically."}}},"v2EstimateTransactionFeeRequestDetails":{"type":"object","properties":{"assetTransfer":{"description":"An abstract transfer.","allOf":[{"$ref":"#/components/schemas/v2AssetTransfer"}]},"assetBatchTransfer":{"description":"A batch transfer.","allOf":[{"$ref":"#/components/schemas/v2BatchAssetTransfer"}]},"evmTransaction":{"description":"An EVM transaction.","allOf":[{"$ref":"#/components/schemas/apiv2EVMTransaction"}]},"tronTriggerSmartContract":{"description":"Deprecated: Use `tron_transaction` with `trigger_smart_contract` instead.","allOf":[{"$ref":"#/components/schemas/v2TronTriggerSmartContract"}]},"tronTransaction":{"description":"A Tron transaction.","allOf":[{"$ref":"#/components/schemas/apiv2TronTransaction"}]}},"title":"Transaction type"},"v2EstimateTransactionFeeResponse":{"type":"object","properties":{"evmFee":{"$ref":"#/components/schemas/v2EVMFeeEstimation"},"tronFee":{"$ref":"#/components/schemas/v2TronFeeEstimation"},"totalFee":{"type":"string","description":"The estimated total fee for the transaction."},"convertedTotalFee":{"description":"The estimated total fee for the transaction, converted to fiat currency.","allOf":[{"$ref":"#/components/schemas/v2ConvertedValue"}]}}},"v2GetAssetResponse":{"type":"object","properties":{"asset":{"description":"The asset returned.","allOf":[{"$ref":"#/components/schemas/v2Asset"}]}}},"v2GetLatestTransactionSimulationResponse":{"type":"object","properties":{"transactionSimulation":{"description":"The latest transaction simulation.","allOf":[{"$ref":"#/components/schemas/v2TransactionSimulation"}]},"referencedResources":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/v2ReferencedResource"},"description":"A mapping of the referenced resources in the message.\nThe key is the resource name and the value is the corresponding resource."},"referencedAddressesInfo":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/v2NetworkAddressInfo"},"description":"A mapping of the referenced addresses in the message.\nThe key is the address and the value is the corresponding address info."}}},"v2GetNetworkResponse":{"type":"object","properties":{"network":{"description":"The network.","allOf":[{"$ref":"#/components/schemas/v2Network"}]}}},"v2GetTransactionAMLScreeningResponse":{"type":"object","properties":{"amlScreening":{"$ref":"#/components/schemas/v2TransactionAMLScreening"}}},"v2GetTransactionResponse":{"type":"object","properties":{"transaction":{"$ref":"#/components/schemas/v2Transaction"},"referencedResources":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/v2ReferencedResource"},"description":"A mapping of the referenced resources in the message.\nThe key is the resource name and the value is the corresponding resource."},"referencedAddressesInfo":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/v2NetworkAddressInfo"},"description":"A mapping of the referenced addresses in the message.\nThe key is the address and the value is the corresponding address info."}}},"v2GetVaultAssetResponse":{"type":"object","properties":{"asset":{"description":"The asset returned.","allOf":[{"$ref":"#/components/schemas/v2Asset"}]}}},"v2GetVaultResponse":{"type":"object","properties":{"vault":{"description":"The vault.","allOf":[{"$ref":"#/components/schemas/v2Vault"}]}}},"v2GetWalletAddressResponse":{"type":"object","properties":{"walletAddress":{"$ref":"#/components/schemas/v2WalletAddress"}}},"v2GetWalletResponse":{"type":"object","properties":{"wallet":{"description":"The wallet resource.","allOf":[{"$ref":"#/components/schemas/v2Wallet"}]}}},"v2InitiateTransactionRequestDetails":{"type":"object","properties":{"assetTransfer":{"description":"An abstract transfer.","allOf":[{"$ref":"#/components/schemas/v2AssetTransfer"}]},"assetBatchTransfer":{"description":"A batch transfer.","allOf":[{"$ref":"#/components/schemas/v2BatchAssetTransfer"}]},"evmTransaction":{"description":"An EVM transaction.","allOf":[{"$ref":"#/components/schemas/apiv2EVMTransaction"}]},"evmPersonalSign":{"description":"An EVM personal sign message.","allOf":[{"$ref":"#/components/schemas/v2EVMPersonalSign"}]},"evmSignTypedDataV4":{"description":"An EVM sign typed data V4 message.","allOf":[{"$ref":"#/components/schemas/v2EVMSignTypedDataV4"}]},"evmAccountDelegation":{"description":"An EVM authorization message.","allOf":[{"$ref":"#/components/schemas/apiv2EVMAccountDelegation"}]},"exchangeWithdrawal":{"description":"An exchange withdrawal.","allOf":[{"$ref":"#/components/schemas/apiv2ExchangeWithdrawal"}]},"solanaSerializedTransaction":{"description":"A serialized Solana transaction.","allOf":[{"$ref":"#/components/schemas/v2SolanaSerializedTransaction"}]},"tronTriggerSmartContract":{"description":"Deprecated: Use `tron_transaction` with `trigger_smart_contract` instead.","allOf":[{"$ref":"#/components/schemas/v2TronTriggerSmartContract"}]},"tronTransaction":{"description":"A Tron transaction.","allOf":[{"$ref":"#/components/schemas/apiv2TronTransaction"}]},"suiRawTransaction":{"description":"An Sui raw transaction.","allOf":[{"$ref":"#/components/schemas/v2SuiRawTransaction"}]},"stellarRawTransaction":{"description":"A Stellar raw transaction.","allOf":[{"$ref":"#/components/schemas/v2StellarRawTransaction"}]},"stellarTransaction":{"description":"A Stellar transaction.","allOf":[{"$ref":"#/components/schemas/apiv2StellarTransaction"}]}}},"v2InitiateTransactionResponse":{"type":"object","properties":{"transaction":{"description":"The created transaction.","allOf":[{"$ref":"#/components/schemas/v2Transaction"}]},"referencedResources":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/v2ReferencedResource"},"description":"A mapping of the referenced resources in the message.\nThe key is the resource name and the value is the corresponding resource."},"referencedAddressesInfo":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/v2NetworkAddressInfo"},"description":"A mapping of the referenced addresses in the message.\nThe key is the address and the value is the corresponding address info."}}},"v2ListAddressBookEntriesResponse":{"type":"object","properties":{"addressBookEntries":{"type":"array","items":{"$ref":"#/components/schemas/v2AddressBookEntry"},"description":"The list of address book entries.","readOnly":true},"nextPageToken":{"type":"string","example":"next_page_token","description":"A token, which can be sent as `page_token` to retrieve the next page.\nIf this field is omitted, there are no subsequent pages.","readOnly":true},"totalSize":{"type":"integer","format":"int32","example":150,"description":"The total number of address book entries that match the request criteria.","readOnly":true}}},"v2ListNetworksResponse":{"type":"object","properties":{"networks":{"type":"array","items":{"$ref":"#/components/schemas/v2Network"},"description":"The list of networks."},"nextPageToken":{"type":"string","description":"A token, which can be sent as `pageToken` to retrieve the next page.\nIf this field is omitted, there are no subsequent pages."}},"description":"The response message for ListNetworks."},"v2ListTransactionsResponse":{"type":"object","properties":{"transactions":{"type":"array","items":{"$ref":"#/components/schemas/v2Transaction"},"description":"The transactions returned."},"nextPageToken":{"type":"string","description":"A token, which can be sent as `pageToken` to retrieve the next page.\nIf this field is omitted, there are no subsequent pages."},"totalSize":{"type":"integer","format":"int32","description":"Total number of items in the response, regardless of pagination."},"referencedResources":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/v2ReferencedResource"},"description":"A mapping of the referenced resources in the message.\nThe key is the resource name and the value is the corresponding resource."},"referencedAddressesInfo":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/v2NetworkAddressInfo"},"description":"A mapping of the referenced addresses in the message.\nThe key is the address and the value is the corresponding address info."}}},"v2ListVaultNetworksResponse":{"type":"object","properties":{"networks":{"type":"array","items":{"$ref":"#/components/schemas/v2Network"},"description":"The list of vault networks."},"nextPageToken":{"type":"string","description":"A token, which can be sent as `pageToken` to retrieve the next page.\nIf this field is omitted, there are no subsequent pages."}}},"v2ListVaultsResponse":{"type":"object","properties":{"vaults":{"type":"array","items":{"$ref":"#/components/schemas/v2Vault"},"description":"The vaults returned."},"nextPageToken":{"type":"string","description":"A token, which can be sent as `pageToken` to retrieve the next page.\nIf this field is omitted, there are no subsequent pages."},"totalSize":{"type":"integer","format":"int32","description":"Total number of items in the response, regardless of pagination."}}},"v2ListWalletAddressesResponse":{"type":"object","properties":{"walletAddresses":{"type":"array","items":{"$ref":"#/components/schemas/v2WalletAddress"},"description":"The addresses returned."},"nextPageToken":{"type":"string","description":"A token, which can be sent as `pageToken` to retrieve the next page.\nIf this field is omitted, there are no subsequent pages."},"totalSize":{"type":"integer","format":"int32","description":"Total number of items in the response, regardless of pagination."}},"description":"The response message for ListAddresses."},"v2ListWalletsResponse":{"type":"object","properties":{"wallets":{"type":"array","items":{"$ref":"#/components/schemas/v2Wallet"},"description":"The wallets returned."},"nextPageToken":{"type":"string","description":"A token, which can be sent as `pageToken` to retrieve the next page.\nIf this field is omitted, there are no subsequent pages."},"totalSize":{"type":"integer","format":"int32","description":"Total number of items in the response, regardless of pagination."}}},"v2Network":{"type":"object","properties":{"name":{"type":"string","example":"networks/ethereum-mainnet","description":"The resource name of the network.\n\nFormat: `networks/{network_id}`."},"displayName":{"type":"string","example":"Ethereum Mainnet","description":"A user-readable name for the network."},"caipDetails":{"description":"Chain-Agnostic Identifiers (CAIP) details for this network.\n\nSee: https://github.com/ChainAgnostic/CAIPs","allOf":[{"$ref":"#/components/schemas/NetworkCAIPDetails"}]},"testnet":{"type":"boolean","example":false,"description":"Whether this network is a testnet."},"nativeAsset":{"type":"string","example":"assets/e72ff35a5b15","description":"The native asset of this network.\n\nFormat: `assets/{asset_id}`"},"custom":{"type":"boolean","example":false,"description":"Whether this network is custom."},"status":{"$ref":"#/components/schemas/v2NetworkStatusEnum"}}},"v2NetworkAddressInfo":{"type":"object","properties":{"wallet":{"type":"string","example":"vaults/1b2563/wallets/95257","description":"If the address is a wallet address, the resource name of its wallet will be listed here.\n\nFormat: `vaults/{vault_id}/wallets/{wallet_id}`"},"walletAddress":{"type":"string","example":"vaults/1b2563/wallets/95257/addresses/3452","description":"If the address is a wallet address, the resource name will be listed here.\n\nFormat: `vaults/{vault_id}/wallets/{wallet_id}/addresses/{address_id}`"},"addressBookEntry":{"type":"string","example":"vaults/1b2563/addressBookEntries/123456","description":"Format: `vaults/{vault_id}/addressBookEntries/{addressbook_entry_id}`","title":"If the address is listed in the vault address book, the resource name of the address book entry will be listed here"}}},"v2NetworkStatusEnum":{"type":"string","enum":["ACTIVE","DISABLED","DEPRECATED"]},"v2PublishTransactionResponse":{"type":"object","properties":{"transaction":{"$ref":"#/components/schemas/v2Transaction"}}},"v2QueryBalancesResponse":{"type":"object","properties":{"balances":{"type":"array","items":{"$ref":"#/components/schemas/v2Balance"},"description":"The balances returned."},"nextPageToken":{"type":"string","description":"A token, which can be sent as `pageToken` to retrieve the next page.\nIf this field is omitted, there are no subsequent pages."},"totalSize":{"type":"integer","format":"int32","description":"Total number of items in the response, regardless of pagination."},"referencedResources":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/v2ReferencedResource"},"description":"A mapping of the referenced resources in the message.\nThe key is the resource name and the value is the corresponding resource."}}},"v2QueryWalletAddressBalancesResponse":{"type":"object","properties":{"walletAddressBalances":{"type":"array","items":{"$ref":"#/components/schemas/v2WalletAddressBalance"},"description":"The balances returned."},"nextPageToken":{"type":"string","description":"A token, which can be sent as `pageToken` to retrieve the next page.\nIf this field is omitted, there are no subsequent pages."},"totalSize":{"type":"integer","format":"int32","description":"Total number of items in the response, regardless of pagination."},"referencedResources":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/v2ReferencedResource"},"description":"A mapping of the referenced resources in the message.\nThe key is the resource name and the value is the corresponding resource.\n\nThis field is only populated if the `includeReferencedResources` field is set to `true`."}}},"v2QueryWalletBalancesResponse":{"type":"object","properties":{"walletBalances":{"type":"array","items":{"$ref":"#/components/schemas/v2WalletBalance"},"description":"The balances returned."},"nextPageToken":{"type":"string","description":"A token, which can be sent as `pageToken` to retrieve the next page.\nIf this field is omitted, there are no subsequent pages."},"totalSize":{"type":"integer","format":"int32","description":"Total number of items in the response, regardless of pagination."},"referencedResources":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/v2ReferencedResource"},"description":"A mapping of the referenced resources in the message.\nThe key is the resource name and the value is the corresponding resource.\n\nThis field is only populated if the `includeReferencedResources` field is set to `true`."}}},"v2QueryWalletUTXOsResponse":{"type":"object","properties":{"utxos":{"type":"array","items":{"$ref":"#/components/schemas/apiv2UTXO"},"description":"The UTXOs returned."},"nextPageToken":{"type":"string","description":"A token, which can be sent as `pageToken` to retrieve the next page.\nIf this field is omitted, there are no subsequent pages."},"totalSize":{"type":"integer","format":"int32","description":"Total number of items in the response, regardless of pagination."},"referencedResources":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/v2ReferencedResource"},"description":"A mapping of the referenced resources in the message.\nThe key is the resource name and the value is the corresponding resource.\n\nThis field is only populated if the `includeReferencedResources` field is set to `true`."}}},"v2ReferencedResource":{"type":"object","properties":{"asset":{"description":"The asset resource.","allOf":[{"$ref":"#/components/schemas/v2Asset"}]},"wallet":{"description":"The wallet resource.","allOf":[{"$ref":"#/components/schemas/v2Wallet"}]},"walletAddress":{"description":"The wallet address resource.","allOf":[{"$ref":"#/components/schemas/v2WalletAddress"}]},"user":{"description":"The user resource.","allOf":[{"$ref":"#/components/schemas/v2User"}]},"walletconnectSession":{"description":"The wallet connect session resource.","allOf":[{"$ref":"#/components/schemas/v2WalletconnectSession"}]},"addressBookEntry":{"description":"The addressbook entry resource.","allOf":[{"$ref":"#/components/schemas/v2AddressBookEntry"}]},"transaction":{"description":"the transaction entry resource.","allOf":[{"$ref":"#/components/schemas/v2Transaction"}]}}},"v2RefreshAssetAddressBalanceResponse":{"type":"object","properties":{"balance":{"$ref":"#/components/schemas/v2Balance"},"referencedResources":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/v2ReferencedResource"},"description":"A mapping of the referenced resources in the message.\nThe key is the resource name and the value is the corresponding resource.\nThis field is only populated if the `includeReferencedResources` field is set to `true`."}}},"v2ReplaceTransactionResponse":{"type":"object","properties":{"transaction":{"description":"The newly created transaction.","allOf":[{"$ref":"#/components/schemas/v2Transaction"}]},"referencedResources":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/v2ReferencedResource"},"description":"A mapping of the referenced resources in the message.\nThe key is the resource name and the value is the corresponding resource."},"referencedAddressesInfo":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/v2NetworkAddressInfo"},"description":"A mapping of the referenced addresses in the message.\nThe key is the address and the value is the corresponding address info."}}},"v2ScreeningStateEnum":{"type":"string","enum":["SKIPPED","PENDING","FAILED","READY"],"description":"The state of the AML report.\n\n - SKIPPED: No AML report was requested for the transaction.\n - PENDING: The AML report is still being processed by the provider.\n - FAILED: The AML report was not generated due to an error.\n - READY: The AML report was successfully generated."},"v2SolanaSerializedTransaction":{"type":"object","properties":{"network":{"type":"string","example":"networks/solana-mainnet","description":"The resource name of the network of the transaction.\n\nFormat: `networks/{network_id}`."},"rawTransaction":{"type":"string","format":"byte","description":"The full transaction payload serialized.\n\nThe message and signatures, encoded in base64 format."},"publish":{"type":"boolean","description":"Set to true if you wish for Utila to automatically broadcast the transaction after it is signed. Default: true."},"replaceBlockhash":{"type":"boolean","description":"If set to true, the transaction recent blockhash will be replaced with the most recent blockhash before signing."},"tryReplaceBlockhash":{"type":"boolean","description":"If set to true, Utila will check whether the transaction can have its blockhash replaced automatically.\nThe blockhash will be replaced if the transaction does not use a durable nonce AND all signers\nof the transaction are wallets in the current vault.\nIf the conditions are met, behaves as if `replace_blockhash` was set to true."}},"required":["network","rawTransaction"]},"v2StellarRawTransaction":{"type":"object","properties":{"network":{"type":"string","example":"networks/stellar-mainnet","description":"The resource name of the network of the transaction.\n\nFormat: `networks/{network_id}`."},"sourceAddress":{"type":"string","description":"The source of the transaction.\n\nA Stellar address (example: `GAAAAAAAACGC6SEYFBKQ33QJ2FXVEP3EJ6BE2FCVW2SSP6X5TBNQYQ`).\nThe address which will publish the transaction."},"xdrEnvelope":{"type":"string","format":"byte","description":"The raw transaction envelope in XDR format."},"publish":{"type":"boolean","description":"Set to true if you wish for Utila to automatically broadcast the transaction after it is signed. Default: true."},"useLatestSequenceNumber":{"type":"boolean","description":"Set to false if you don't want Utila to update the sequence number before signing.\nIf not provided, will default to `true`."}},"required":["network","sourceAddress","xdrEnvelope"]},"v2StellarTransactionOperation":{"type":"object","properties":{"sourceAccountAddress":{"type":"string","description":"The source account address. If not provided, the top-level source account is used.\n\nA Stellar address (example: `GAAAAAAAACGC6SEYFBKQ33QJ2FXVEP3EJ6BE2FCVW2SSP6X5TBNQYQ`)."},"body":{"$ref":"#/components/schemas/OperationBody"}},"required":["body"]},"v2SuiRawTransaction":{"type":"object","properties":{"network":{"type":"string","example":"networks/ethereum-mainnet","description":"The resource name of the network of the transaction.\n\nFormat: `networks/{network_id}`."},"sender":{"type":"string","title":"The source of the transaction. A `0x`-prefixed hex string address, must be matched by a wallet address in the current vault (example: `0xde87c27b63f5c0fd615065552511431f29f5e3f62278b0166014576cd5as4b165`)"},"txBcsBytes":{"type":"string","format":"byte","description":"The Sui transaction payload serialized in BCS format."},"publish":{"type":"boolean","description":"Set to true if you wish for Utila to automatically broadcast the transaction after it is signed. Default: true."}},"required":["network","sender","txBcsBytes"]},"v2Transaction":{"type":"object","properties":{"name":{"type":"string","example":"vaults/1b25635a5b3f/transactions/95257c5a522f","description":"The resource name of the transaction.\n\nFormat: `vaults/{vault_id}/transactions/{transaction_id}`.","readOnly":true},"type":{"readOnly":true,"allOf":[{"$ref":"#/components/schemas/v2TransactionTypeEnum"}]},"subType":{"readOnly":true,"allOf":[{"$ref":"#/components/schemas/v2TransactionSubTypeEnum"}]},"state":{"readOnly":true,"allOf":[{"$ref":"#/components/schemas/v2TransactionStateEnum"}]},"direction":{"readOnly":true,"allOf":[{"$ref":"#/components/schemas/v2TransactionDirectionEnum"}]},"note":{"type":"string","description":"A note to attach to the transaction.\n\nThis note is visible to all vault members."},"network":{"type":"string","example":"networks/ethereum-mainnet","description":"The blockchain network on which the transaction was sent.\n\nNot available for connection transactions (e.g., Exchanges)\n\nFormat: `networks/{network_id}`"},"hash":{"type":"string","description":"For on-chain transactions, the hash of the transaction."},"blockNumber":{"type":"string","description":"For on-chain transactions, the block number of the transaction if it was mined."},"signingSession":{"type":"string","example":"vaults/2d2e40r3/signingSessions/132e40r3","description":"Available when the transaction has been prepared for signing / signed."},"request":{"description":"The request details of the transaction. Relevant only for transactions initiated through Utila.","allOf":[{"$ref":"#/components/schemas/v2TransactionRequest"}]},"amlDetails":{"readOnly":true,"allOf":[{"$ref":"#/components/schemas/TransactionAMLDetails"}]},"transfers":{"type":"array","items":{"$ref":"#/components/schemas/TransactionTransfer"},"description":"If there one or more transfers in the transaction, they will be listed here."},"tokenAllowances":{"type":"array","items":{"$ref":"#/components/schemas/TransactionTokenAllowance"},"description":"If there one or more token allowances in the transaction, they will be listed here."},"designatedSigners":{"type":"array","example":["users/name@example.com"],"items":{"type":"string"},"description":"If the transaction is designated to be signed by a specific signer, this field should be set.\n\nFormat: `users/{email}` or `users/{id}`\n\nExample: `[\"users/name@example.com\"]` or `[\"users/a3e4f5\"]`"},"evmTransaction":{"description":"For EVM-Compatible transaction: Low level transaction details.","allOf":[{"$ref":"#/components/schemas/v2TransactionEVMTransaction"}]},"evmMessage":{"description":"If this is an EVM message, the message will be listed here.","allOf":[{"$ref":"#/components/schemas/TransactionEVMMessage"}]},"evmAccountDelegation":{"description":"If this is an EVM authorization, the authorization will be listed here.","allOf":[{"$ref":"#/components/schemas/v2TransactionEVMAccountDelegation"}]},"tronTransaction":{"description":"If this is a TVM transaction, the transaction will be listed here.","allOf":[{"$ref":"#/components/schemas/v2TransactionTronTransaction"}]},"btcTransaction":{"description":"For BTC transaction: Low level transaction details.","allOf":[{"$ref":"#/components/schemas/TransactionBTCTransaction"}]},"btcPsbt":{"description":"For BTC PSBT: Details of the PSBT transaction.","allOf":[{"$ref":"#/components/schemas/v2TransactionBTCPSBT"}]},"aptosTransaction":{"description":"For APTOS transaction: Low level transaction details.","allOf":[{"$ref":"#/components/schemas/TransactionAptosTransaction"}]},"suiTransaction":{"description":"For SUI transaction: Low level transaction details.","allOf":[{"$ref":"#/components/schemas/TransactionSuiTransaction"}]},"suiSignPersonalMessage":{"description":"Represents a Sui signPersonalMessage message.","allOf":[{"$ref":"#/components/schemas/v2TransactionSuiSignPersonalMessage"}]},"xrplTransaction":{"description":"For XRPL transaction: Low level transaction details.","allOf":[{"$ref":"#/components/schemas/TransactionXRPLTransaction"}]},"substrateTransaction":{"$ref":"#/components/schemas/TransactionSubstrateTransaction"},"tonTransaction":{"description":"For TON transaction: Low level transaction details.","allOf":[{"$ref":"#/components/schemas/TransactionTonTransaction"}]},"tonSignData":{"description":"Represents a TON SignData message.","allOf":[{"$ref":"#/components/schemas/v2TransactionTonSignData"}]},"tonProof":{"description":"Represents a TON Proof message.","allOf":[{"$ref":"#/components/schemas/v2TransactionTonProof"}]},"solanaSignMessage":{"description":"Represents a Solana signMessage message.","allOf":[{"$ref":"#/components/schemas/v2TransactionSolanaSignMessage"}]},"solanaTransaction":{"description":"For Solana transaction: Low level transaction details.","allOf":[{"$ref":"#/components/schemas/v2TransactionSolanaTransaction"}]},"thetaTransaction":{"description":"For Theta transaction: Low level transaction details.","allOf":[{"$ref":"#/components/schemas/TransactionThetaTransaction"}]},"stellarTransaction":{"description":"Represents a Stellar transaction.","readOnly":true,"allOf":[{"$ref":"#/components/schemas/v2TransactionStellarTransaction"}]},"createTime":{"type":"string","format":"date-time","description":"The time at which the transaction was created in the system.","readOnly":true},"mineTime":{"type":"string","format":"date-time","description":"The time at which the transaction was mined.","readOnly":true},"confirmTime":{"type":"string","format":"date-time","description":"The time at which the transaction was confirmed.","readOnly":true},"expireTime":{"type":"string","format":"date-time","description":"The time at which the transaction was expired.","readOnly":true},"spam":{"type":"boolean"},"replacementTransaction":{"type":"string","description":"If the current transaction is dropped, the transaction that replaced it will be listed here.","readOnly":true}}},"v2TransactionAMLScreening":{"type":"object","properties":{"provider":{"$ref":"#/components/schemas/TransactionAMLScreeningProviderEnum"},"rawResponses":{"type":"array","items":{"type":"string"}}}},"v2TransactionBTCPSBT":{"type":"object","properties":{"signedPsbt":{"type":"string","format":"byte","description":"The signed PSBT data, encoded in base64 format per BIP-174.\n\nOnly populated after the transaction reaches the SIGNED state.\nContains partial signatures that the dApp can use to finalize and broadcast."},"inputs":{"type":"array","items":{"$ref":"#/components/schemas/BTCTransactionUTXOIn"},"description":"The PSBT inputs (for display in approval UI).\n\nReuses the existing BTCTransaction.UTXOIn type for consistency."},"outputs":{"type":"array","items":{"$ref":"#/components/schemas/BTCTransactionUTXOOut"},"description":"The PSBT outputs (for display in approval UI).\n\nReuses the existing BTCTransaction.UTXOOut type for consistency."},"fee":{"type":"string","description":"The transaction fee in BTC.\n\nCalculated from: sum(inputs) - sum(outputs)."}},"description":"Details of a signed PSBT (Partially Signed Bitcoin Transaction).\n\nReturned when a PSBT signing request reaches the SIGNED state.\nThe signed PSBT can be used by the dApp to finalize and broadcast."},"v2TransactionDirectionEnum":{"type":"string","enum":["INCOMING","OUTGOING"]},"v2TransactionEVMAccountDelegation":{"type":"object","properties":{"signerAddress":{"description":"The address of the signer.","allOf":[{"$ref":"#/components/schemas/apiv2Address"}]},"contractAddress":{"description":"The address of the contract the account is delegating to.","allOf":[{"$ref":"#/components/schemas/apiv2Address"}]},"chainId":{"type":"string","description":"The chain ID of the DELEGATION."},"nonce":{"type":"string","format":"int64","description":"The nonce of the account for the delegation."},"signature":{"type":"string","format":"byte","description":"ECDSA signature (65 bytes) of the delegation message."},"offsetNonce":{"type":"boolean","description":"Whether the selection nonce strategy is to offset the signer nonce by one.\n\nThis is used usually for self delegation"},"providedNonce":{"type":"string","format":"int64","description":"The nonce provided by the user."}}},"v2TransactionEVMTransaction":{"type":"object","properties":{"fromAddress":{"description":"The source of the transfer. A `0x`-prefixed hex string address.","allOf":[{"$ref":"#/components/schemas/apiv2Address"}]},"toAddress":{"description":"The destination of the transfer. A `0x`-prefixed hex string address.","allOf":[{"$ref":"#/components/schemas/apiv2Address"}]},"value":{"type":"string","description":"The amount to transfer in wei."},"data":{"type":"string","example":"0xda82fb4c00000a","description":"Hex encoded transaction data.\n\nExample: `0xda82fb4c00000a` or `da82fb4c00000a`."},"fee":{"description":"The fee details of the transaction.","allOf":[{"$ref":"#/components/schemas/v2EVMTransactionGas"}]},"authorizationDetails":{"description":"EIP-7702 Authorization details.","allOf":[{"$ref":"#/components/schemas/v2TransactionEVMTransactionAuthorizationDetails"}]},"signature":{"type":"string","format":"byte","description":"ECDSA signature (65 bytes) of the transaction.\n\nAvailable when the transaction has been signed.\n\nEncoded in standard EVM format:\n  - Bytes [0-31]: R component (32 bytes, big-endian)\n  - Bytes [32-63]: S component (32 bytes, big-endian)\n  - Byte [64]: V component (recovery identifier)","readOnly":true},"providedNonce":{"type":"string","description":"The nonce value explicitly provided by the user in the transaction request.","readOnly":true},"nonce":{"type":"string","description":"The effective nonce value assigned to the transaction.","readOnly":true}}},"v2TransactionEVMTransactionAuthorization":{"type":"object","properties":{"signer":{"description":"The signer address.","allOf":[{"$ref":"#/components/schemas/apiv2Address"}]},"contractAddress":{"description":"The address of the contract the account is delegating to.","allOf":[{"$ref":"#/components/schemas/apiv2Address"}]},"nonce":{"type":"string","format":"int64","description":"The nonce of the account for the delegation."},"chainId":{"type":"string","description":"The chain ID of the delegation."},"signature":{"type":"string","format":"byte","description":"The signature of the delegation."}}},"v2TransactionEVMTransactionAuthorizationDetails":{"type":"object","properties":{"authorizationList":{"type":"array","items":{"$ref":"#/components/schemas/v2TransactionEVMTransactionAuthorization"},"description":"The list of authorizations."}}},"v2TransactionPriorityEnum":{"type":"string","enum":["LOW","NORMAL","HIGH"],"description":"Generic priority enum for transactions.\nTranslates to network specific priority values.\n\n - LOW: Low priority.\n - NORMAL: Normal priority. The default value.\n - HIGH: High priority."},"v2TransactionReplacementTypeEnum":{"type":"string","enum":["CANCEL","ACCELERATE"],"description":"The type of the replacement.\n\n - CANCEL: Cancel the transaction.\n - ACCELERATE: Accelerate the transaction."},"v2TransactionRequest":{"type":"object","properties":{"name":{"type":"string","example":"vaults/1b25635a5b3f/transactionRequests/95257c5a522f","description":"The resource name of the transaction request.\n\nFormat: `vaults/{vault_id}/transactionRequests/{transaction_request_id}`.","readOnly":true},"externalId":{"type":"string","description":"A client-provided identifier for the transaction.\n\nUnique per vault. Can be used to correlate the transaction\nwith an entity in an external system.","readOnly":true},"initiator":{"type":"string","example":"users/2d2e40r3","description":"The initiator of the transaction.\n\nFormat: `users/{user}`"},"sourceWallet":{"type":"string","example":"wallets/2d2e40r3","description":"If the transaction was initiated through a wallet, the wallet will be listed here.","x-protoOneof":"source"},"cancelTime":{"type":"string","format":"date-time","description":"The timestamp when the transaction was canceled."},"signTime":{"type":"string","format":"date-time","description":"The timestamp when the transaction was signed."},"failTime":{"type":"string","format":"date-time","description":"The timestamp when the transaction failed."},"declineTime":{"type":"string","format":"date-time","description":"The timestamp when the transaction was declined."},"publishTime":{"type":"string","format":"date-time","description":"The timestamp when the transaction was published."},"dropTime":{"type":"string","format":"date-time","description":"The timestamp when the transaction was dropped."},"expireTime":{"type":"string","format":"date-time","description":"The timestamp when the transaction expires.","readOnly":true},"approveTime":{"type":"string","format":"date-time","description":"The timestamp when the transaction was approved."},"publish":{"type":"boolean","description":"Whether the transaction should be automatically published by utila."},"signingSessions":{"type":"array","example":"vaults/2d2e40r3/signingSessions/132e40r3","items":{"type":"string"},"description":"The signing sessions that were used to sign the transaction."},"blockingTransaction":{"type":"string","description":"A transaction that is blocking this transaction from being signed.\nFor example, a transaction from the same wallet and blockchain that has acquired a nonce but is not yet mined.\n\nIncluded only when `FULL` view is requested.","readOnly":true},"walletconnectSession":{"type":"string","description":"The wallet connect session that was used to sign the transaction.","readOnly":true},"transactionBundle":{"type":"string","description":"The transaction bundle that this transaction belongs to.","readOnly":true},"dappInfo":{"readOnly":true,"allOf":[{"$ref":"#/components/schemas/TransactionRequestDappInfo"}]},"origin":{"readOnly":true,"allOf":[{"$ref":"#/components/schemas/TransactionRequestOriginEnum"}]}}},"v2TransactionSimulation":{"type":"object","properties":{"name":{"type":"string","example":"vaults/1b25635a5b3f/transactions/95257c5a522f","description":"The resource name of the transaction simulation.\n\nFormat: `vaults/{vault_id}/transactionSimulations/{simulation_id}`.","readOnly":true},"addressBalanceChanges":{"type":"array","items":{"$ref":"#/components/schemas/v2AddressBalanceChanges"},"description":"The balance changes that would occur if the transaction will be executed."},"simulationTime":{"type":"string","format":"date-time","description":"The time at which the simulation was run."},"error":{"description":"If the simulation failed, the error will be listed here.","allOf":[{"$ref":"#/components/schemas/googlerpcStatus"}]}}},"v2TransactionSolanaSignMessage":{"type":"object","properties":{"signer":{"description":"The address of the signer.","allOf":[{"$ref":"#/components/schemas/apiv2Address"}]},"message":{"type":"string","format":"byte","description":"The message to sign."},"signature":{"type":"string","description":"The signature of the message."}}},"v2TransactionSolanaTransaction":{"type":"object","properties":{"fee":{"type":"string","description":"Transaction fee in lamports."},"rawTransaction":{"type":"string","format":"byte","description":"The full transaction payload, serialized.\n\nThe message and signatures, encoded in base64 format."},"utilaSigners":{"type":"array","items":{"$ref":"#/components/schemas/apiv2Address"},"description":"The utila addresses used to sign the transaction.\n\nMust be the same length as request.signing_sessions."},"replaceBlockhash":{"type":"boolean","description":"Indicates whether the recent blockhash was or will be replaced with the most recent blockhash before signing."}}},"v2TransactionStateEnum":{"type":"string","enum":["AWAITING_APPROVAL","AWAITING_AML_POLICY_CHECK","DECLINED_BY_AML_POLICY","AWAITING_POLICY_CHECK","AWAITING_SIGNATURE","SIGNED","AWAITING_PUBLISH","PUBLISHED","MINED","MINED_FAILED","FAILED","DECLINED","REPLACED","CANCELED","DROPPED","CONFIRMED","EXPIRED"],"description":"The state of the transaction.\n\n - AWAITING_APPROVAL: Transaction requires approving votes.\n - AWAITING_AML_POLICY_CHECK: The transaction is waiting for the AML policy check to be completed.\nRelevant only for outgoing transactions.\n - DECLINED_BY_AML_POLICY: Transaction was declined by the AML policy Relevant only for outgoing transactions.\n - AWAITING_POLICY_CHECK: Transaction is waiting for the policy check to be completed.\n - AWAITING_SIGNATURE: Transaction is approved and ready to be signed.\n - SIGNED: Transaction is signed but not yet published.\n - AWAITING_PUBLISH: Transaction has been sent to the publishing queue.\n - PUBLISHED: Transaction has been published to the blockchain's mem-pool.\n - MINED: Transaction has been included in a block successfully.\n - MINED_FAILED: Transaction has entered a block but in a failed state (e.g. a failed smart contract call).\n - FAILED: Transaction has entered a block but in a failed state and was confirmed as such by multiple blocks\n - DECLINED: Transaction was declined by a policy check.\n - REPLACED: Transaction was replaced by a new transaction (same nonce or RBF).\n - CANCELED: Transaction was canceled by its initiator or by an admin.\n - DROPPED: Transaction was dropped by the network without being included in a block.\n - CONFIRMED: Transaction has been confirmed by multiple blocks in the blockchain.\n - EXPIRED: Transaction was expired after a certain amount of time."},"v2TransactionStellarTransaction":{"type":"object","properties":{"sourceAccountAddress":{"description":"The source account of the transaction.","readOnly":true,"allOf":[{"$ref":"#/components/schemas/apiv2Address"}]},"sequenceNumber":{"type":"string","description":"The sequence number of the transaction.","readOnly":true},"fee":{"type":"string","format":"int64","description":"The fee paid for the transaction in stroops.","readOnly":true},"memo":{"description":"The memo attached to the transaction.","readOnly":true,"allOf":[{"$ref":"#/components/schemas/v2TransactionStellarTransactionMemo"}]},"timeBounds":{"description":"The timebounds of the transaction.","readOnly":true,"allOf":[{"$ref":"#/components/schemas/TransactionStellarTransactionStellarTimeBounds"}]},"operations":{"type":"array","items":{"$ref":"#/components/schemas/StellarTransactionStellarOperation"},"description":"The operations in the transaction supported by utila.","readOnly":true},"rawXdrEnvelope":{"type":"string","format":"byte","title":"The raw transaction payload"}}},"v2TransactionStellarTransactionMemo":{"type":"object","properties":{"type":{"description":"The type of the memo.","allOf":[{"$ref":"#/components/schemas/v2TransactionStellarTransactionMemoTypeEnum"}]},"data":{"type":"string","description":"The data of the memo."}},"required":["type","data"]},"v2TransactionStellarTransactionMemoTypeEnum":{"type":"string","enum":["TEXT","ID","HASH","RETURN"],"description":" - TEXT: A text memo. Limited to 28 bytes.\n - ID: A id memo. An unsigned 64-bit integer.\n - HASH: A hash memo. A hex string of the hash with a `0x` prefix.\n - RETURN: A return memo. A hex string of the return hash with a `0x` prefix."},"v2TransactionSubTypeEnum":{"type":"string","enum":["NATIVE_TRANSFER","TOKEN_TRANSFER","NON_FUNGIBLE_TOKEN_TRANSFER","TOKEN_APPROVAL","PERSONAL_SIGN","SIGN_TYPED_DATA","EVM_ACCOUNT_DELEGATION","CONTRACT_CALL","NATIVE_MULTI_TRANSFER","NON_FUNGIBLE_TOKEN_APPROVAL","CONNECTION_TRANSFER","BATCH_TRANSFER","TOKEN_MINT","TOKEN_BURN","PROGRAM_CALL","CONTRACT_DEPLOYMENT","TON_PROOF","TON_SIGN_DATA","SOLANA_SIGN_MESSAGE","GENERIC_TRANSACTION","CHANGE_TRUST","CANTON_TOPOLOGY_TRANSACTION","CANTON_TRANSFER_AUTO_APPROVAL","CANTON_ACCEPT_TRANSFER_OFFER","SUBMITTING_TRANSACTION","BTC_PSBT","BTC_TRANSFER"]},"v2TransactionSuiSignPersonalMessage":{"type":"object","properties":{"signer":{"description":"The address of the signer.","allOf":[{"$ref":"#/components/schemas/apiv2Address"}]},"message":{"type":"string","format":"byte","description":"The message to sign."},"signature":{"type":"string","format":"byte","description":"The signature of the message."}}},"v2TransactionTonProof":{"type":"object","properties":{"address":{"type":"string","description":"The address of the signer.\nIn Raw address format.\n\nExample: `0:1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef`."},"appDomain":{"type":"string","title":"The domain of the app requested the proof"},"payload":{"type":"string","description":"The payload to sign."},"timestamp":{"type":"string","format":"int64","description":"The time at which the signature was created."},"signature":{"type":"string","description":"The signature of the payload."}}},"v2TransactionTonSignData":{"type":"object","properties":{"schemaCrc":{"type":"string","format":"int64","description":"Indicates the layout of payload cell that in turn defines domain separation.\nThis is a descriptor of the content of the cell."},"cell":{"type":"string","description":"The payload to sign."},"publicKey":{"type":"string","description":"The public key of the signer."},"timestamp":{"type":"string","format":"int64","description":"The time at which the signature was created."},"signature":{"type":"string","description":"The signature of the typed data."}}},"v2TransactionTronTransaction":{"type":"object","properties":{"triggerSmartContract":{"$ref":"#/components/schemas/v2TransactionTronTransactionTriggerSmartContract"},"freezeBalanceV2":{"$ref":"#/components/schemas/v2TransactionTronTransactionFreezeBalanceV2"},"unfreezeBalanceV2":{"$ref":"#/components/schemas/v2TransactionTronTransactionUnfreezeBalanceV2"},"withdrawExpireUnfreeze":{"$ref":"#/components/schemas/v2TransactionTronTransactionWithdrawExpireUnfreeze"},"delegateResource":{"$ref":"#/components/schemas/v2TransactionTronTransactionDelegateResource"},"undelegateResource":{"$ref":"#/components/schemas/v2TransactionTronTransactionUnDelegateResource"},"cancelAllUnfreezeV2":{"$ref":"#/components/schemas/v2TransactionTronTransactionCancelAllUnfreezeV2"},"voteWitness":{"$ref":"#/components/schemas/v2TransactionTronTransactionVoteWitness"},"withdrawBalance":{"$ref":"#/components/schemas/v2TransactionTronTransactionWithdrawBalance"},"fee":{"description":"The fee details of the transaction.","allOf":[{"$ref":"#/components/schemas/v2TronTransactionFee"}]},"signature":{"type":"string","format":"byte","description":"ECDSA signature (65 bytes) of the transaction.\n\nAvailable when the transaction has been signed.\n\nEncoded in standard TRON format:\n  - Bytes [0-31]: R component (32 bytes, big-endian)\n  - Bytes [32-63]: S component (32 bytes, big-endian)\n  - Byte [64]: V component (recovery identifier)","readOnly":true}}},"v2TransactionTronTransactionCancelAllUnfreezeV2":{"type":"object","properties":{"ownerAddress":{"description":"The source of the transaction.\n\nA base58 string address (example: `TZ4UXDV5ZhNW7fb2AMSbgfAEZ7hWsnYS2g`)","allOf":[{"$ref":"#/components/schemas/apiv2Address"}]}}},"v2TransactionTronTransactionDelegateResource":{"type":"object","properties":{"ownerAddress":{"description":"The source of the transaction.\n\nA base58 string address (example: `TZ4UXDV5ZhNW7fb2AMSbgfAEZ7hWsnYS2g`)","allOf":[{"$ref":"#/components/schemas/apiv2Address"}]},"resource":{"description":"The resource to delegate.\n\nCan be one of the following:\n1. `BANDWIDTH`\n2. `ENERGY`","allOf":[{"$ref":"#/components/schemas/v2TransactionTronTransactionTronResourceEnum"}]},"amount":{"type":"string","example":"1500000","description":"The amount of the resource to delegate, in SUN.\n\nExample: `1500000`."},"asset":{"type":"string","example":"assets/native.tron-mainnet","description":"The asset that is being delegated.\n\nExample: `assets/native.tron-mainnet`."},"receiverAddress":{"description":"The address to delegate the resource to.\n\nA base58 string address (example: `TZ4UXDV5ZhNW7fb2AMSbgfAEZ7hWsnYS2g`)","allOf":[{"$ref":"#/components/schemas/apiv2Address"}]},"lock":{"type":"boolean","description":"Whether to lock the delegation.\n\nDefault: false."},"lockPeriod":{"type":"string","description":"The period to lock the delegation, in block numbers, 1 block ≈ 3 seconds.\n\nExample: `1000`."}}},"v2TransactionTronTransactionFreezeBalanceV2":{"type":"object","properties":{"ownerAddress":{"description":"The source of the transaction.\n\nA base58 string address (example: `TZ4UXDV5ZhNW7fb2AMSbgfAEZ7hWsnYS2g`)","allOf":[{"$ref":"#/components/schemas/apiv2Address"}]},"amount":{"type":"string","example":"1500000","description":"Amount of TRX to be staked, in SUN.\n\nExample: `1500000`."},"resource":{"description":"The resource to freeze.\n\nCan be one of the following:\n1. `BANDWIDTH`\n2. `ENERGY`","allOf":[{"$ref":"#/components/schemas/v2TransactionTronTransactionTronResourceEnum"}]},"asset":{"type":"string","example":"assets/native.tron-mainnet","description":"The asset that is being staked.\n\nExample: `assets/native.tron-mainnet`."}}},"v2TransactionTronTransactionTriggerSmartContract":{"type":"object","properties":{"ownerAddress":{"description":"The source of the transaction.\n\nA base58 string address (example: `TZ4UXDV5ZhNW7fb2AMSbgfAEZ7hWsnYS2g`)","allOf":[{"$ref":"#/components/schemas/apiv2Address"}]},"contractAddress":{"description":"The smart contract address.\n\nA base58 string address (example: `TZ4UXDV5ZhNW7fb2AMSbgfAEZ7hWsnYS2g`)","allOf":[{"$ref":"#/components/schemas/apiv2Address"}]},"callValue":{"type":"string","format":"int64","description":"The amount of SUN passed into the contract (1 TRX = 1,000,000 SUN).\n\nExample: `500000`."},"data":{"type":"string","description":"Hex encoded transaction data. This field will be returned only in FULL view.\n\nExample: `0xa9059cbb0000000000000000000000002ed5dd8a98aea00ae32517742ea5289761b2710e0000000000000000000000000000000000000000000000000000000ba43b7400`."}}},"v2TransactionTronTransactionTronResourceEnum":{"type":"string","enum":["BANDWIDTH","ENERGY"]},"v2TransactionTronTransactionUnDelegateResource":{"type":"object","properties":{"ownerAddress":{"description":"The source of the transaction.\n\nA base58 string address (example: `TZ4UXDV5ZhNW7fb2AMSbgfAEZ7hWsnYS2g`)","allOf":[{"$ref":"#/components/schemas/apiv2Address"}]},"resource":{"description":"The resource to undelegate.\n\nCan be one of the following:\n1. `BANDWIDTH`\n2. `ENERGY`","allOf":[{"$ref":"#/components/schemas/v2TransactionTronTransactionTronResourceEnum"}]},"amount":{"type":"string","example":"1500000","description":"The amount of the delegated resource to undelegate, in SUN.\n\nExample: `1500000`."},"asset":{"type":"string","example":"assets/native.tron-mainnet","description":"The asset that is being undelegated.\n\nExample: `assets/native.tron-mainnet`."},"receiverAddress":{"description":"The address to undelegate the resource from.\n\nA base58 string address (example: `TZ4UXDV5ZhNW7fb2AMSbgfAEZ7hWsnYS2g`)","allOf":[{"$ref":"#/components/schemas/apiv2Address"}]}}},"v2TransactionTronTransactionUnfreezeBalanceV2":{"type":"object","properties":{"ownerAddress":{"description":"The source of the transaction.\n\nA base58 string address (example: `TZ4UXDV5ZhNW7fb2AMSbgfAEZ7hWsnYS2g`)","allOf":[{"$ref":"#/components/schemas/apiv2Address"}]},"amount":{"type":"string","example":"1500000","description":"Amount of TRX to be unstaked, in SUN.\n\nExample: `1500000`."},"resource":{"description":"The resource to unfreeze.\n\nCan be one of the following:\n1. `BANDWIDTH`\n2. `ENERGY`","allOf":[{"$ref":"#/components/schemas/v2TransactionTronTransactionTronResourceEnum"}]},"asset":{"type":"string","example":"assets/native.tron-mainnet","description":"The asset that is being unstaked.\n\nExample: `assets/native.tron-mainnet`."}}},"v2TransactionTronTransactionVoteWitness":{"type":"object","properties":{"ownerAddress":{"description":"Voter address.\n\nA base58 string address (example: `TZ4UXDV5ZhNW7fb2AMSbgfAEZ7hWsnYS2g`)","allOf":[{"$ref":"#/components/schemas/apiv2Address"}]},"votes":{"type":"array","items":{"$ref":"#/components/schemas/v2TransactionTronTransactionVoteWitnessVote"},"description":"The votes to cast. Max 30 votes.\n\nExample: `[{\"vote_address\": \"TZ4UXDV5ZhNW7fb2AMSbgfAEZ7hWsnYS2g\", \"vote_count\": \"1000\"}]`"}},"required":["votes"]},"v2TransactionTronTransactionVoteWitnessVote":{"type":"object","properties":{"voteAddress":{"description":"The address of Super Representatives to vote for.\n\nA base58 string address (example: `TZ4UXDV5ZhNW7fb2AMSbgfAEZ7hWsnYS2g`)","allOf":[{"$ref":"#/components/schemas/apiv2Address"}]},"voteCount":{"type":"string","description":"Example: `1000`.","title":"Number of votes, (1 vote = 1 staked TRX)"}}},"v2TransactionTronTransactionWithdrawBalance":{"type":"object","properties":{"ownerAddress":{"description":"The source of the transaction.\n\nA base58 string address (example: `TZ4UXDV5ZhNW7fb2AMSbgfAEZ7hWsnYS2g`)","allOf":[{"$ref":"#/components/schemas/apiv2Address"}]}}},"v2TransactionTronTransactionWithdrawExpireUnfreeze":{"type":"object","properties":{"ownerAddress":{"description":"The source of the transaction.\n\nA base58 string address (example: `TZ4UXDV5ZhNW7fb2AMSbgfAEZ7hWsnYS2g`)","allOf":[{"$ref":"#/components/schemas/apiv2Address"}]}}},"v2TransactionTypeEnum":{"type":"string","enum":["TRANSACTION","MESSAGE"]},"v2TransactionView":{"type":"string","enum":["BASIC","FULL"],"description":" - BASIC: The default view. Does not include certain fields such as blocking transactions.\n - FULL: Full view, include all fields."},"v2TronAccountActivationFee":{"type":"object","properties":{"fee":{"type":"string","description":"The activation fee in SUN."},"convertedFee":{"description":"The converted (fiat) value of the activation fee.","allOf":[{"$ref":"#/components/schemas/v2ConvertedValue"}]}}},"v2TronFeeEstimation":{"type":"object","properties":{"bandwidthUsed":{"type":"string","description":"The bandwidth to be used by the transaction out of available account bandwidth."},"energyUsed":{"type":"string","description":"The energy to be used by the transaction out of available account energy."},"totalSunUsed":{"type":"string","description":"The estimated total sun to be burned by the transaction, including energy."},"bandwidth":{"description":"Bandwidth resource fee breakdown.","allOf":[{"$ref":"#/components/schemas/v2TronResourceFee"}]},"energy":{"description":"Energy resource fee breakdown.","allOf":[{"$ref":"#/components/schemas/v2TronResourceFee"}]},"accountActivationFee":{"description":"Account activation fee, present when the transaction activates a new account.","allOf":[{"$ref":"#/components/schemas/v2TronAccountActivationFee"}]}}},"v2TronResourceFee":{"type":"object","properties":{"consumed":{"type":"string","description":"The amount of the resource consumed."},"burned":{"type":"string","description":"The amount of TRX burned for this resource."},"convertedBurned":{"description":"The converted (fiat) value of the TRX burned for this resource.","allOf":[{"$ref":"#/components/schemas/v2ConvertedValue"}]}},"description":"Resource-level fee breakdown for a Tron resource (bandwidth or energy)."},"v2TronTransactionFee":{"type":"object","properties":{"usedSun":{"type":"string","description":"The amount of sun used by the transaction."},"convertedValue":{"description":"The converted amount of sun used by the transaction.","allOf":[{"$ref":"#/components/schemas/v2ConvertedValue"}]},"bandwidth":{"description":"Bandwidth resource fee breakdown.","allOf":[{"$ref":"#/components/schemas/v2TronResourceFee"}]},"energy":{"description":"Energy resource fee breakdown.","allOf":[{"$ref":"#/components/schemas/v2TronResourceFee"}]},"accountActivationFee":{"description":"Account activation fee, present when the transaction activates a new account.","allOf":[{"$ref":"#/components/schemas/v2TronAccountActivationFee"}]}}},"v2TronTriggerSmartContract":{"type":"object","properties":{"network":{"type":"string","example":"networks/tron-mainnet","description":"The resource name of the network of the transaction.\n\nFormat: `networks/{network_id}`."},"ownerAddress":{"type":"string","description":"The source of the transaction.\n\nCan be one of the following:\n1. A hex string address, must start with 41 (example: `418840E6C55B9ADA326D211D818C34A994AECED808`)\n2. A base58 string address (example: `TZ4UXDV5ZhNW7fb2AMSbgfAEZ7hWsnYS2g`)"},"contractAddress":{"type":"string","description":"The smart contract to trigger.\n\nCan be one of the following:\n1. A hex string address, must start with 41 (example: `418840E6C55B9ADA326D211D818C34A994AECED808`)\n2. A base58 string address (example: `TZ4UXDV5ZhNW7fb2AMSbgfAEZ7hWsnYS2g`)"},"callValue":{"type":"string","format":"int64","description":"The amount of SUN passed into the contract (1 TRX = 1,000,000 SUN).\n\nExample: `500000`."},"data":{"type":"string","example":"a9059cbb0000000000000000000000002ed5dd8a98aea00ae32517742ea5289761b2710e0000000000000000000000000000000000000000000000000000000ba43b7400","description":"Hex encoded transaction data.\n\nExample: `a9059cbb0000000000000000000000002ed5dd8a98aea00ae32517742ea5289761b2710e0000000000000000000000000000000000000000000000000000000ba43b7400`."}},"required":["network","ownerAddress","contractAddress"]},"v2UTXOState":{"type":"string","enum":["AVAILABLE","LOCKED","FROZEN"],"description":" - AVAILABLE: The UTXO is available for spending.\n - LOCKED: The UTXO is locked by a pending transaction.\n - FROZEN: The UTXO is frozen due to compliance reasons and cannot be spent."},"v2User":{"type":"object","properties":{"name":{"type":"string","title":"Resource name of the user in the format \"users/{user_id}\"","readOnly":true},"fullname":{"type":"string","title":"The user's full name"},"email":{"type":"string","title":"The user's email address"},"pictureUri":{"type":"string","title":"URL to the user's profile picture"},"type":{"title":"The user's type (regular user or service account)","allOf":[{"$ref":"#/components/schemas/apiUserTypeEnum"}]},"vaultContext":{"title":"The user's vault context (if applicable)","allOf":[{"$ref":"#/components/schemas/apiv2VaultContext"}]}},"title":"User resource represents a user in the Utila platform","required":["email"]},"v2Vault":{"type":"object","properties":{"name":{"type":"string","example":"vaults/95257c5a522f","description":"The resource name of the vault.\n\nFormat: `vaults/{vault_id}`","readOnly":true},"displayName":{"type":"string","example":"Fund VI","description":"A human-readable name.\n\nMust match the regular expression `[a-zA-Z0-9\\.,:\\-'# _$]+$` and be shorter than 100 characters"},"archived":{"type":"boolean","description":"Whether this vault is archived.\n\nArchived vaults are not returned by default in `ListVaults` and are not shown in the UI.","readOnly":true},"createTime":{"type":"string","format":"date-time","description":"Creation timestamp.","readOnly":true}},"required":["displayName"]},"v2VaultAction":{"type":"object","properties":{"name":{"type":"string","description":"The resource name of the vault action.\n\nFormat: `vaults/{vault_id}/actions/{action_id}`","readOnly":true},"status":{"description":"The current status of the vault action.","readOnly":true,"allOf":[{"$ref":"#/components/schemas/v2VaultActionStatusEnum"}]},"createTime":{"type":"string","format":"date-time","description":"Creation timestamp.","readOnly":true},"expireTime":{"type":"string","format":"date-time","description":"Expiration timestamp.","readOnly":true}}},"v2VaultActionStatusEnum":{"type":"string","enum":["PENDING","REJECTED","AWAITING_SIGNATURE","RUNNING","FINISHED","FAILED","CANCELED","EXPIRED"]},"v2VoteOnTransactionRequestRequestVote":{"type":"string","enum":["APPROVE","DENY"],"description":"The vote to cast on the transaction request."},"v2VoteOnTransactionRequestResponse":{"type":"object","properties":{"transactionState":{"$ref":"#/components/schemas/v2TransactionStateEnum"}}},"v2Wallet":{"type":"object","properties":{"name":{"type":"string","example":"vaults/1b25635a5b3f/wallets/95257c5a522f","description":"The resource name of the wallet.\n\nFormat: `vaults/{vault_id}/wallets/{wallet_id}`","readOnly":true},"displayName":{"type":"string","example":"DeFi wallet","description":"A human-readable name.\n\nMust match the regular expression `[a-zA-Z0-9\\.,:\\-'# _$]+$` and be shorter than 100 characters"},"external":{"type":"boolean","description":"Whether this wallet is external.\n\nExternal wallets are wallets that are not managed by Utila.","readOnly":true},"archived":{"type":"boolean","description":"Whether this wallet is archived.","readOnly":true},"convertedValue":{"description":"The converted value of all assets in this Wallet.\nIncluded only when `FULL` view is requested.\n\nNote: this is an estimate, and may be out of date.","readOnly":true,"allOf":[{"$ref":"#/components/schemas/v2ConvertedValue"}]},"hasFrozenAssets":{"type":"boolean","example":true,"description":"Some of the assets in this wallet are frozen due to a AML policy.\nIncluded only when `FULL` view is requested.","readOnly":true},"networks":{"type":"array","example":["networks/ethereum-mainnet"],"items":{"type":"string"},"description":"The resource names of the networks of the wallet. Can be set during creation and can be added later\nthrough the `CreateWalletAddress` method."},"evmDetails":{"description":"If this wallet contains an EVM network, this field will be populated.","readOnly":true,"allOf":[{"$ref":"#/components/schemas/v2WalletEVMDetails"}]},"tronDetails":{"description":"If this wallet contains a Tron network, this field will be populated.","readOnly":true,"allOf":[{"$ref":"#/components/schemas/WalletTronDetails"}]},"tonDetails":{"description":"If this wallet contains a Ton network, this field will be populated.","readOnly":true,"allOf":[{"$ref":"#/components/schemas/v2WalletTonDetails"}]},"solanaDetails":{"description":"If this wallet contains a Solana network, this field will be populated.","readOnly":true,"allOf":[{"$ref":"#/components/schemas/WalletSolanaDetails"}]},"createParams":{"description":"Parameters only used during wallet creation. Not included in responses.","allOf":[{"$ref":"#/components/schemas/WalletCreateParams"}]},"btcDetails":{"description":"If this wallet contains a Bitcoin network, this field will be populated.","readOnly":true,"allOf":[{"$ref":"#/components/schemas/WalletBTCDetails"}]}},"required":["displayName","networks"]},"v2WalletAddress":{"type":"object","properties":{"name":{"type":"string","example":"vaults/1b25635a5b3f/wallets/67af44031584/addresses/519c67ddae33","description":"The resource name of the WalletAddress.\n\nFormat: `vaults/{vault_id}/wallets/{wallet_id}/addresses/{address_id}`","readOnly":true},"displayName":{"type":"string","example":"Hal's Address 3","description":"A human-readable name.\nRelevant only for deposit addresses.\n\nMust match the regular expression `[a-zA-Z0-9\\.,:\\-'# _$]+$` and be shorter than 100 characters"},"network":{"type":"string","example":"networks/bitcoin-mainnet","description":"The resource name of the network of the address.\n\nFormat: `networks/{network_id}`"},"address":{"type":"string","example":"bc1q04pum57enmfgcu3tu5gwqlmza5n7tchky0gjvu","description":"The blockchain address.","readOnly":true},"format":{"example":"BITCOIN_P2WPKH","description":"Address format.","readOnly":true,"allOf":[{"$ref":"#/components/schemas/WalletAddressFormat"}]},"key":{"type":"string","example":"vaults/1b25635a5b3f/keys/95257c5a522f","description":"The resource name of the MPC key this address was derived from.\n\nFormat: `vaults/{vault_id}/keys/{key_id}`","readOnly":true},"keyDerivationPath":{"type":"array","example":[44,0,0,0,3],"items":{"type":"string","format":"int64"},"description":"Derivation path of the address from the MPC key.","readOnly":true},"type":{"example":"DEPOSIT","readOnly":true,"allOf":[{"$ref":"#/components/schemas/v2WalletAddressType"}]},"note":{"type":"string","example":"This is a note","title":"note"}},"required":["network"]},"v2WalletAddressBalance":{"type":"object","properties":{"asset":{"type":"string","example":"assets/native.ethereum-mainnet","description":"The resource name of the asset.\n\nFormat: `assets/{asset_id}`"},"walletAddress":{"type":"string","example":"vaults/1b25635a5b3f/wallets/203809def2/addresses/519c67ddae33","description":"The resource name of the wallet address.\n\nFormat: `vaults/{vault_id}/wallets/{wallet_id}/addresses/{address_id}`"},"value":{"type":"string","example":"1.3","description":"The amount of the asset, in decimal form with precision included."},"rawValue":{"type":"string","example":"13000000","description":"The raw amount of the asset that this balance contains.\n\nSpecified in the smallest unit of the Asset."},"frozenValue":{"type":"string","example":"0.3"}}},"v2WalletAddressType":{"type":"string","enum":["MAIN","DEPOSIT","CHANGE"],"description":" - MAIN: Main address (main address of the wallet).\n - DEPOSIT: Deposit address.\n - CHANGE: Change address."},"v2WalletBalance":{"type":"object","properties":{"asset":{"type":"string","example":"assets/native.ethereum-mainnet","description":"The resource name of the asset.\n\nFormat: `assets/{asset_id}`"},"wallet":{"type":"string","example":"vaults/1b25635a5b3f/wallets/203809def2","description":"The resource name of the wallet.\n\nFormat: `vaults/{vault_id}/wallets/{wallet_id}`"},"value":{"type":"string","example":"1.3","description":"The amount of the asset, in decimal form with precision included."},"rawValue":{"type":"string","example":"13000000","description":"The raw amount of the asset that this balance contains.\n\nSpecified in the smallest unit of the Asset."},"frozenValue":{"type":"string","example":"0.3"}}},"v2WalletEVMDetails":{"type":"object","properties":{"address":{"type":"string","description":"The address of the wallet.","readOnly":true}}},"v2WalletTonDetails":{"type":"object","properties":{"address":{"type":"string","description":"The address of the wallet.","readOnly":true}}},"v2WalletView":{"type":"string","enum":["BASIC","FULL"],"description":" - BASIC: The default view. Does not include the converted value.\n - FULL: Calculate and include the converted value and additional fields."},"v2WalletconnectSession":{"type":"object","properties":{"name":{"type":"string","example":"vaults/1b25635a5b3f/walletconnectSessions/123","description":"The resource name of the walletconnect session.\n\nFormat: `vaults/{vault_id}/walletconnectSessions/{walletconnect_session_id}`.","readOnly":true},"initiator":{"type":"string","description":"The initiator of the walletconnect session.\n\nFormat: `users/{user_id}`.","readOnly":true},"peer":{"description":"The peer of the walletconnect session.","readOnly":true,"allOf":[{"$ref":"#/components/schemas/WalletconnectSessionPeer"}]},"network":{"type":"string","description":"The network of the walletconnect session.\n\nFormat: `networks/{network_id}`.","readOnly":true}}}},"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}}},"security":[{"bearerAuth":[]}]}