When presenting the address to your user for the transaction, it is best to use a QR Code to make the process simpler for them. You can generate QR code using various libraries, including this one for Javascript.

Processing a transaction on your website takes only a few steps:

Block.io does not control your addresses, you do. You use the Blockchain to process your own assets.

Once you have addresses for User A, you can perform relevant actions for their addresses.

To create a user's wallet on your account, create addresses for them using get_new_address. You should specify a sequence of labels for that user. For instance, if you wish to create a number of addresses for User A, you would want to call get_new_address with label=userAx{address_number} as many times as you wish to create a new address for User A.

With Block.io, you can create wallet addresses for users inside your games, auction sites, stores, etc.

Basic MultiSig Wallet API Our Basic Multi-Signature addresses by default require two signatures for all withdrawals: yours, and Block.io's. This method provides exponentially higher security for your Wallets and applications than single-signature addresses. This way, you spend coins yourself, without trusting Block.io with your credentials. For private keys for your wallets, visit the Settings page on your dashboard. If you require a more elaborate configuration to customize your applications' security, inquire about our Distributed Trust framework by going here. This framework allows up to 5 signatures per address. The use cases are endless! Getting Started First, you will need your API Keys, which we provide for Bitcoin, Dogecoin, Litecoin, and their Testnets. These API Keys are located in your Wallet. You are required to use an API Key when you interact with Block.io. It tells Block.io which network (e.g., Bitcoin) you wish to perform actions on. You can access the API by making calls to links of this format: https://block.io/api/v2/get_balance/?api_key=BITCOIN, DOGECOIN or LITECOIN API KEY Example: Processing Transactions Example: Creating Wallets for Users

Actions for Handling Addresses Get New Address Returns a newly generated address, and its unique(!) label generated by Block.io. You can optionally specify a custom label.

You can also optionally specify the type of address you wish to generate. Available address types for Bitcoin, and Litecoin are P2SH (default), and WITNESS_V0. Dogecoin is limited to P2SH addresses at this time. Note that use of Witness v0 addresses will save you significant amounts of network fees, but these addresses are very new, and users' wallets may not recognize them at this time. /api/v2/get_new_address/?api_key=API KEY /api/v2/get_new_address/?api_key=API KEY&label=LABEL /api/v2/get_new_address/?api_key=API KEY&address_type=ADDRESS TYPE 983bea71fd96f959 Try now Hide Get a new address with a random label API KEY: (Your API Keys are in your Wallet) Go! 59e191b86c5802bf Try now Hide Get a new address with a given label API KEY: (Your API Keys are in your Wallet) LABEL: Go! 8078be16c28080bf Try now Hide Get a low network fee address (type=witness_v0) API KEY: (Your API Keys are in your Wallet) ADDRESS TYPE: Go! Get Balance Returns the balance of your entire Bitcoin, Litecoin, or Dogecoin account (i.e., the sum of balances of all addresses/users within it) as numbers to 8 decimal points, as strings. /api/v2/get_balance/?api_key=API KEY 27934317c014f1b6 Try now Hide Get account balance API KEY: (Your API Keys are in your Wallet) Go! Get My Addresses Returns the (unarchived) addresses, their labels, user ids, and balances on your account. Upto 2500 addresses per page. Page parameter is optional. /api/v2/get_my_addresses/?api_key=API KEY&page=PAGE NUMBER 6e6df9b4dded91b4 Try now Hide Get my addresses API KEY: (Your API Keys are in your Wallet) PAGE: Go! Get Address Balance Returns the balance of the specified addresses, or labels. Upto 2500 addresses/labels can be specified per request. Can be used to query balances for external (non-account) addresses. If an external address' balance is returned, its user_id and label fields will be null. /api/v2/get_address_balance/?api_key=API KEY&addresses=ADDRESS1,ADDRESS2,... /api/v2/get_address_balance/?api_key=API KEY&labels=LABEL1,LABEl2,... bbdad7481684d5ce Try now Hide Get the balance of a given address API KEY: (Your API Keys are in your Wallet) ADDRESSES: Go! 5110e7c935e5e165 Try now Hide Get the balance of an address with a given label API KEY: (Your API Keys are in your Wallet) LABELS: Go! Get Address By Label Returns the address specified by a label. /api/v2/get_address_by_label/?api_key=API KEY&label=LABEL 67661b06b87e9b01 Try now Hide Get the address for a given label API KEY: (Your API Keys are in your Wallet) LABEL: Go!

