openapi: 3.0.0 info: version: 2.0.0 title: Anchorage Digital API Reference Addresses Wallets API contact: email: api@anchorage.com description: "# Introduction\n*CONFIDENTIAL: Please do not distribute this documentation externally without prior Anchorage Digital approval.*\n\n\nThe Anchorage Digital REST API v2.0 provides a set of operations and resources that allow Anchorage Digital clients and partners to:\n - Programmatically transfer funds from an Anchorage Digital vault or wallet without human intervention\n - Create and list deposit addresses in a vault\n - Read and monitor vault balances\n - Query transaction history including deposits\n - Request quotes from and execute trades with the Anchorage Digital trading desk\n\n\nWant help or to share your opinion on how this API works for you? Please contact api@anchorage.com.\n\n\n# Authentication and Security\n\nThe Anchorage Digital API performs authentication and authorization via a combination of:\n\n\n* An API key, which is a bearer token\n\n* A permission group signed by the user's organization, which is linked to the API key\n\n* An Ed25519 Signature, which comes from a user-generated key and is required for certain requests\n\n\n## Permission Groups\n\n\nA permission group acts as a set of rules for how an organization and its resources can be accessed. Permission groups are created independently of API keys, and new permission groups must be created prior to making an API key.\n\n\nEach permission group has a name, a description and a set of permissions which can be applied to your organization's vaults. Updating, creating and deleting permissions groups require a quorum of approvals. After creation, a permission group can be freely assigned to an unlimited number of API keys.\n\n\nEach API key inherits its permissions from the associated permission group. When the permission group is updated, all API keys associated with it will inherit the updated permission set. If a permission group is deleted, all associated API keys will no longer work.\n\n\nEach organization is created with a default permission group that allows read-only access. This permission group may be modified or deleted at any time, and no API keys are created by default with this permission group.\n\n\n### Permissions\n\n\nPossible vault permissions include the following:\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Read vault activity (READ)See an overview of your vault(s) and wallets. Read vault details, balances, asset types, transaction history and deposit addresses.
Create address (CREATE_DEPOSIT_ADDRESS)Receive deposits in the vault from external sources. Create and read deposit addresses.
Transfer funds (TRANSFER)This permission is configurable to enable an API key endowed with this permission to either 1) Transfer funds to any Anchorage Digital institutional account, including those outside of your organization or 2) Transfer funds to any blockchain address not custodied by Anchorage Digital that has gone through quorum approval.
Propose and accept settlements (PROPOSE_ACCEPT_SETTLEMENTS)This is an Atlas specific permission for initiating settlements.
Authorize settlements (AUTHORIZE_SETTLEMENTS)This is an Atlas specific permission for authorizing settlements after they've been proposed or accepted.
\n\n\nThere are also special vault permissions for enabled by Anchorage Digital on a per-organization basis:\n\nAdditionally, there are global permissions which apply to the entire organization:\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Initiate withdrawals (INITIATE_WITHDRAWAL)Initiate withdrawals to external destinations. All withdrawals require quorum approval through the Anchorage Digital mobile app.
Execute trades (TRADE)Request for quotes (RFQ) from the Anchorage Digital trading desk. Create and accept quotes. Read data of trades and settlements created by this key.
Read trade activity (READ_TRADE)Read trade activity and trade settlements data of your organization.
Read lending activity (LENDER_READ)Read lending activity of your organization.
Read facility data (FACILITY_ONLY)Read lending facility data.
Read deposit attribution activity (READ_DEPOSIT_ATTRIBUTION)Read deposit attribution activity of your organization.
Manage deposit attributions (DEPOSIT_ATTRIBUTION)Read deposit attribution activity of your organization. Perform deposit attributions.
Initiate Staking and Unstaking (STAKE)Initiate staking or unstaking operation. All operations require quorum approval through the Anchorage Digital mobile app.
\n\n\n### Example Workflow - Allow transfers from specific vaults\n\nTo create an API key with the ability to transfer funds from an Anchorage Digital vaults or wallet, a permission group must first be created with the **Transfer funds** permission for the desired source vaults. Creating this permission group requires a quorum of approvals on the Anchorage Digital iOS app. Once the creation is confirmed, any number of API keys may be created with this permission group in the Anchorage Digital Web Dashboard under the API 2.0 section.\n\nTo add additional permissions to the API key, update the associated permission group through the Anchorage Digital Web Dashboard. To revoke any permissions, the individual API key may be revoked, or the permission group may be updated or deleted to remove Transfer access.\n\n## API Keys\n\nAll API requests must be made over HTTPS and must include authentication using the following scheme.\n\n\n\n### Generating an API Key\n\nIn order to make a valid API request, you must first create an API key. API keys can be created and managed in the Anchorage Digital Web Dashboard under the [API 2.0 tab](https://anchoragelogin.com/api). When you create an API key, there are 3 pieces of information you will need to remember:\n - API access key\n - Ed25519 public key (optional for read-only requests)\n - Ed25519 private/signing key (optional for read-only requests)\n\nYou must generate an Ed25519 signing key pair and save the public portion in the Anchorage Digital Web Dashboard when creating the API access key. The signing key pair is used for added security with sensitive requests.\n\nPlease note, Anchorage Digital cannot recover your API access key or private signing key if you forget them. You may generate a new access key and signing key at any time if you lose access.\n\n### API Key Permissions\n\nEach API key is associated with a permission group. This permission group specifies the permitted actions for all associated API keys. Read more about permission groups [here](#section/Authentication-and-Security/Permission-Groups).\n\n### Creating a request\n\nAll requests must include the `Api-Access-Key` header, which contains your API access key as a string.\n\nEndpoints that require a signature must include the `Api-Signature` and `Api-Timestamp` headers. Read more about signatures [here](#section/Authentication-and-Security/Signatures).\n\nAll request bodies must be valid JSON and have the content type `application/json`.\n\n## Request Signatures\n\nCertain endpoints require an Ed25519 signature to be provided alongside the API key. These endpoints will specify the `Api-Signature` and `Api-Timestamp` headers as additional parameters.\n\nSignatures are optional unless explicitly required, but are encouraged for all requests. If a signature is provided, it will be verified.\n\n### Signing Keys\n\nA signing key pair is generated by the user and the corresponding public key must be provided when creating an API key.\n\nWhen creating an API key, you will be prompted to provide an Ed25519 public key. You must use the associated Ed25519 signing key (private key) when creating signatures for requests from this API key.\n\nPlease note that signing keys (Ed25519 private keys) should be stored securely by the user. The signing key should only be used to derive request signatures and should never be sent in a request. Anchorage Digital will never request you share your private key.\n\n### Generating a Signing Key\n\nThe user must securely generate an Ed25519 key pair on their own hardware and retain both the public and private portions. The Anchorage Digital API accepts a 64-character (32 bytes) hex-encoded Ed25519 public key when creating an API access key.\n\n\n#### Code sample (Python)\n\n*Generate a new signing key pair*\n\n```python\n# https://pypi.org/project/PyNaCl/\n\nimport nacl\nimport nacl.signing\nimport secrets\n\nseed = secrets.token_bytes(32)\n\n# Generate a new random signing key\nsigning_key = nacl.signing.SigningKey(seed)\n\n# Obtain the hex-encoded signing key\nprint('Signing key:')\nprint(signing_key.encode().hex())\n\n# Obtain the hex-encoded verify key for the given signing key\n# Use this in the Anchorage Digital Web Dashboard when creating an API key\nprint('Public key:')\nprint(signing_key.verify_key.encode().hex())\n```\n\n\n### Signing a Request\n\nTo sign a request, generate a request signature using the Ed25519 private (signing) key and provide it alongside the request in the `Api-Signature` header.\n\nTo create a request signature, first concatenate the `timestamp`, `method`, `request path`, and `body` into a string. Then, create a signature of this message using the Ed25519 private key and hex-encode the output. Use this value as the `Api-Signature` header and use the `timestamp` value as the `Api-Timestamp` header.\n\n- The `method` is an uppercase HTTP method (ex. `GET`, `POST`, `DELETE`)\n- The `request path` should contain all query parameters (ex. `/v2/transfers?foo=bar&baz=bang`)\n- The `body` is a stringified HTTP request body\n- The `body` should be omitted if the request does not contain a body (ex. a `GET` or `DELETE` request)\n- The `timestamp` is the same as the `Api-Timestamp` header\n- The `timestamp` is a number of seconds since the Unix Epoch in UTC, and must be within one minute of the API service's time when the request is received\n\n### Reference signature\n\nTo verify your signature generation code is correct, generate a signature for the following request and timestamp using the provided signing key. If the generated signature matches the signature below, your signature generation code is correct.\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Timestamp1577880000
HTTP Method (Uppercase)POST
HTTP Path + query/v2/transfers?foo=bar&baz=bang
HTTP Body{\"source\": {\"id\": \"1c920f4241b78a1d483a29f3c24b6c4c\", \"type\": \"VAULT\"}, \"assetType\": \"ETH\", \"destination\": {\"id\": \"55e89d4a644d736b01533a2ea9b32a20\", \"type\": \"VAULT\"}, \"amount\": \"1000.00000000\"}
Signing Key (Ed25519 Private Key Seed)0101010101010101010101010101010101010101010101010101010101010101
Public Key8a88e3dd7409f195fd52db2d3cba5d72ca6709bf1d94121bf3748801b40f6f5c
Signature4bf42054bf7db1f8a2a2bc83d2a108502ee7a9d2ac7a2738adc2f932922446786fb9be1bd1eb475023296c6cba4ddbe28b04baca4b7521b1f1840a4ffd2b4d0d
\n\n## Reference clients\n\n### Python (with `requests` library)\n\n*Authorize and sign requests*\n\n```python\n\n# https://pypi.org/project/PyNaCl/\n\nfrom nacl import signing\n\nimport time\n\nimport requests\n\n\nclass AnchorageAuth(requests.auth.AuthBase):\n ACCESS_KEY_HEADER = \"Api-Access-Key\"\n SIGNATURE_HEADER = \"Api-Signature\"\n TIMESTAMP_HEADER = \"Api-Timestamp\"\n\n access_key: str\n signing_key: signing.SigningKey\n\n def __init__(self, access_key: str, signing_key_seed: bytes):\n self.access_key = access_key\n self.signing_key = signing.SigningKey(signing_key_seed)\n\n def __call__(self, r: requests.PreparedRequest):\n r.headers[self.ACCESS_KEY_HEADER] = self.access_key\n\n timestamp = str(int(time.time()))\n method = r.method.upper() if r.method else \"GET\"\n body: bytes = bytes()\n if r.body and isinstance(r.body, bytes):\n body = r.body\n elif r.body and isinstance(r.body, str):\n body = bytearray(r.body, \"utf-8\")\n message = b\"\".join(\n [bytearray(timestamp, \"utf-8\"), bytearray(method, \"utf-8\"), bytearray(r.path_url, \"utf-8\"), body]\n )\n signature = self.signing_key.sign(message).signature.hex()\n r.headers[self.SIGNATURE_HEADER] = signature\n r.headers[self.TIMESTAMP_HEADER] = timestamp\n return r\n\n\n# load secrets\n\n# Use the API key generated in the Anchorage Digital Web Dashboard\n\naccess_key = ...\n\n# Use the Ed25519 signing private key\n\nsigning_key_str = ... # load the raw string\n\nsigning_key = bytes(bytearray.fromhex(signing_key_str))\n\ndata = {}\n\nanchorage_auth = AnchorageAuth(access_key, signing_key)\n\nr = requests.post(\"https://api.anchorage.com/v2/transfers\", data=data, auth=anchorage_auth)\n\n```\n\n### Ruby - Reproduce reference signature\n```ruby\n require \"ed25519\"\n require \"net/http\"\n require \"time\"\n\n def hex_to_bin(s)\n [s].pack('H*')\n end\n\n def bin_to_hex(s)\n s.unpack('H*').first\n end\n\n private_key_seed_hex = '0101010101010101010101010101010101010101010101010101010101010101'\n public_key_hex = '8a88e3dd7409f195fd52db2d3cba5d72ca6709bf1d94121bf3748801b40f6f5c'\n key_pair_hex = private_key_seed_hex + public_key_hex\n\n key_pair = hex_to_bin(key_pair_hex)\n\n signing_key = Ed25519::SigningKey.from_keypair(key_pair)\n\n timestamp = '1577880000' # Time.now.to_i.to_s\n\n req = Net::HTTP::Post.new('/v2/transfers?foo=bar&baz=bang')\n req.body = '{\"source\": {\"id\": \"1c920f4241b78a1d483a29f3c24b6c4c\", \"type\": \"VAULT\"}, \"assetType\": \"ETH\", \"destination\": {\"id\": \"55e89d4a644d736b01533a2ea9b32a20\", \"type\": VAULT\"}, \"amount\": \"1000.00000000\"}'\n\n signature = signing_key.sign(timestamp + req.method + req.path + req.body)\n\n req['Api-Access-Key'] = 'YOUR_ACCESS_KEY'\n req['Api-Timestamp'] = timestamp\n req['Api-Signature'] = bin_to_hex(signature)\n\n puts bin_to_hex(signature)\n```\n\n# Errors\n\n\nThe Anchorage Digital API returns standard HTTP error codes for each API request.\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Response CodeDescription
200 OKThe request was successful.
400 Bad RequestThe request was improperly formed and could not be understood by the server, often due to invalid syntax, insufficient funds, or a missing required parameter.
401 UnauthorizedThe request was missing a valid API key.
403 ForbiddenThe provided API key does not have permission to perform the requested action.
404 Not FoundThe requested resource does not exist.
409 ConflictThe requested resource cannot proceed with the requested action because it is not in the required state.
429 Too Many RequestsToo many requests have been sent in a given amount of time.
\n 500 Internal Server Error\n
\n 502 Bad Gateway\n
\n 503 Service Unavailable\n
\n 504 Gateway Timeout\n
Something went wrong on Anchorage’s side. We have been alerted and are working on it.
\n\n\nIn addition to returning HTTP error codes for failed requests, the Anchorage Digital API includes a readable error message describing what went wrong in the response body.\n\n\n\n\n\n# Idempotency\n\n\nCertain endpoints support idempotent requests so that a given request can be safely retried without performing the same operation twice. For example, if a request to transfer funds does not respond due to network issues, you can retry the request using the same idempotent ID to ensure that only one transfer is created.\n\n\nEndpoints that support idempotent requests have an optional `idempotentId` field that can be included in the body of the `POST` request. Provide a unique string using your method of choice (such as a v4 UUID).\n\n\nIf a request is valid, Anchorage Digital will save the request indefinitely. If a subsequent request is received with the same `idempotentId` we will return the previously saved response for that `idempotentId`.\n\n\n# Rate Limits\n\n\nKeys provisioned by an Organization share one common rate limit. API requests are limited to 20 requests per second per Organization, allowing for bursts of up to 100 requests within a single second.\n\n\n# Pagination\n\n\nCursor pagination is used for REST endpoints which return multiple data points. Pagination allows for fetching data after the current page and specifying how many records to return. The `next` cursor is available in responses with the `page` attribute. Requests should use the `next` cursor URL to query subsequent data. Query parameter `afterId` specifies the last record previously retrieved. Some endpoints instead use the `endDate` parameter to specify the end date and older for records to retrieve. Query parameter `limit` specifies the maximum number of records in a response.\n\n## Parameters\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
ParameterDescription\n
afterIdRequest page after (older than) this pagination id.
endDateRequest records older than this date (YYYY-MM-DD format). Used for /trading/trades and /trading/settlements resources.
limitMaximum number of results requested. Default usually 25, but varies depending on resource.
\n\n## Example\n\n`GET /v2/transfers?afterId=1968b94b09b8a1a8a381775d1f04978c424d891d50e517774bf984297985b471&limit=100`\n\n## Next cursor\n\nThe `next` cursor is a URL which references the last record in a set of records. When queried, the `next` cursor URL will return subsequent records, but otherwise using the same query parameters." servers: - url: https://api.anchorage-staging.com/v2 security: - Api-Access-Key: [] tags: - description: 'A vault has one or more wallets. Each wallet is a collection of one or more addresses depending on the asset type. A wallet is created for a particular blockchain network, e.g. Bitcoin, Ethereum, etc. ### Balances Depending on the blockchain network of the wallet, a wallet may hold one or more asset types. An asset in a wallet has an `availableBalance` and a `totalBalance`. The `availableBalance` is the balance that is available to be withdrawn, held, or transferred. The `totalBalance` may contain funds that are held, in-progress, or locked for activities like voting. ### Addresses A wallet is a collection of one or more addresses depending on the asset type. The `depositAddress` contains the last address to be provisioned to that wallet. For UTXO-based assets this address could change as new deposit addresses are provisioned. For account-based assets, this address will not change as only one address may be provisioned per wallet. To see all addresses for an asset, use the [Addresses endpoint](#tag/Addresses). ### Default Wallets Each asset type within a vault has a default wallet that is used for a particular asset when only the vault is specified. For example, a transfer between two vaults will take the asset from the default wallet for that asset in the sending vault and send it to the default wallet for that asset in the destination vault. Each wallet has a `isDefault` flag that indicates whether it is the default wallet. ### Maximum Allowed Wallets and Creation Constraints We have a constraint of 10,000 wallets per asset and defined a creation limit of 10 wallets per asset per 30 minutes interval. Theses contraints are imposed at the organization level. ' name: Wallets paths: /vaults/{vaultId}/wallets: get: operationId: getVaultWallets summary: List all wallets for a vault description: 'Permissions required: **Read vault activity** Get all wallets for the specified `vaultId`. ' parameters: - name: vaultId in: path description: The ID of the vault containing the wallets required: true schema: type: string - name: afterId in: query description: When paginating this is used to provide the starting point for the page to fetch (retrieved from the previous response body) schema: type: string - name: networkId in: query description: If set, only wallets for this Network ID will be returned schema: type: string - name: assetType in: query description: If set, only wallets for this Asset Type ID will be returned schema: type: string - name: limit in: query description: Maximum number of results to return per query schema: type: integer format: int64 default: 25 maximum: 100 minimum: 1 - name: filterByIsArchived in: query description: Filter by the whether a wallet is archived. If true, then only archived wallets will be returned. If false, then only not-archived wallets are returned. If not specified, then all wallets are returned. schema: type: boolean responses: '200': description: List of wallets for this vault content: application/json: schema: $ref: '#/components/schemas/VaultsWalletsResponse' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ErrorDetails' '401': description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/ErrorDetails' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/ErrorDetails' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/ErrorDetails' '429': description: Too Many Requests content: application/json: schema: $ref: '#/components/schemas/ErrorDetails' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/ErrorDetails' tags: - Wallets x-security: Read vault activity: checkSourceVault post: operationId: createVaultWallet summary: Create a new wallet in a vault description: 'Permissions required: **Create address** Create a wallet in the specified `vaultId`. ' parameters: - name: vaultId in: path description: The ID of the vault holding the new wallet required: true schema: type: string requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/VaultsWalletsRequest' responses: '200': description: The new wallet info in this vault content: application/json: schema: $ref: '#/components/schemas/VaultsWalletResponse' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ErrorDetails' '401': description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/ErrorDetails' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/ErrorDetails' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/ErrorDetails' '429': description: Too Many Requests content: application/json: schema: $ref: '#/components/schemas/ErrorDetails' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/ErrorDetails' tags: - Wallets x-security: Create address: checkSourceVault /wallets: get: operationId: getWallets summary: List all wallets for all vaults description: 'Permissions required: **Read vault activity** List wallet metadata for the current user. ' parameters: - name: afterId in: query description: When paginating this is used to provide the starting point for the page to fetch (retrieved from the previous response body) schema: type: string - name: subaccountIds in: query description: If subaccountIds filter is present, only wallets linked to those subaccountIds will be returned. schema: type: array items: type: string uniqueItems: true explode: false style: form - name: networkId in: query description: If set, only wallets for this Network ID will be returned schema: type: string - name: assetType in: query description: If set, only wallets for this Asset Type ID will be returned schema: type: string - name: limit in: query description: Maximum number of results to return per query schema: type: integer format: int64 default: 25 maximum: 100 minimum: 1 - name: filterByIsArchived in: query description: Filter by the whether a wallet is archived. If true, then only archived wallets will be returned. If false, then only not-archived wallets are returned. If not specified, then all wallets are returned. schema: type: boolean - name: searchByAddress in: query description: Search wallets based on addresses in this wallet. The search length should be at least 3 characters. schema: type: string minLength: 3 responses: '200': description: List of wallets for this vault content: application/json: schema: $ref: '#/components/schemas/WalletsResponse' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ErrorDetails' '401': description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/ErrorDetails' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/ErrorDetails' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/ErrorDetails' '429': description: Too Many Requests content: application/json: schema: $ref: '#/components/schemas/ErrorDetails' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/ErrorDetails' tags: - Wallets x-security: Read vault activity: present /wallets/{walletId}: get: operationId: getWallet summary: Wallet details for a wallet description: 'Permissions required: **Read vault activity** Get wallet details for the specified `walletId`. ' parameters: - name: walletId in: path description: An ID uniquely identifying an Anchorage Digital wallet required: true schema: type: string - name: filterByIsArchived in: query description: Filter by the whether a wallet is archived. If true, then only archived wallets will be returned. If false, then only not-archived wallets are returned. If not specified, all wallets are returned. schema: type: boolean responses: '200': description: Wallet info for the specified wallet content: application/json: schema: $ref: '#/components/schemas/VaultsWalletResponse' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ErrorDetails' '401': description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/ErrorDetails' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/ErrorDetails' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/ErrorDetails' '429': description: Too Many Requests content: application/json: schema: $ref: '#/components/schemas/ErrorDetails' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/ErrorDetails' tags: - Wallets x-security: Read vault activity: checkSourceVault /wallets/{walletId}/activate: post: operationId: activateWallet summary: Activate an existing wallet on additional networks description: 'Permissions required: **Create address** Activate the existing wallet identified by `walletId` on additional networks that share the same cryptographic key derivation (e.g. EVM-compatible chains). Each entry in `compatibleNetworkIds` produces a new wallet on that network with the same address as the source. Per-network failures are reported individually in the response without aborting the whole call: a target network that is not key-compatible with the source wallet''s network, or that the organization has not enabled, returns a `FAILED` status for that entry while other entries continue. ' parameters: - name: walletId in: path description: An ID uniquely identifying an Anchorage Digital wallet required: true schema: type: string requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ActivateWalletRequest' responses: '200': description: Per-network activation results content: application/json: schema: $ref: '#/components/schemas/ActivateWalletResponse' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ErrorDetails' '401': description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/ErrorDetails' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/ErrorDetails' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/ErrorDetails' '429': description: Too Many Requests content: application/json: schema: $ref: '#/components/schemas/ErrorDetails' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/ErrorDetails' tags: - Wallets x-security: Create address: checkSourceVault /wallets/{walletId}/staking/rewards: get: operationId: getWalletRewards summary: Staking rewards for a wallet description: 'Permissions required: **Read vault activity** Get wallet rewards details for the specified `walletId`. ' parameters: - name: walletId in: path description: An ID uniquely identifying an Anchorage Digital wallet required: true schema: type: string - name: startDate in: query description: The start date (inclusive) in `YYYY-MM-DD` format. The earliest valid start date is '2017-01-01`. Dates are always in UTC [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) 'full-date'. schema: type: string format: date - name: endDate in: query description: The end date (inclusive) in `YYYY-MM-DD` format. The latest valid end date is the current date. Dates are always in UTC [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) 'full-date'. schema: type: string format: date - name: afterId in: query description: When paginating this is used to provide the starting point for the page to fetch (retrieved from the previous response body) schema: type: string - name: limit in: query description: Maximum number of results to return per query schema: type: integer format: int64 default: 25 maximum: 100 minimum: 1 responses: '200': description: Wallet rewards info for the specified wallet content: application/json: schema: $ref: '#/components/schemas/WalletRewardsResponse' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ErrorDetails' '401': description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/ErrorDetails' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/ErrorDetails' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/ErrorDetails' '429': description: Too Many Requests content: application/json: schema: $ref: '#/components/schemas/ErrorDetails' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/ErrorDetails' tags: - Wallets x-security: Read vault activity: checkSourceVault /wallets/{walletId}/staking/positions: get: operationId: getWalletPositions summary: Staking positions for a wallet description: 'Permissions required: **Read vault activity** Get wallet staking positions details for the specified `walletId`. ' parameters: - name: walletId in: path description: An ID uniquely identifying an Anchorage Digital wallet required: true schema: type: string - name: afterId in: query description: When paginating this is used to provide the starting point for the page to fetch (retrieved from the previous response body) schema: type: string - name: limit in: query description: Maximum number of results to return per query schema: type: integer format: int64 default: 25 maximum: 100 minimum: 1 - name: transactionId in: query description: The transaction Id to filter the wallet positions schema: type: string responses: '200': description: Wallet positions info for the specified wallet content: application/json: schema: $ref: '#/components/schemas/WalletPositionsResponse' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ErrorDetails' '401': description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/ErrorDetails' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/ErrorDetails' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/ErrorDetails' '429': description: Too Many Requests content: application/json: schema: $ref: '#/components/schemas/ErrorDetails' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/ErrorDetails' tags: - Wallets x-security: Read vault activity: checkSourceVault /batch/wallets: post: operationId: createWalletsBatch summary: Create or Activate Wallets Batch description: 'Permissions required: **Create wallet** Create or activate multiple wallets in a single batch operation. A wallet exists on exactly one network. Supports three patterns: 1. **Batch Create**: Create wallet sets across multiple networks. Creates `count` wallet sets, where each set contains one wallet per specified network, all sharing the same cryptographic keys. Total wallets created = count × number of networks. 2. **Batch Activate (List)**: Activate specific wallets for new networks. For each source wallet and target network combination, creates a new wallet that shares keys with the source. 3. **Batch Activate (Vault)**: Activate all wallets in a vault/network for new networks. For each wallet in the vault on the source network, creates new wallets on the target networks sharing the same keys. This endpoint returns immediately with a batchId. Poll GET /batch/wallets/{batchId} to check the status. Once complete, use GET /wallets?batchId={batchId} to retrieve the created/activated wallet details. For large batches (100k+ wallets), this endpoint supports best-effort processing: - COMPLETED status means at least some wallets succeeded - FAILED status means complete failure - Query results with batchId to see which wallets were created/activated' parameters: [] requestBody: description: Batch wallet creation or activation request required: true content: application/json: schema: $ref: '#/components/schemas/CreateWalletsBatchRequest' responses: '202': description: Batch wallet operation initiated content: application/json: schema: $ref: '#/components/schemas/CreateBatchResponse' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ErrorDetails_2' '401': description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/ErrorDetails_2' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/ErrorDetails_2' '429': description: Too Many Requests content: application/json: schema: $ref: '#/components/schemas/ErrorDetails_2' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/ErrorDetails_2' tags: - Wallets /batch/wallets/{batchId}: get: operationId: getWalletsBatchStatus summary: Get Wallets Batch Status description: 'Permissions required: **Read vault activity** Get the status and results of a batch wallet creation operation.' parameters: - name: batchId in: path description: The unique identifier for the batch operation required: true schema: type: string responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/BatchStatusResponse' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ErrorDetails_2' '401': description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/ErrorDetails_2' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/ErrorDetails_2' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/ErrorDetails_2' '429': description: Too Many Requests content: application/json: schema: $ref: '#/components/schemas/ErrorDetails_2' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/ErrorDetails_2' tags: - Wallets /wallets/{walletId}/rewards: get: operationId: getWalletRewards summary: Get Wallet Rewards (Per-Event) description: 'Permissions required: **Read vault activity** Get individual reward events for a wallet over a specified date range.' parameters: - name: walletId in: path description: The unique identifier of the wallet required: true schema: type: string - name: rewardType in: query description: 'The reward type to query. Solana reward types. * `DELEGATION_REWARDS` - Standard staking delegation rewards * `DELEGATION_MEV_REWARDS` - MEV rewards from staking delegation Ethereum reward types. * `EXECUTION_LAYER_REWARDS` - Execution layer rewards including transaction fees and MEV * `BLOCK_PROPOSER_REWARDS` - Block proposal rewards * `ATTESTATION_REWARDS` - Block attestation rewards * `SYNC_COMMITTEE_REWARDS` - Sync committee participation rewards' required: true schema: type: string enum: - DELEGATION_MEV_REWARDS - DELEGATION_REWARDS - EXECUTION_LAYER_REWARDS - BLOCK_PROPOSER_REWARDS - ATTESTATION_REWARDS - SYNC_COMMITTEE_REWARDS - name: assetType in: query description: Filter rewards by asset type. required: true schema: type: string example: ETH - name: startDate in: query description: The start date (inclusive) in `YYYY-MM-DD` format. Dates are always in UTC [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) 'full-date'. required: true schema: type: string format: date example: '2024-01-01' - name: endDate in: query description: The end date (inclusive) in `YYYY-MM-DD` format. Dates are always in UTC [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) 'full-date'. required: true schema: type: string format: date example: '2024-01-31' - name: first in: query description: Maximum number of results to return per query schema: type: integer format: int64 default: 25 maximum: 100 minimum: 1 - name: after in: query description: When paginating this is used to provide the starting point for the page to fetch (retrieved from the previous response body) schema: type: string responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/WalletRewardsListResponse' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ErrorDetails_2' '401': description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/ErrorDetails_2' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/ErrorDetails_2' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/ErrorDetails_2' '429': description: Too Many Requests content: application/json: schema: $ref: '#/components/schemas/ErrorDetails_2' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/ErrorDetails_2' tags: - Wallets /wallets/{walletId}/daily-rewards: get: operationId: getDailyWalletRewards summary: Get Daily Wallet Rewards (Aggregated) description: 'Permissions required: **Read vault activity** Get daily aggregated rewards for a wallet over a specified date range (maximum 31 days).' parameters: - name: walletId in: path description: The unique identifier of the wallet required: true schema: type: string - name: rewardTypes in: query description: 'Reward types to include. Only the specified types will be returned. **Note:** Do not query both an aggregate type and its component granular types in the same request to avoid double-counting. Solana reward types. * `DELEGATION_REWARDS` - Standard staking delegation rewards * `DELEGATION_MEV_REWARDS` - MEV rewards from staking delegation Ethereum reward types. **Aggregate types:** * `CONSENSUS_LAYER_REWARDS` - Sum of BLOCK_PROPOSER_REWARDS + ATTESTATION_REWARDS + SYNC_COMMITTEE_REWARDS * `EXECUTION_LAYER_REWARDS` - Execution layer rewards including transaction fees and MEV **Granular types:** * `BLOCK_PROPOSER_REWARDS` - Block proposal rewards * `ATTESTATION_REWARDS` - Block attestation rewards * `SYNC_COMMITTEE_REWARDS` - Sync committee participation rewards' required: true schema: type: array items: type: string enum: - DELEGATION_MEV_REWARDS - DELEGATION_REWARDS - CONSENSUS_LAYER_REWARDS - EXECUTION_LAYER_REWARDS - BLOCK_PROPOSER_REWARDS - ATTESTATION_REWARDS - SYNC_COMMITTEE_REWARDS minItems: 1 example: - DELEGATION_MEV_REWARDS - DELEGATION_REWARDS - name: assetType in: query description: Filter rewards by asset type. required: false schema: type: string example: ETH - name: startDate in: query description: The start date (inclusive) in `YYYY-MM-DD` format. Dates are always in UTC [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) 'full-date'. required: true schema: type: string format: date example: '2024-01-01' - name: endDate in: query description: The end date (inclusive) in `YYYY-MM-DD` format. Maximum range is 31 days from startDate. Dates are always in UTC [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) 'full-date'. required: true schema: type: string format: date example: '2024-01-31' responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/WalletRewardsResponse_2' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ErrorDetails_2' '401': description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/ErrorDetails_2' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/ErrorDetails_2' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/ErrorDetails_2' '429': description: Too Many Requests content: application/json: schema: $ref: '#/components/schemas/ErrorDetails_2' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/ErrorDetails_2' tags: - Wallets components: schemas: WalletRewardsDetails: properties: assetType: description: 'A string representing a type of crypto-asset, which usually corresponds to the crypto asset''s ticker symbol. Use `/asset-types` to list all of the supported asset types for your organization. ' type: string example: BTC referenceDate: description: The reference date of the reward type: string format: date example: '2024-01-02' rewardAmount: description: The numeric value of this amount, excluding units type: string example: '0.23133' rewardType: description: The numeric value of this amount, excluding units type: string enum: - UNCLAIMED - CLAIMED example: assetType: ETH rewardAmount: '0.021' rewardType: UNCLAIMED referenceDate: '2024-08-10' required: - assetType - rewardAmount - rewardType - referenceDate title: WalletRewardsDetails ErrorType: description: The type of error returned. type: string enum: - InternalError - InvalidRequest - Unauthenticated - Forbidden - NotFound - Conflict - UnprocessableEntity - TooManyRequests - ServiceUnavailable - QuoteExpired - InsufficientFunds - NotImplemented title: ErrorType VaultsWalletsRequest: type: object properties: activateAllCompatibleNetworks: description: When `true`, activate the new wallet on every network that is key-compatible with `networkId` and enabled for your organization — the same set returned by `compatibleNetworkIds` on `/asset-types` — without enumerating them. Mutually exclusive with `compatibleNetworkIds`; supplying both is rejected with a `400`. type: boolean compatibleNetworkIds: description: Optional list of additional compatible network IDs to activate this wallet on. All networks must share the same key family as the primary networkId. Activation on these networks happens synchronously after the initial wallet creation. type: array items: type: string networkId: description: The ID of the network for assets in this wallet. type: string example: BTC subaccountId: description: The Subaccount Identifier to link this wallet.(in development / early access) type: string walletName: description: The name of the Wallet. type: string example: Bitcoin Mainnet - Wallet 1 nullable: true required: - networkId title: VaultsWalletsRequest WalletRewardsListResponse: type: object properties: data: type: array items: $ref: '#/components/schemas/RewardEntry' page: $ref: '#/components/schemas/Page_2' required: - data - page CreateBatchResponse: description: Response from creating a batch operation type: object properties: batchId: description: The unique identifier for the batch operation. Poll the corresponding batch status endpoint to retrieve results. type: string example: batch_abc123xyz required: - batchId Page: description: Pagination info type: object properties: next: description: URL to use to query for the next page or null if no additional results are available type: string example: nullable: true x-omitempty: false title: Page WalletPositionsDetails: properties: assetType: description: 'A string representing a type of crypto-asset, which usually corresponds to the crypto asset''s ticker symbol. Use `/asset-types` to list all of the supported asset types for your organization. ' type: string example: BTC inactiveStakedAmount: description: The numeric value of this amount, excluding units type: string example: '0.23133' providerName: description: Provider name of the staking position type: string example: Figment sourceAddress: description: A crypto address for the intended asset that originated this position type: string example: 2N19AcihQ1a4MxQW658UFHTioUNnMkiHPkw stakedAmount: description: The numeric value of this amount, excluding units type: string example: '0.23133' stakingPositionId: description: Unique identifier of the staking position type: string example: 9bc4c2ccba8192b64d41b46d1770abe9ddbb430b85de3fe73e1b4f21336bc48a status: description: The status of the staking position type: string enum: - PENDING - ACTIVE - EXITED transactionId: description: The transaction Id which created this staking position type: string withdrawalAddress: description: A crypto address for the intended asset to where the funds will be withdrawn type: string example: 2N19AcihQ1a4MxQW658UFHTioUNnMkiHPkw example: stakingPositionId: 9bc4c2ccba8192b64d41b46d1770abe9ddbb430b85de3fe73e1b4f21336bc48a assetType: ETH stakedAmount: '32' inactiveStakedAmount: '0' status: ACTIVE providerName: Figment sourceAddress: 2N19AcihQ1a4MxQW658UFHTioUNnMkiHPkw withdrawalAddress: 2N19AcihQ1a4MxQW658UFHTioUNnMkiHPkw transactionId: 8696144cca28a634c05858d00e51191408498a7808a837fc4645b4b6997dde09 required: - stakingPositionId - assetType - stakedAmount - inactiveStakedAmount - status - sourceAddress - withdrawalAddress - providerName - transactionId title: WalletPositionsDetails WalletRewardsResponse: type: object properties: data: type: array items: $ref: '#/components/schemas/WalletRewardsDetails' page: $ref: '#/components/schemas/Page' required: - data - page title: WalletRewardsResponse BatchActivateWalletsFromVaultRequest: description: Activate all wallets in a vault/network for new target networks. For each wallet in the vault on the source network, creates new wallets on the target networks sharing the same keys. type: object properties: addressGenerationType: description: Address format type for the activated wallets. Only applicable to Bitcoin-like networks. Defaults to the target network's default address format if not specified. allOf: - $ref: '#/components/schemas/AddressGenerationType' idempotencyKey: description: Client-provided idempotency key to ensure request is processed only once type: string example: e763a50d-aa82-4ec7-b5a3-89ad0462d248 maxLength: 128 sourceNetworkId: description: The source network ID. All wallets in the vault on this network will be activated for the target networks. type: string sourceVaultId: description: The vault ID containing the source wallets type: string targetNetworkIds: description: Array of target network IDs. For each source wallet in the vault, creates new wallets on all target networks sharing the source's keys. Total wallets created = (number of wallets in vault on sourceNetworkId) × number of targetNetworkIds. type: array items: type: string minItems: 1 additionalProperties: false required: - sourceVaultId - sourceNetworkId - targetNetworkIds title: Batch Activate Wallets From Vault Request VaultsWalletsResponse: type: object properties: data: type: array items: $ref: '#/components/schemas/WalletDetails' page: $ref: '#/components/schemas/Page' required: - data - page title: VaultsWalletsResponse ActivateWalletRequest: type: object properties: activateAllCompatibleNetworks: description: When `true`, activate the source wallet on every network that is key-compatible with its network and enabled for your organization — the same set returned by `compatibleNetworkIds` on `/asset-types` — without enumerating them. Mutually exclusive with `compatibleNetworkIds`; supplying both, or neither, is rejected with a `400`. type: boolean compatibleNetworkIds: description: Target network IDs to activate the source wallet on. Each network must be key-compatible with the source wallet's network; incompatible entries are reported as `FAILED` in the response without affecting other entries. Mutually exclusive with `activateAllCompatibleNetworks` — provide exactly one. type: array items: type: string description: A network ID that shares cryptographic key derivation with the source wallet's network maxItems: 25 minItems: 1 title: ActivateWalletRequest Amount_2: description: Combines an asset identifier with a decimal string value type: object properties: amount: description: Amount as a decimal string. Amounts never include fees. type: string example: '10.45234733' assetType: description: A unique string identifying a specific asset on a specific blockchain and environment (testnet, mainnet). type: string example: ETH required: - assetType - amount WalletsResponse: type: object properties: data: type: array items: $ref: '#/components/schemas/WalletDetails' page: $ref: '#/components/schemas/Page' required: - data - page title: WalletsResponse WalletDetails: type: object properties: assets: description: A list of the assets in this wallet. May be empty if the wallet has no active assets. type: array items: $ref: '#/components/schemas/AssetDetailsForWallet' depositAddress: $ref: '#/components/schemas/SignedAddressForWallet' depositInstruction: $ref: '#/components/schemas/DepositInstruction' derivationPath: description: The derivation path for this wallet's key. It is present only for self-custody wallets whose keys are encrypted with a client-held control key, and is omitted otherwise. The value never changes for a given wallet, so clients can pass it as-is when deriving the child control key for an external transfer. type: string isArchived: description: Indicates if the wallet has been archived. Archived wallets, by default, will appear in wallet listing APIs, though the caller can override the default filter to get just archived wallets if necessary. type: boolean example: false isDefault: description: If `true` this wallet is the default wallet that is used for a particular asset when only a vault is specified. For example, a transfer between two vaults will take the asset from the default wallet for that asset in the sending vault and send it to the default wallet for that asset in the destination vault. Alternatively, a deposit into a vault where the wallet is not specified will deposit the funds into the default wallet for that asset. type: boolean networkId: description: The Id of the network for assets in this wallet. type: string subaccountId: description: Subaccount Id for this order to book into. type: string example: 343b6c83-6d91-4f13-9982-2109abd2dbb0 type: $ref: '#/components/schemas/ResourceType' vaultId: description: The ID of the vault containing the wallet type: string vaultName: description: The name of the vault containing the wallet type: string walletId: description: An ID uniquely identifying an Anchorage Digital wallet type: string walletName: description: The name of the Wallet. type: string example: walletId: 3d293c0d64c703023692216e9b4f5280 walletName: Bitcoin Mainnet - Wallet 1 depositAddress: address: 2N19AcihQ1a4MxQW658UFHTioUNnMkiHPkw addressId: a33f83d96ca95cac000a344aa478a8b8 addressSignaturePayload: 7b225465787441646472657373223a22324e313941636968513161344d78515736353855464854696f554e6e4d6b6948506b77227d signature: 1642000aa9cca8e8610981aefbdb204b361c9dca3fa067b88fdacfba7a0f620d721378a33f4bbadad3923e633a4d712646d1e8e314e9fcb4aa4102c0581f6503 assets: - assetType: BTC availableBalance: quantity: '10.00000000' assetType: BTC currentPrice: '9751.01' currentUSDValue: '97510.1' totalBalance: quantity: '10.45234733' assetType: BTC currentPrice: '9751.01' currentUSDValue: '101920.94' stakedBalance: quantity: '32.00000000' assetType: BTC currentPrice: '9751.01' currentUSDValue: '312032.32' unclaimedBalance: quantity: '0' assetType: BTC currentPrice: '9751.01' currentUSDValue: '0' unvestedBalance: quantity: '0' assetType: BTC currentPrice: '9751.01' currentUSDValue: '0' unvestedUnstakeableBalance: quantity: '0' assetType: BTC currentPrice: '9751.01' currentUSDValue: '0' vaultId: 1c920f4241b78a1d483a29f3c24b6c4c vaultName: Long Hold Vault isDefault: true isArchived: false networkId: BTC type: WALLET required: - walletId - walletName - assets - vaultId - vaultName - isDefault - isArchived - networkId - type title: WalletDetails ErrorDetails_2: type: object properties: message: description: A human-readable message providing more details about the error. type: string example: Missing required field 'amount'. required: - message title: ErrorDetails VaultsWalletResponse: type: object properties: data: $ref: '#/components/schemas/WalletDetails' required: - data title: VaultsWalletResponse ActivateWalletResponse: type: object properties: results: description: One entry per requested network, in the order the networks were supplied. type: array items: $ref: '#/components/schemas/ActivateWalletResult' required: - results title: ActivateWalletResponse DepositInstruction: description: The deposit instructions for fiat wallets. Crypto wallets use a deposit address instead. type: object properties: bankAddress: description: The address of the bank type: string example: 123 Main Street, Anytown, USA 12345 bankName: description: The name of the bank type: string example: Example Bank bankRoutingNumber: description: The bank routing number of the beneficiary type: string example: '123456789' bankSwiftCode: description: The SWIFT code of the bank type: string example: '12345678' beneficiaryAccountNumber: description: The bank account number of the beneficiary type: string example: '12345678' beneficiaryAddress: description: The address of the beneficiary type: string example: 123 Main Street, Anytown, USA 12345 beneficiaryName: description: The name of the beneficiary type: string example: John Doe memoField: description: A memo field for the bank info type: string example: '123456789' required: - bankName - bankRoutingNumber - bankAddress - bankSwiftCode - beneficiaryName - beneficiaryAddress - beneficiaryAccountNumber title: DepositInstruction RewardEntry: description: A single reward entry with type, date, amount, and optional transaction and staking position references type: object properties: amount: $ref: '#/components/schemas/Amount_2' date: description: The date for this reward entry in `YYYY-MM-DD` format (UTC) type: string format: date example: '2024-01-15' rewardType: description: The type of reward. Will be one of the reward types you specified in the rewardTypes query parameter. type: string example: CONSENSUS_LAYER_REWARDS stakingPositionId: description: The unique identifier of the staking position that earned this reward, if applicable. May be null for rewards not associated with a specific staking position. type: string example: pos_550e8400-e29b-41d4-a716-446655440000 nullable: true transactionHash: description: The blockchain transaction hash associated with this reward, if available. May be null for rewards that don't correspond to a specific on-chain transaction or for aggregated rewards spanning multiple transactions. type: string example: '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef' nullable: true required: - date - rewardType - amount AssetDetailsForWallet: type: object properties: assetType: description: 'A string representing a type of crypto-asset, which usually corresponds to the crypto asset''s ticker symbol. Use `/asset-types` to list all of the supported asset types for your organization. ' type: string example: BTC availableBalance: $ref: '#/components/schemas/Amount' stakedBalance: $ref: '#/components/schemas/Amount' totalBalance: $ref: '#/components/schemas/Amount' unclaimedBalance: $ref: '#/components/schemas/Amount' unvestedBalance: $ref: '#/components/schemas/Amount' unvestedUnstakeableBalance: $ref: '#/components/schemas/Amount' example: assetType: BTC availableBalance: quantity: '10.00000000' assetType: BTC currentPrice: '9751.01' currentUSDValue: '97510.1' totalBalance: quantity: '10.45234733' assetType: BTC currentPrice: '9751.01' currentUSDValue: '101920.94' stakedBalance: quantity: '32.00000000' assetType: BTC currentPrice: '9751.01' currentUSDValue: '312032.32' unclaimedBalance: quantity: '0' assetType: BTC currentPrice: '9751.01' currentUSDValue: '0' required: - assetType - availableBalance - totalBalance title: AssetDetailsForWallet ResourceType: description: The type of the resource being referenced. Note that the VAULT type has been deprecated and WALLET should be used instead. type: string enum: - VAULT - WALLET - ADDRESS - STANDING_INSTRUCTION - TRUSTED_DESTINATION title: ResourceType BatchCreateWalletsRequest: description: Create wallet sets with fresh keys across multiple networks. A wallet exists on exactly one network. type: object properties: addressGenerationType: description: Address format type for the created wallets. Only applicable to Bitcoin-like networks (BTC, BCH, LTC, DOGE). Defaults to the network's default address format if not specified. allOf: - $ref: '#/components/schemas/AddressGenerationType' count: description: Number of wallet sets to create (not total wallets). Total wallets created = count × number of networkIds. type: integer minimum: 1 idempotencyKey: description: Client-provided idempotency key to ensure request is processed only once type: string example: e763a50d-aa82-4ec7-b5a3-89ad0462d248 maxLength: 128 networkIds: description: Array of network IDs. Creates `count` wallet sets, where each set contains one wallet per network, all sharing the same cryptographic keys. Total wallets created = count × number of networks. type: array items: type: string minItems: 1 vaultId: description: The vault ID in which to create wallets type: string walletNamePrefix: description: Wallet name identifier. The wallet name prefix is directly used as wallet name if count = 1. If count is >1 then the wallet name prefix is appended with the batch_id and a index from 1 to count. type: string additionalProperties: false required: - vaultId - networkIds - count title: Batch Create Wallets Request Page_2: description: Pagination info type: object properties: endCursor: description: Submit this parameter in the "after" field to fetch the next page. type: string nullable: true title: Page ErrorDetails: type: object properties: errorType: $ref: '#/components/schemas/ErrorType' message: description: A human-readable message providing more details about the error. type: string example: Missing required field 'amount'. required: - errorType - message title: ErrorDetails WalletRewardsResponse_2: description: Response containing daily rewards over a date range for a specific reward type type: object properties: rewards: description: Array of daily reward entries, one per day in the requested range type: array items: $ref: '#/components/schemas/DailyRewardEntry' required: - rewards WalletPositionsResponse: type: object properties: data: type: array items: $ref: '#/components/schemas/WalletPositionsDetails' page: $ref: '#/components/schemas/Page' required: - data - page title: WalletPositionsResponse BatchStatusResponse: description: Status of a batch operation type: object properties: batchId: description: The unique identifier for the batch operation type: string status: description: Overall status of the batch operation type: string enum: - PENDING - COMPLETED - FAILED required: - batchId - status DailyRewardEntry: description: Reward amount for a single day type: object properties: amount: $ref: '#/components/schemas/Amount_2' date: description: The date for this reward entry in `YYYY-MM-DD` format (UTC) type: string format: date example: '2024-01-15' rewardType: description: The type of reward. Will be one of the reward types you specified in the rewardTypes query parameter. type: string example: CONSENSUS_LAYER_REWARDS required: - date - amount AddressGenerationType: description: 'Address format type for Bitcoin-like blockchains. * `DEFAULT` - Network''s default format (P2SH-P2WPKH for most networks) * `BITCOINLIKE_P2PKH` - Legacy Pay-to-Public-Key-Hash addresses (starts with ''1'' for Bitcoin) * `BITCOINLIKE_P2SH_P2WPKH` - Wrapped SegWit addresses (starts with ''3'' for Bitcoin) * `BITCOINLIKE_P2TR` - Taproot addresses (starts with ''bc1p'' for Bitcoin)' type: string default: DEFAULT enum: - DEFAULT - BITCOINLIKE_P2PKH - BITCOINLIKE_P2SH_P2WPKH - BITCOINLIKE_P2TR ActivateWalletResult: type: object properties: errorMessage: description: Human-readable explanation when `status` is `FAILED`. type: string networkId: description: The target network ID this entry refers to. type: string status: description: '`SUCCESS` if the wallet was activated (or already existed on the network); `FAILED` if the activation could not proceed for this network.' type: string enum: - SUCCESS - FAILED x-enum-varnames: - ActivateWalletResultStatusSUCCESS - ActivateWalletResultStatusFAILED walletId: description: The wallet's unique identifier on the target network. Present when `status` is `SUCCESS`. type: string required: - networkId - status title: ActivateWalletResult CreateWalletsBatchRequest: description: 'Request to create or activate multiple wallets in a batch operation. A wallet exists on exactly one network. Supports three mutually exclusive patterns: 1. **Batch Create**: Create wallet sets across networks. Each set contains one wallet per network, all sharing keys. 2. **Batch Activate (List)**: Activate specific wallets for new networks. Creates new wallets sharing keys with the specified sources. 3. **Batch Activate (Vault)**: Activate all wallets in a vault/network for new networks. Creates new wallets sharing keys with each source.' oneOf: - $ref: '#/components/schemas/BatchCreateWalletsRequest' - $ref: '#/components/schemas/BatchActivateWalletsFromListRequest' - $ref: '#/components/schemas/BatchActivateWalletsFromVaultRequest' BatchActivateWalletsFromListRequest: description: Activate specific wallets for new target networks. Creates new wallets (one per source × target combination) that share keys with the source wallets. type: object properties: addressGenerationType: description: Address format type for the activated wallets. Only applicable to Bitcoin-like networks. Defaults to the target network's default address format if not specified. allOf: - $ref: '#/components/schemas/AddressGenerationType' idempotencyKey: description: Client-provided idempotency key to ensure request is processed only once type: string example: e763a50d-aa82-4ec7-b5a3-89ad0462d248 maxLength: 128 sourceWalletIds: description: Array of existing wallet IDs to activate for the target networks. Each wallet's source network is implied by the wallet itself. type: array items: type: string minItems: 1 targetNetworkIds: description: Array of target network IDs. For each source wallet, creates new wallets on all target networks sharing the source's keys. Total wallets created = number of sourceWalletIds × number of targetNetworkIds. type: array items: type: string minItems: 1 additionalProperties: false required: - sourceWalletIds - targetNetworkIds title: Batch Activate Wallets From List Request Amount: description: 'An amount of a crypto-asset represented by quantity, assetType, current unit price and current USD value. Fee amounts will be estimates if a transaction is not final. NOTE: price and USD value information is recent but does not reflect real-time data. ' type: object properties: assetType: description: 'A string representing a type of crypto-asset, which usually corresponds to the crypto asset''s ticker symbol. Use `/asset-types` to list all of the supported asset types for your organization. ' type: string example: BTC currentPrice: description: A recent assessment of the intra-day USD value of 1 unit of this asset type. This value is provided for convenience for such use cases as estimating point-in-time portfolio balances. This value does not represent authoritative pricing information used by Anchorage Digital for any purpose. The price is fetched as of the present, and may be omitted in certain contexts where more structured pricing information is provided (e.g. quotes and trades). type: string example: '9751.01' currentUSDValue: description: The result of `quantity * currentPrice`, rounded to the nearest cent. A unitless number implicitly denominated in dollars. See `currentPrice` for methodology and disclaimers. type: string example: '101920.94' quantity: description: The numeric value of this amount, excluding units type: string example: '10.45234733' example: quantity: '10.45234733' assetType: BTC currentPrice: '9751.01' currentUSDValue: '101920.94' required: - quantity - assetType title: Amount SignedAddressForWallet: description: The deposit address for crypto wallets. Fiat wallets use deposit instructions instead. type: object properties: address: description: A crypto address for the intended asset type: string example: 2N19AcihQ1a4MxQW658UFHTioUNnMkiHPkw addressId: description: An id uniquely identifying an Anchorage Digital address. type: string example: a33f83d96ca95cac000a344aa478a8b8 addressSignaturePayload: description: The hex-encoding of the bytes that were signed. type: string example: 7b225465787441646472657373223a22324e313941636968513161344d78515736353855464854696f554e6e4d6b6948506b77227d certChain: description: An x509 certificate chain in PEM format. When present, indicates that this address uses a V2 signature scheme where the signature is verified against the public key in the leaf certificate, and the certificate chain must verify up to a trusted Anchorage Digital Root CA. The Root CA is provided out-of-band. When absent, the signature is verified against the Organization Public Key (V1 signature scheme). type: string example: '-----BEGIN CERTIFICATE----- MIIBkTCCATigAwIBAgIQExample... -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIBkTCCATigAwIBAgIQExample... -----END CERTIFICATE----- ' signature: description: A hex-encoded signature of the addressSignaturePayload type: string example: 1642000aa9cca8e8610981aefbdb204b361c9dca3fa067b88fdacfba7a0f620d721378a33f4bbadad3923e633a4d712646d1e8e314e9fcb4aa4102c0581f6503 signatureVersion: description: The address signature scheme used for this address type: string example: V2 enum: - V1 - V2 required: - address - addressId - addressSignaturePayload - signature title: SignedAddressForWallet securitySchemes: Api-Access-Key: type: apiKey name: Api-Access-Key in: header description: An API key associated with a security role x-tagGroups: - name: Under Development tags: - Collateral Management - Holds - Deposit Attribution - Onboarding - Trusted Destinations - Atlas Settlement Network - Tax - name: API Endpoints tags: - Addresses - Asset Types - Transactions - Transfers - Wallets - Vaults - Vesting - Tagging - Subaccounts - Stablecoins - Webhook Notifications - API Key - Statements - Tax Reporting - Trading - name: Models tags: - Transfer Model - Transaction Model - Vault Model - Deposit Attribution Model