Accounts represent entities in the ledger. Each account can hold many different types of assets. Amounts of an asset can be issued into an account, transferred from one account to another, or retired from an account using a transaction.


An account alias is a user-defined, unique identifier. It can be used interchangeably with the system-assigned account_id when building transactions and performing queries.

Keys & Quorum

When creating an account, you provide one or more keys and a quorum. The quorum is the number of keys that must sign a transaction in order to transfer or retire amounts of assets from the account. By default, the quorum is equal to the number of keys provided, but you can choose to require only a subset of keys – for example, 2-of-3.


Account tags are a set of user-defined key-value pairs associated with an account. Account tags are useful for grouping different accounts together for the purpose of querying balances. For example, if one user has three different types of accounts, they could all have the tag "user_id": "x". Then, when you want to query the balance of each asset across all of the user's accounts, you would provide the following filter to the balance query:


and set the sum_by parameter as:

account_tags.user_id, account_alias

This would return a list of asset balances across all the accounts with tag "user_id": "x".

Updating tags

You can update account tags at any time. Account queries can then be performed on the updated tags.

For transaction, contract, and balance queries, however, updated tags are not applied retroactively. The transaction object (and resulting contract objects) will always reflect the tags that were present when the transaction was added to the ledger.

Data Structure

JSON response from the API:

  "id": "...",
  "alias": "...",
  "tags": {},
  "keys": [
      "id": "...",
      "alias": "..."
  "quorum": 1

Descriptions of each field:

Field Type Description
id string System-assigned unique identifier of the account.
alias string User-supplied unique identifier of the account.
tags JSON object Arbitrary, user-supplied, key-value data about the account.
keys array A list of key objects that control assets in the account.
quorum integer The number of keys from which signatures are required to transfer or retire from the account.


Create an account

Create a checking account for Alice.

Account alice = new Account.Builder()
  .addTag("type", "checking")
  alias: 'alice',
  keys: [key],
  tags: {type: 'checking'}
}).then(alice => ...)
alice = ledger.accounts.create(
  alias: 'alice',
  keys: [key],
  tags: {type: 'checking'}

Query accounts

Query all checking accounts.

Account.ItemIterable accounts = new Account.QueryBuilder()
for (Account account : accounts) {
  filter: 'tags.type=$1',
  filterParams: ['checking']
}).then(accounts => {
  for (let i in accounts) {
    const account = accounts[i];
  filter: 'tags.type=$1',
  filter_params: ['checking']
).each do |account|