Withdrawal Actions Overview Block.io eases your burden of storing information regarding users' addresses, labels, and user IDs. Below, we provide various methods that allow you to make fine-grained withdrawals from your account(s). You can withdraw from any addresses, from specific addresses, from specific user ids, and from specific labels, and you can send the specified amounts to up to 2500 destination addresses, users, or labels in a single API call. Minimum Amounts You can withdraw at least 2 DOGE, 0.00002 BTC, or 0.0002 LTC. Block.io Fees Block.io does not charge fees (except on the Viking Plan). You always pay your own network fees, however, which are in addition to the withdrawal amounts specified. Network Fees The speed with which miners confirm your transaction depends on the network fees you pay, and the network fees you pay depend on the size of your transaction (in bytes). Larger transactions incur higher network fees. You can specify the priority for your transactions using an additional parameter priority={low,medium,high,custom} to adjust the network fee you wish to pay. Block.io will adjust appropriate network fees for priority={low,medium,high} automatically by monitoring the state of the relevant network. You can specify custom network fees using the parameters priority=custom and custom_network_fee=CUSTOM_NETWORK_FEE. Transaction Batching You can send coins to upto 2500 destination addresses in a single transaction. We recommend using a single transaction to send coins to multiple recipients, wherever possible. This allows you to incur lower network fees overall, improves confirmation times for your transactions, as well as the health of the relevant network and its blockchain. Ensuring Uniqueness of Withdrawals Client-side human or machine error can lead to multiple executions of the same withdrawal request. If such an error occurs, you will lose money. To ensure the uniqueness of withdrawal requests, you can specify a nonce=value parameter with your withdrawal requests, where value is an alpha-numeric string between 1 and 64 characters long. Withdrawal requests that provide duplicate nonces less than 1 hour apart will be rejected. This is an optional but recommended security measure. Missing "reference_id" Errors Executing transactions simultaneously may result in two or more transactions that attempt to spend the same coins (inputs). Since an input can only be spent once, you will see a "missing reference_id" error. To avoid this pitfall, your code must make sure all withdrawal requests are performed in a mutually exclusive manner, meaning a transaction must be created and signed before another transaction is attempted. These methods support POST and GET, but only GET examples are shown below. We recommend using POST methods in your applications. Please use one of our official libraries for Ruby, PHP, NodeJS, Python, or C# to perform client-side signatures. You can always make your own client-side signature libraries using these instructions: Client-Side Signing for Withdrawals. Withdraw Withdraws amount of coins from any addresses in your account to up to 2500 destination addresses. /api/v2/withdraw/?api_key=API KEY&amounts=AMOUNT1,AMOUNT2,...&to_addresses=ADDRESS1,ADDRESS2,... Withdraw using Custom Network Fee Withdraws amount of coins from any addresses in your account to up to 2500 destination addresses. Use custom network fee. /api/v2/withdraw/?api_key=API KEY&priority=custom&custom_network_fee=CUSTOM_NETWORK_FEE&amounts=AMOUNT1,AMOUNT2,...&to_addresses=ADDRESS1,ADDRESS2,... Withdraw From Addresses Withdraws AMOUNT coins from upto 2500 addresses at a time, and deposits it to up to 2500 destination addresses. /api/v2/withdraw_from_addresses/?api_key=API KEY&from_addresses=ADDRESS1,ADDRESS2,...&to_addresses=ADDRESS1,ADDRESS2,...&amounts=AMOUNT1,AMOUNT2,... Withdraw From Labels Withdraws AMOUNT coins from upto 2500 labels at a time, and deposits it to upto 2500 destination addresses, or labels. /api/v2/withdraw_from_labels/?api_key=API KEY&from_labels=LABEL1,LABEL2,...&to_addresses=ADDRESS1,ADDRESS2,...&amounts=AMOUNT1,AMOUNT2,... /api/v2/withdraw_from_labels/?api_key=API KEY&from_labels=LABEL1,LABEL2,...&to_labels=LABEL1,LABEL2,...&amounts=AMOUNT1,AMOUNT2,... The amounts=AMOUNT1,AMOUNT2,... and to_addresses=ADDRESS1,ADDRESS2,... parameters specify that destination ADDRESS1 will receive AMOUNT1, ADDRESS2 will receive AMOUNT2, etc. The source addresses (from_addresses=...) will need at least SUM(AMOUNT1,AMOUNT2...)+Network Fees in balances for this withdrawal to succeed. Estimate Network Fee Estimates the Network Fee you will need to pay when you make a withdrawal request. The Network Fee is required by the Bitcoin/Dogecoin/etc. networks, not Block.io. When you change withdrawal parameters, the estimated network fees or lower/upper bounds for custom network fee may change as well. Please use the same parameters as you would with any withdrawal API call; only one example is given below. /api/v2/get_network_fee_estimate/?api_key=API KEY&amounts=AMOUNT1,AMOUNT2,...&to_addresses=ADDRESS1,ADDRESS2,... c9a009ffe073df11 Try now Hide Estimate network fee for given withdrawal parameters API KEY: (Your API Keys are in your Wallet) AMOUNTS: TO ADDRESSES: Go! bf83bb61c6ee12d7 Try now Hide Validate custom network fee for given withdrawal parameters API KEY: (Your API Keys are in your Wallet) AMOUNTS: TO ADDRESSES: PRIORITY: CUSTOM NETWORK FEE: Go!

