Creating a Deposit Token and Executing a Transfer

This guide explains how to create bank-issued tokenized deposits and execute instant 24/7 transfers between bank customers using blockchain rails.

Overview

Deposit tokens enable:

  • 24/7 instant transfers between bank customers
  • Programmable money for automated treasury management
  • Immediate settlement outside traditional banking hours
  • Blockchain transparency while maintaining bank backing
  • DeFi integration while preserving deposit insurance

The process involves:

  1. Creating a deposit token type (administrative)
  2. Minting tokens to represent bank account funds
  3. Transferring tokens between customers
  4. Redeeming tokens back to traditional deposits

Prerequisites

  • Administrative access to create deposit token types (bank-level operation)
  • Active blockchain account with sufficient bank account balance
  • Target recipient with blockchain account at the same bank
  • Valid api key

Part 1: Creating a Deposit Token Type (Administrative)

Step 1: Create the Deposit Token

This is typically done by bank administrators via the Omnia dashboard. However, if required, you are also able to create a new deposit token via the API:

POST /deposit-tokens
Authorization: Bearer {your-api-key}
Content-Type: application/json

{
  "symbol": "USD_BANK_2024",
  "network": "solana"
}

Request Parameters

ParameterTypeRequiredDescription
symbolstringYesToken symbol identifier (e.g., "USD_BANK_2024")
networkstringYesBlockchain network (currently "solana")

Example Response

{
  "id": "DPT_01BX5ZZKBKACTAV9WEVGEMMVS1",
  "network": "solana",
  "symbol": "USD_BANK_2024"
}

Save the deposit token ID for subsequent operations.

Part 2: Minting Deposit Tokens

Step 1: Mint Tokens to an Account

Convert a customer's DDA balance into transferable tokens:

POST /deposit-tokens/{deposit-token-id}/mints
Authorization: Bearer {your-api-key}
Content-Type: application/json

{
  "destination": {
    "type": "blockchain-account",
    "id": "BCA_01BX5ZZKBKACTAV9WEVGEMMVS1"
  },
  "amount": "1000.00"
}

Request Parameters

ParameterTypeRequiredDescription
destinationobjectYesTarget blockchain account for minted tokens
destination.typestringYesMust be "blockchain-account"
destination.idstringYesBlockchain account ID
amountstringYesAmount of deposit tokens to mint

Example Response

{
  "type": "deposit-token-mint-transaction",
  "id": "TXN_01BX5ZZKBKACTAV9WEVGEMMVS1",
  "created": "2024-03-15T14:30:00Z",
  "updated": "2024-03-15T14:30:00Z",
  "amount": "1000.00",
  "currency": {
    "type": "deposit-token-currency",
    "id": "DPT_01BX5ZZKBKACTAV9WEVGEMMVS1"
  },
  "status": "pending",
  "destination": {
    "type": "blockchain-account",
    "id": "BCA_01BX5ZZKBKACTAV9WEVGEMMVS1"
  }
}

Step 2: Verify Minting Completion

Monitor the transaction status:

GET /transactions/{transaction-id}
Authorization: Bearer {your-api-key}

When status is "completed", the tokens are available for transfer.

Part 3: Executing Instant Transfers

Step 1: Transfer Tokens to Another Customer

Send deposit tokens to another bank customer instantly:

POST /blockchain-accounts/{your-blockchain-account}/deposit-token-transfers
Authorization: Bearer {your-api-key}
Content-Type: application/json

{
  "amount": "250.00",
  "currency": {
    "type": "deposit-token-currency",
    "id": "DPT_01BX5ZZKBKACTAV9WEVGEMMVS1"
  },
  "destination": {
    "type": "blockchain-account",
    "id": "BCA_recipient_account_id"
  }
}

Request Parameters

ParameterTypeRequiredDescription
amountstringYesAmount of deposit tokens to transfer
currencyobjectYesDeposit token being transferred
destinationobjectYesRecipient's blockchain account

Example Response

{
  "type": "deposit-token-transfer-transaction",
  "id": "TXN_01BX5ZZKBKACTAV9WEVGEMMVS1",
  "created": "2024-03-15T14:31:00Z",
  "updated": "2024-03-15T14:31:00Z",
  "amount": "250.00",
  "currency": {
    "type": "deposit-token-currency",
    "id": "DT_01BX5ZZKBKACTAV9WEVGEMMVS1"
  },
  "status": "pending",
  "source": {
    "type": "blockchain-account",
    "id": "BCA_01BX5ZZKBKACTAV9WEVGEMMVS1"
  },
  "destination": {
    "type": "blockchain-account",
    "id": "BCA_recipient_account_id"
  }
}

Part 4: Redeeming Tokens Back to DDA

Step 1: Redeem Tokens for Traditional Deposits

Convert tokens back to regular DDA balance:

POST /deposit-tokens/{deposit-token-id}/redemptions
Authorization: Bearer {your-api-key}
Content-Type: application/json

{
  "source": {
    "type": "blockchain-account",
    "id": "BCA_01BX5ZZKBKACTAV9WEVGEMMVS1"
  },
  "amount": "500.00"
}

Request Parameters

ParameterTypeRequiredDescription
sourceobjectYesSource blockchain account holding tokens
source.typestringYesMust be "BlockchainAccount"
source.idstringYesBlockchain account ID
amountstringYesAmount of deposit tokens to redeem

Example Response

{
  "type": "deposit-token-redemption-transaction",
  "id": "TXN_01BX5ZZKBKACTAV9WEVGEMMVS1",
  "created": "2024-03-15T14:32:00Z",
  "updated": "2024-03-15T14:32:00Z",
  "amount": "500.00",
  "currency": {
    "type": "deposit-token-currency",
    "id": "DPT_01BX5ZZKBKACTAV9WEVGEMMVS1"
  },
  "status": "pending",
  "source": {
    "type": "blockchain-account",
    "id": "BCA_01BX5ZZKBKACTAV9WEVGEMMVS1"
  }
}

Error Handling

Insufficient Token Balance

{
  "error": "INSUFFICIENT_TOKEN_BALANCE",
  "message": "Insufficient deposit token balance for transfer",
  "details": {
    "available": "150.00",
    "requested": "250.00",
    "tokenId": "DT_01BX5ZZKBKACTAV9WEVGEMMVS1"
  }
}

Invalid Destination Account

{
  "error": "INVALID_DESTINATION",
  "message": "Destination account not found or not at same bank",
  "details": {
    "destinationId": "BCA_unknown_account",
    "requirement": "Destination must be valid blockchain account at same bank"
  }
}

Token Not Found

{
  "error": "DEPOSIT_TOKEN_NOT_FOUND",
  "message": "Specified deposit token does not exist",
  "details": {
    "tokenId": "DT_invalid_token",
    "suggestion": "Verify token ID or create new deposit token"
  }
}

API Reference

Deposit Token Management

  • Create Token Type: POST /deposit-tokens
  • Mint Tokens: POST /deposit-tokens/{id}/mints
  • Redeem Tokens: POST /deposit-tokens/{id}/redemptions

Transfer Operations

  • Transfer Tokens: POST /blockchain-accounts/{id}/deposit-token-transfers
  • Check Status: GET /transactions/{id}
  • List Transfers: GET /transactions?type=DepositTokenTransferTransaction

Did this page help you?