Address Archival Actions Archiving of addresses help you control account bloat due to a large number of addresses. When an address is archived, it is: Not displayed in your wallet dashboard.

Not included in the get_my_addresses API call.

Not used to get available account balance.

Not used as a withdrawal address, unless specified. Address archival can greatly enhance the operational security of your applications by allowing you to move coins to new addresses without clogging your API call responses. As of 07/04/2020, addresses that receive coins (other than from your own account's addresses) will be unarchived automatically. Archive Addresses Archives upto 100 addresses in a single API call. Addresses can be specified by their labels. /api/v2/archive_addresses/?api_key=API KEY&addresses=ADDRESS1,ADDRESS2,... /api/v2/archive_addresses/?api_key=API KEY&labels=LABEL1,LABEl2,... d36e133f1c8b3a0b Try now Hide Archive an address on your account API KEY: (Your API Keys are in your Wallet) ADDRESSES: Go! Unarchive Addresses Unarchives upto 100 addresses in a single API call. Addresses can be specified by their labels. /api/v2/unarchive_addresses/?api_key=API KEY&addresses=ADDRESS1,ADDRESS2,... /api/v2/unarchive_addresses/?api_key=API KEY&labels=LABEL1,LABEl2,... a834f5b089b1b043 Try now Hide Unarchive an address on your account API KEY: (Your API Keys are in your Wallet) ADDRESSES: Go! Get My Archived Addresses Returns your archived addresses, their labels, and user ids on your account. Upto 2500 addresses per page. Page parameter is optional. /api/v2/get_my_archived_addresses/?api_key=API KEY&page=PAGE NUMBER ddc756a38716a0da Try now Hide Get my archived addresses API KEY: (Your API Keys are in your Wallet) PAGE: Go!