General Information

Blockmove.io API is a simple, mostly RESTful API for interacting with Blockmove wallets, accessed over HTTPS from the api.blockmove.io domain.


API Versions

All API calls are versioned, and the current Blockmove API is V1. We will never introduce any breaking changes within V1, but we may add new, non-breaking features from time to time.


Endpoints

  • All endpoints accept only POST requests.
  • The parameters must be sent as a JSON string in the request body with content type application/json.
  • Parameters may be set in any order.


Supported Language SDKs

Blockmove has client SDKs for the following languages:

If you’re using these languages, we strongly encourage you to use an official SDK. Of course, all our API calls are standard HTTP endpoints using JSON formatted responses, so any language (or cURL from the command-line) will work just fine.



API Endpoint
https://api.blockmove.io/v1

SDK Installation


PHP

The minimum required PHP version for SDK is PHP 5.4.

You can install SDK in two ways, using the Composer package manager or by downloading an archive file from Github repository.

The Composer is the preferred way, as it allows you to install new extensions or update SDK by simply running a single command.

> composer require blockmove.io/blockmove-api-php

Node.js

You can install Node.js SDK in two ways, using the npm package manager or by downloading an archive file from Github repository.

Npm installation:

> npm install blockmove-api-node

PHP SDK Composer Installation
> composer require blockmove.io/blockmove-api-php

Node.js SDK Npm Installation
> npm install blockmove-api-node

Supported Coins

Coin Currency Code
Bitcoin BTC
Bitcoin Cash BCH
Litecoin LTC
Dash DASH
Dogecoin DOGE
Zcash ZEC
Etherem ETH
Ripple XRP
Litecoin [Testnet] tLTC
Ethereum [Testnet] tETH
Ripple [Testnet] tXRP
ERC20 Tokens
USD Coin USDC
Tether USD USDT
TrueUSD TUSD
Paxos Standard PAX
Basic Attention Token BAT
Augur REP
Maker MKR
Nexo NEXO
0x ZRX
HuobiToken HT
OmiseGO OMG
Test Standard Token [Testnet] TST

For testing purposes we recommend to use coins marked as [Testnet].

You can request test coins for Litecoin [Testnet] network from any litecoin testnet faucet. For example https://tltc.bitaps.com.

Test coins for Ethereum [Testnet] you can request from any public testnet faucet. For example https://teth.bitaps.com.

Test coins for Ripple [Testnet] you can get here https://xrpl.org/xrp-testnet-faucet.html.
Then send test coins to test address in Blockmove Wallet through Ripple Wallet service https://ripplerm.github.io/ripple-wallet/

Also you can find test ERC20 token for Ethereum [Testnet] network. The test token is Test Standard Token [Testnet].
To get test tokens you want to go to Etherscan.io TST Page to Write Contract section, then find showMeTheMoney function. Place wallet address to _to field and amount you want to request to _value field.


Custom tokens
Note that you can add any custom ERC20 token to your Ethereum wallet and use it in API.

Authentication


API Keys

To get API Keys you must register an account in our wallet service.

After registration and email confirmation go to API section in main menu. Then click Create new API Keys button and follow instructions.

You will get two keys. The first one is public the second is secret.

Public key is used to identify your account and by secret key you must sign every request you make.

API Key has GET request parameter named as _api_key.


Requiest Signing

Every request body must be signed by secret key via HMAC-SHA265 algorithm even if the request body is empty.

After signing, result signature must be included in request JSON string.


Signature has request parameter named as _api_sign.


Wallet Password Encryption

In request body password string must be ONLY in encrypted format. Password encrypted by SHA-512 algorithm.


Important

Wallet password always encrypted on client side, even in browser. We do not ever receive and do not ever require plain unencrypted password from you!

API Keys Example
Public:
DGd8dAjlsfGXag_KWdjMormuNldnYOi1

Secret:
ndnmqNbzo6fSs1JaLwMkRv2OhvM3GlKuljHedm0P_U76jdTkcL

Request Body Example
{"wallet_id":"GmZ0zppklWH8gq6M35VOkJGYcxRY32h","address":"mukemt2vcPv79dPT8L4XC5J1H53fMFiCJs","amount":0.01}

Request HMAC SHA256 signature
[linux]$ echo -n '{"wallet_id":"GmZ0zppklWH8gq6M35VOkJGYcxRY32h","address":"mukemt2vcPv79dPT8L4XC5J1H53fMFiCJs","amount":0.01}' \
			| openssl dgst -sha256 -hmac "ndnmqNbzo6fSs1JaLwMkRv2OhvM3GlKuljHedm0P_U76jdTkcL"

(stdin)= 5b4586e74bed76b563f66b2e62540d67778a190dcd3ff3b32b1c8d8deedd58ec

				echo hash_hmac('sha256', '{"wallet_id":"GmZ0zppklWH8gq6M35VOkJGYcxRY32h","address":"mukemt2vcPv79dPT8L4XC5J1H53fMFiCJs","amount":0.01}', 'ndnmqNbzo6fSs1JaLwMkRv2OhvM3GlKuljHedm0P_U76jdTkcL');
			

php://stdin = '5b4586e74bed76b563f66b2e62540d67778a190dcd3ff3b32b1c8d8deedd58ec'
let crypto = require('crypto');
				
let hmac = crypto.createHmac('sha256', 'ndnmqNbzo6fSs1JaLwMkRv2OhvM3GlKuljHedm0P_U76jdTkcL');

let result = hmac.update(queryString).digest('hex');
				
console.log(result);

node://stdin = '5b4586e74bed76b563f66b2e62540d67778a190dcd3ff3b32b1c8d8deedd58ec'

Return Codes


Code Description
200 Request is successfull.
400 Some unexpecred error occured.
401 Unauthorized request. Check your API Key.
404 Endpoint or requested record not found.
406 Incorrect signature. Check if request data is signed correctly.

Requests

All requests must satisfy these rules:

1. Requests must be executed as POST requests.

2. Each request must contain two required parameters:

  • _api_key - parameter necessary to identify your account. Can be placed as GET parameter or in JSON body either.
  • _api_sign - signature which computes by signing request body by Secret Key via HMAC SHA256 algorithm

3. Wallet password must be encrypted via SHA-512 algorithm before making request.

If you use SDKs povided by Blockmove, all encrypting processes are done by SDK itself.


Response Structure
Attribute Type Description
code integer Return code. You can see return codes description here.
v integer Shows which version of API is used.
message string Breif description of return code or description of error.
data array|object Response data value. Can be returned as array or object.
Requests

Response Structure
{
	"code": 404,
	"v": 1,
	"message": "Not found",
	"data": []
}

Wallet Balance

The Wallet Balance Endpoint returns an information about balance of whole wallet.


Endpoint Method
/walletbalance POST
Request
Attribute Type Description
wallet_id string ID of wallet which you can achieve by opening created wallet page.
Response
Attribute Type Description
coin string Coin code.
amount float Total wallet balance.
amountCoins string Total wallet balance in satoshis.
unconfirmed float Unconfirmed wallet balance.
unconfirmedCoins string Unconfirmed wallet balance in satoshis.
tokens array List for available tokens for Ethereum currency.
Wallet Balance


				curl -d '{"wallet_id":"GmZ0zppklWH8gq6M35VOkJGYcxRY32h","_api_sign":"214ba2053e5a860b74b97d6afa8b42f509ac4e78d82fc0dbcd43f1b9d3823a70"}' https://api.blockmove.io/v1/walletbalance?_api_key=DGd8dAjlsfGXag_KWdjMormuNldnYOi1
			
{
	"coin": "tETH",
	"amount": 0.1,
	"amountCoins": "10000000",
	"unconfirmed": 0.05,
	"unconfirmedCoins": "5000000",
	"tokens": [
		{
			"coin": "TST",
			"amount": 0.1,
			"amountCoins": "10000000",
			"unconfirmed": 0.05,
			"unconfirmedCoins": "5000000"
		}
	]
}
$result = APIClient::init($apiKey, $apiSecret)
					->getWalletBalance($walletId);
	
{
	"coin": "tETH",
	"amount": 0.1,
	"amountCoins": "10000000",
	"unconfirmed": 0.05,
	"unconfirmedCoins": "5000000",
	"tokens": [
		{
			"coin": "TST",
			"amount": 0.1,
			"amountCoins": "10000000",
			"unconfirmed": 0.05,
			"unconfirmedCoins": "5000000"
		}
	]
}
let Api = new BlockmoveApi(API_KEY, API_SECRET);
			
Api.getWalletBalance(WALLET_ID, function(error, data) {
	console.log(data);
});
	
{
	"coin": "tETH",
	"amount": 0.1,
	"amountCoins": "10000000",
	"unconfirmed": 0.05,
	"unconfirmedCoins": "5000000",
	"tokens": [
		{
			"coin": "TST",
			"amount": 0.1,
			"amountCoins": "10000000",
			"unconfirmed": 0.05,
			"unconfirmedCoins": "5000000"
		}
	]
}

Generate Address

The Generate Address Endpoint allows you to get new address for payment process. Also, this method allows to pass Webhook endpoint for notifications in address balance change.


Endpoint Method
/generateaddress POST
Request
Attribute Type Description
wallet_id string ID of wallet which you can achieve by opening created wallet page.
webhook
optional
string Absolute callback url.
Example: https://example.com/status.php?payment=ok

More about Webhooks you can read here.
Response
Attribute Type Description
address string Address string of corresponding currency.
params object Additional params like destination tag which uses in Ripple (XRP) currency.

Has attributes:
message string - message value
message_param string - parameter depending on currency. dt for Ripple(XRP).
Generate Address


				curl -d '{"wallet_id":"GmZ0zppklWH8gq6M35VOkJGYcxRY32h","webhook":"https://example.com/status.php?payment=ok","_api_sign":"f07cc8509527bd51270d136576e3b2e9857b631660b54d6df8cf3d31ff40e5ca"}' https://api.blockmove.io/v1/generateaddress?_api_key=DGd8dAjlsfGXag_KWdjMormuNldnYOi1
			
{
	"address": "mukemt2vcPv79dPT8L4XC5J1H53fMFiCJs",
	"params": {
		"message": "3857367",
		"message_param": "dt"
	}
}
$result = APIClient::init($apiKey, $apiSecret)
			->generateAddress($walletId, $webhook);
	
{
	"address": "mukemt2vcPv79dPT8L4XC5J1H53fMFiCJs",
	"params": {
		"message": "3857367",
		"message_param": "dt"
	}
}
let Api = new BlockmoveApi(API_KEY, API_SECRET);
			
Api.generateAddress({
	wallet_id: "WALLET_ID",
	webhook: "WEBHOOK_URL"
}, function(error, data) {
	console.log(data);
});
	
{
	"address": "mukemt2vcPv79dPT8L4XC5J1H53fMFiCJs",
	"params": {
		"message": "3857367",
		"message_param": "dt"
	}
}

Address Information

The Address Information Endpoint returns balance information of address generated by API.


Endpoint Method
/addressinfo POST
Request
Attribute Type Description
address string Address string of corresponding currency.
message
optional
string Additional param like destination tag which uses in Ripple (XRP) currency.
token
optional
string Token symbol. Can be used for Ethereum currency. Example: USDT, TST, etc.
Response
Attribute Type Description
coin string Coin code.
amount float Total address balance.
amountCoins string Total address balance in satoshis.
unconfirmed float Unconfirmed wallet balance.
unconfirmedCoins string Unconfirmed wallet balance in satoshis.
created string Created date in datetime format.
message object Additional information for message like destination tag for Ripple(XRP).

Has attributes:
value string - message value
amount float - amount in float
amountCoins string - amount in coins
created string - created datetime
Address Information


				curl -d '{"address":"mukemt2vcPv79dPT8L4XC5J1H53fMFiCJs","message":"9999999","token":"TST","_api_sign":"48262f5ac889fd5b66be158ef1ad8ca73d98b91e8cd6a6c052c83e278ceddcd7"}' https://api.blockmove.io/v1/addressinfo?_api_key=DGd8dAjlsfGXag_KWdjMormuNldnYOi1
			
{
	"coin": "tLTC",
	"amount": 0.1,
	"amountCoins": "10000000",
	"unconfirmed": 0.05,
	"unconfirmedCoins": "5000000",
	"created": "2025-01-01 12:05:00",
	"message": {
		"value": "9999999",
		"amount": 0.03,
		"amountCoins": "3000000",
		"created": "2025-01-01 11:05:00"
	}
}
$result = APIClient::init($apiKey, $apiSecret)
					->getAddressInfo($address, $message, $token);
	
{
	"coin": "tLTC",
	"amount": 0.1,
	"amountCoins": "10000000",
	"unconfirmed": 0.05,
	"unconfirmedCoins": "5000000",
	"created": "2025-01-01 12:05:00",
	"message": {
		"value": "9999999",
		"amount": 0.03,
		"amountCoins": "3000000",
		"created": "2025-01-01 11:05:00"
	}
}
let Api = new BlockmoveApi(API_KEY, API_SECRET);
			
Api.getAddressInfo({
	address: "ADDRESS",
	message: "MESSAGE",
	token: "TOKEN"
}, function(error, data) {
	console.log(data);
});
	
{
	"coin": "tLTC",
	"amount": 0.1,
	"amountCoins": "10000000",
	"unconfirmed": 0.05,
	"unconfirmedCoins": "5000000",
	"created": "2025-01-01 12:05:00",
	"message": {
		"value": "9999999",
		"amount": 0.03,
		"amountCoins": "3000000",
		"created": "2025-01-01 11:05:00"
	}
}

Transaction Information

The Transaction Information Endpoint returns status of transaction sent by Send Payment Method.


Endpoint Method
/tx POST
Request
Attribute Type Description
wallet_id string ID of wallet which you can achieve by opening created wallet page.
tx_id string Cryptocurrency Transaction ID Hash.
Response
Attribute Type Description
type string Type of transaction, sent or received
amount float Transaction amount for wallet address.
amountCoins string Transaction amount for wallet address in satoshis.
message string Additional message information like destination tag for Ripple(XRP).
fees array|objest Transaction fees.
See annotation.
feesCoins string Transaction fees in satoshis.
confirmations int Total confirmations of transaction.
isConfirmed int Returns if transaction is confirmed. 1 for confirmed, 0 for unconfirmed.
Each coin has its own confirmations. For example, for Bitcoin it is 2 confirmations, for Litecoin 6 confirmations, etc.
time int Time of transaction in timestamp format.
Transaction Information


				curl -d '{"wallet_id":"GmZ0zppklWH8gq6M35VOkJGYcxRY32h","tx_id":"e6751090e0b46c1dbbc6ad8dc87fcc28eb37eca47b449d6bde30a9aab1b4f32c","_api_sign":"34d01473eac7ca6d1081f783e10d3d5a9717da59874142b8a34868b26ca41554"}' https://api.blockmove.io/v1/tx?_api_key=DGd8dAjlsfGXag_KWdjMormuNldnYOi1
			
{
	"tx_id": "e6751090e0b46c1dbbc6ad8dc87fcc28eb37eca47b449d6bde30a9aab1b4f32c",
	"coin": "tLTC",
	"type": "sent",
	"amount": 0.1,
	"amountCoins": "10000000",
	"message": "12345",
	"fees": {
		"coin": "tLTC",
		"amount": 0.05,
		"amountCoins": 5000000
	},
	"confirmations": 10,
	"isConfirmed": 1,
	"time": 1735733100
}
$result = APIClient::init($apiKey, $apiSecret)
					->getTx($wallet_id, $tx_id);
	
{
	"tx_id": "e6751090e0b46c1dbbc6ad8dc87fcc28eb37eca47b449d6bde30a9aab1b4f32c",
	"coin": "tLTC",
	"type": "sent",
	"amount": 0.1,
	"amountCoins": "10000000",
	"message": "12345",
	"fees": {
		"coin": "tLTC",
		"amount": 0.05,
		"amountCoins": 5000000
	},
	"confirmations": 10,
	"isConfirmed": 1,
	"time": 1735733100
}
let Api = new BlockmoveApi(API_KEY, API_SECRET);
			
Api.getTx({
	wallet_id: "WALLET_ID",
	tx_id: "TX_ID"
}, function(error, data) {
	console.log(data);
});
	
{
	"tx_id": "e6751090e0b46c1dbbc6ad8dc87fcc28eb37eca47b449d6bde30a9aab1b4f32c",
	"coin": "tLTC",
	"type": "sent",
	"amount": 0.1,
	"amountCoins": "10000000",
	"message": "12345",
	"fees": {
		"coin": "tLTC",
		"amount": 0.05,
		"amountCoins": 5000000
	},
	"confirmations": 10,
	"isConfirmed": 1,
	"time": 1735733100
}

Send Payment

The Send Payment Endpoint allows to make payments to specified address. API spend permission must be activated.


Endpoint Method
/send POST
Request
Attribute Type Description
wallet_id string ID of wallet which you can achieve by opening created wallet page.
password string Wallet password encrypted by SHA-512 algorithm.

Note: If you are using SDK no need to encrypt password.
SDK will do it automatically.
destination string|array Address where you want to send payment. When it is nesessary to provide additional information like destination tag this attribute is used as array [address, message].
amount float Amount to send in float format.
priority
optional
string Priority attribute affects on transaction time confirmation. Low priority for low time confirmation and less fees, high priority for faster confirmation and larger fees respectively.

There are three types of priority high, medium and low.
By default medium priority is used.
token
optional
string Token symbol. Can be used for Ethereum currency. Example: USDT, TST, etc.
Response
Attribute Type Description
txid array Array of Transaction ID hashes.
Send Payment


				curl -d '{"wallet_id":"GmZ0zppklWH8gq6M35VOkJGYcxRY32h","password":"SHA512_encoded_string","destination":{"address":"mukemt2vcPv79dPT8L4XC5J1H53fMFiCJs","message":"12345"},"amount":0.01,"priority":"high","token":"TST","_api_sign":"5a45d26fd9a63cb32511b21a3c36ab16bf8c55a5e8b5e1034f788cd73923d7d0"}' https://api.blockmove.io/v1/send?_api_key=DGd8dAjlsfGXag_KWdjMormuNldnYOi1
			
[
	"e6751090e0b46c1dbbc6ad8dc87fcc28eb37eca47b449d6bde30a9aab1b4f32c"
]
$destination = [
	"address" => "mukemt2vcPv79dPT8L4XC5J1H53fMFiCJs",
	"message" => 12345
];

$result = APIClient::init($apiKey, $apiSecret)
					->send(
						$wallet_id,
						$password,
						$destination,
						$amount,
						APIClient::HIGH,
						$token
					);
	
[
	"e6751090e0b46c1dbbc6ad8dc87fcc28eb37eca47b449d6bde30a9aab1b4f32c"
]
let Api = new BlockmoveApi(API_KEY, API_SECRET);
			
let destination = {
	address: "DESTINATION_ADDRESS",
	message: "DESTINATION_TAG"
};

Api.send({
	wallet_id: "WALLET_ID",
	password: "WALLET_PASSWORD",
	destination: destination,
	amount: 0.01,
	priority: Api.PRIORITY_MEDIUM,
	token: "TST"
}, function(error, data) {
	console.log(data);
});
	
[
	"e6751090e0b46c1dbbc6ad8dc87fcc28eb37eca47b449d6bde30a9aab1b4f32c"
]

Wallet History

The Wallet History Endpoint allows to get whole transaction history of wallet addresses generated by API.


Endpoint Method
/wallethistory POST
Request
Attribute Type Description
wallet_id string ID of wallet which you can achieve by opening created wallet page.
params
optional
array [limit, offset] parameters to display records.
limit - how many records to display (maximum is 100);
offset - from which record.
token
optional
string Token symbol. Can be used for Ethereum currency. Example: USDT, TST, etc.
Response
Attribute Type Description
tx_id string Transaction hash.
coin string Currency symbol.
type string Type of transaction, sent or received
from array List of addresses from where funds have been sent.
See annotation.
to array List of addresses funds where received to.
amount float Total transaction amount.
amountCoins string Total transaction amount in satoshis.
message string Additional message information like destination tag for Ripple(XRP).
fees array|object Transaction fees.
See annotation.
confirmations int Total confirmations of transaction.
isConfirmed int Returns if transaction is confirmed. 1 for confirmed, 0 for unconfirmed.
Each coin has its own confirmations. For example, for Bitcoin it is 2 confirmations, for Litecoin 6 confirmations, etc.
time int Time of transaction in timestamp format.
Wallet History


				curl -d '{"wallet_id":"GmZ0zppklWH8gq6M35VOkJGYcxRY32h","params":{"limit":10,"offset":5},"token":"TST","_api_sign":"5a45d26fd9a63cb32511b21a3c36ab16bf8c55a5e8b5e1034f788cd73923d7d0"}' https://api.blockmove.io/v1/send?_api_key=DGd8dAjlsfGXag_KWdjMormuNldnYOi1
			
			
[
	{
		"tx_id": "e6751090e0b46c1dbbc6ad8dc87fcc28eb37eca47b449d6bde30a9aab1b4f32c",
		"coin": "tLTC",
		"type": "sent",
		"from": [{
			"address": "mukemt2vcPv79dPT8L4XC5J1H53fMFiCJs",
			"amount": 0.15,
			"amountCoins": "15000000",
			"type": "address",
			"isWallet": 1
		}],
		"to": [{
			"address": "mtkemt2vcPv79dPT8L4XC5J1H53fMFiCJk",
			"amount": 0.1,
			"amountCoins": "10000000",
			"type": "address",
			"isWallet": 0
		}, {
			"address": "ms4u4DsgfqdP85ceodZkHm1TFn43tEHaiX",
			"amount": 0.05,
			"amountCoins": "5000000",
			"type": "fee",
			"isWallet": 0
		}],
		"amount": 0.15,
		"amountCoins": "15000000",
		"message": "12345",
		"fees": {
			"coin": "tLTC",
			"amount": 0.05,
			"amountCoins": 5000000
		},
		"confirmations": 10,
		"isConfirmed": 1,
		"time": 1735733100
	}
]
$params = [
	"limit" => 10,
	"offset" => 5
];
			
$result = APIClient::init($apiKey, $apiSecret)
		->getWalletHistory(
			$wallet_id,
			$params,
			$token
		);
				
[
	{
		"tx_id": "e6751090e0b46c1dbbc6ad8dc87fcc28eb37eca47b449d6bde30a9aab1b4f32c",
		"coin": "tLTC",
		"type": "sent",
		"from": [{
			"address": "mukemt2vcPv79dPT8L4XC5J1H53fMFiCJs",
			"amount": 0.15,
			"amountCoins": "15000000",
			"type": "address",
			"isWallet": 1
		}],
		"to": [{
			"address": "mtkemt2vcPv79dPT8L4XC5J1H53fMFiCJk",
			"amount": 0.1,
			"amountCoins": "10000000",
			"type": "address",
			"isWallet": 0
		}, {
			"address": "ms4u4DsgfqdP85ceodZkHm1TFn43tEHaiX",
			"amount": 0.05,
			"amountCoins": "5000000",
			"type": "fee",
			"isWallet": 0
		}],
		"amount": 0.15,
		"amountCoins": "15000000",
		"message": "12345",
		"fees": {
			"coin": "tLTC",
			"amount": 0.05,
			"amountCoins": 5000000
		},
		"confirmations": 10,
		"isConfirmed": 1,
		"time": 1735733100
	}
]
Api.getWalletHistory({
	wallet_id: "WALLET_ID",
	params: {
		limit: 10,
		offet: 5
	},
	token: "TST"
}, function(error, data) {
	console.log(data);
});
	
[
	{
		"tx_id": "e6751090e0b46c1dbbc6ad8dc87fcc28eb37eca47b449d6bde30a9aab1b4f32c",
		"coin": "tLTC",
		"type": "sent",
		"from": [{
			"address": "mukemt2vcPv79dPT8L4XC5J1H53fMFiCJs",
			"amount": 0.15,
			"amountCoins": "15000000",
			"type": "address",
			"isWallet": 1
		}],
		"to": [{
			"address": "mtkemt2vcPv79dPT8L4XC5J1H53fMFiCJk",
			"amount": 0.1,
			"amountCoins": "10000000",
			"type": "address",
			"isWallet": 0
		}, {
			"address": "ms4u4DsgfqdP85ceodZkHm1TFn43tEHaiX",
			"amount": 0.05,
			"amountCoins": "5000000",
			"type": "fee",
			"isWallet": 0
		}],
		"amount": 0.15,
		"amountCoins": "15000000",
		"message": "12345",
		"fees": {
			"coin": "tLTC",
			"amount": 0.05,
			"amountCoins": 5000000
		},
		"confirmations": 10,
		"isConfirmed": 1,
		"time": 1735733100
	}
]

Address History

The Address History Endpoint allows to get transaction history of specified address generated by API.


Endpoint Method
/addresshistory POST
Request
Attribute Type Description
address string Address string of corresponding currency.
params
optional
array [limit, offset] parameters to display records.
limit - how many records to display (maximum is 100);
offset - from which record.
token
optional
string Token symbol. Can be used for Ethereum currency. Example: USDT, TST, etc.
Response
Attribute Type Description
tx_id string Transaction hash.
coin string Currency symbol.
type string Type of transaction, sent or received
from array List of addresses from where funds have been sent.
See annotation.
to array List of addresses funds where received to.
amount float Total transaction amount.
amountCoins string Total transaction amount in satoshis.
message string Additional message information like destination tag for Ripple(XRP).
fees array|object Transaction fees.
See annotation.
confirmations int Total confirmations of transaction.
isConfirmed int Returns if transaction is confirmed. 1 for confirmed, 0 for unconfirmed.
Each coin has its own confirmations. For example, for Bitcoin it is 2 confirmations, for Litecoin 6 confirmations, etc.
time int Time of transaction in timestamp format.
Address History


				curl -d '{"address":"mukemt2vcPv79dPT8L4XC5J1H53fMFiCJs","params":{"limit":10,"offset":5"},"token":"TST","_api_sign":"5a45d26fd9a63cb32511b21a3c36ab16bf8c55a5e8b5e1034f788cd73923d7d0"}' https://api.blockmove.io/v1/send?_api_key=DGd8dAjlsfGXag_KWdjMormuNldnYOi1
			

[
	{
		"tx_id": "e6751090e0b46c1dbbc6ad8dc87fcc28eb37eca47b449d6bde30a9aab1b4f32c",
		"coin": "tLTC",
		"type": "sent",
		"from": [{
			"address": "mukemt2vcPv79dPT8L4XC5J1H53fMFiCJs",
			"amount": 0.15,
			"amountCoins": "15000000",
			"type": "address",
			"isWallet": 1
		}],
		"to": [{
			"address": "mtkemt2vcPv79dPT8L4XC5J1H53fMFiCJk",
			"amount": 0.1,
			"amountCoins": "10000000",
			"type": "address",
			"isWallet": 0
		}, {
			"address": "ms4u4DsgfqdP85ceodZkHm1TFn43tEHaiX",
			"amount": 0.05,
			"amountCoins": "5000000",
			"type": "fee",
			"isWallet": 0
		}],
		"amount": 0.15,
		"amountCoins": "15000000",
		"message": "12345",
		"fees": {
			"coin": "tLTC",
			"amount": 0.05,
			"amountCoins": 5000000
		},
		"confirmations": 10,
		"isConfirmed": 1,
		"time": 1735733100
	}
]
$params = [
	"limit" => 10,
	"offset" => 5
];
			
$result = APIClient::init($apiKey, $apiSecret)
		->getAddressHistory(
			$address,
			$params,
			$token
		);
	
[
	{
		"tx_id": "e6751090e0b46c1dbbc6ad8dc87fcc28eb37eca47b449d6bde30a9aab1b4f32c",
		"coin": "tLTC",
		"type": "sent",
		"from": [{
			"address": "mukemt2vcPv79dPT8L4XC5J1H53fMFiCJs",
			"amount": 0.15,
			"amountCoins": "15000000",
			"type": "address",
			"isWallet": 1
		}],
		"to": [{
			"address": "mtkemt2vcPv79dPT8L4XC5J1H53fMFiCJk",
			"amount": 0.1,
			"amountCoins": "10000000",
			"type": "address",
			"isWallet": 0
		}, {
			"address": "ms4u4DsgfqdP85ceodZkHm1TFn43tEHaiX",
			"amount": 0.05,
			"amountCoins": "5000000",
			"type": "fee",
			"isWallet": 0
		}],
		"amount": 0.15,
		"amountCoins": "15000000",
		"message": "12345",
		"fees": {
			"coin": "tLTC",
			"amount": 0.05,
			"amountCoins": 5000000
		},
		"confirmations": 10,
		"isConfirmed": 1,
		"time": 1735733100
	}
]
Api.getAddressHistory({
	address: "ADDRESS",
	params: {
		limit: 10,
		offet: 5
	},
	token: "TST"
}, function(error, data) {
	console.log(data);
});
	
[
	{
		"tx_id": "e6751090e0b46c1dbbc6ad8dc87fcc28eb37eca47b449d6bde30a9aab1b4f32c",
		"coin": "tLTC",
		"type": "sent",
		"from": [{
			"address": "mukemt2vcPv79dPT8L4XC5J1H53fMFiCJs",
			"amount": 0.15,
			"amountCoins": "15000000",
			"type": "address",
			"isWallet": 1
		}],
		"to": [{
			"address": "mtkemt2vcPv79dPT8L4XC5J1H53fMFiCJk",
			"amount": 0.1,
			"amountCoins": "10000000",
			"type": "address",
			"isWallet": 0
		}, {
			"address": "ms4u4DsgfqdP85ceodZkHm1TFn43tEHaiX",
			"amount": 0.05,
			"amountCoins": "5000000",
			"type": "fee",
			"isWallet": 0
		}],
		"amount": 0.15,
		"amountCoins": "15000000",
		"message": "12345",
		"fees": {
			"coin": "tLTC",
			"amount": 0.05,
			"amountCoins": 5000000
		},
		"confirmations": 10,
		"isConfirmed": 1,
		"time": 1735733100
	}
]

Common Annotations




Transaction Fees array
Attribute Type Description
coin string Symbol of corresponding currency.
amount float Total address balance.
amountCoins string Total address balance in satoshis.



Wallet/Address history From & To array
Attribute Type Description
address string Address value of corresponding currency.
amount float Total address balance.
amountCoins string Total address balance in satoshis.
type string Type of address.
address - for wallet address;
change - change address;
fee - used to charge fee.
isWallet int Shows does that address belongs to the wallet. Has 0 or 1 value.

Webhooks

Webhooks are used for notifications of change in address balance. We send notifications to callback url you provided during address generation.

Each webhook is logging on corresponding API Keys page, so you can easily monitor correctness of your scripts and view response codes.

Also there is a tool on API Keys page for testing your callback urls.

Webhooks send data by POST method.

Your website must response with 200 http code. If it response with any other code, we retry individual payloads to your url five times, then webhook marks as incorrect.
Payload Data
Attribute Type Description
coin string Corresponding coin code.
txid string Transaction ID hash.
type string Type of transaction, sent or received.
block int Block number.
address string The address that you had generated.
message string Additional message attribute used for currencies like Ripple that has destination tag param.
amount float Amount of transaction.
amountCoins float Amount of transaction in satoshis.
confirmations int Number of confirmations of transaction.
isConfirmed int Returns if transaction is confirmed. 1 for confirmed, 0 for unconfirmed.
time int Time of transaction in timestamp.
blockTime int Time of block in timestamp.
Webhooks
Payload POST Data
{
	"coin": "tLTC",
	"txid": "e6751090e0b46c1dbbc6ad8dc87fcc28eb37eca47b449d6bde30a9aab1b4f32c",
	"type": "received",
	"block": 999999,
	"address": "mukemt2vcPv79dPT8L4XC5J1H53fMFiCJs",
	"message": "12345",
	"amount": 0.1,
	"amountCoins": "10000000",
	"confirmations": 10,
	"isConfirmed": 1,
	"time": 1735733100,
	"blockTime": 1735733100
}

Merchant IPN

Instant Payment Notification (IPN) is a message service that automatically notifies merchants about incoming transactions.

Merchants can use it to automate back-office and administrative functions, including automatically fulfilling orders and providing customers with order status.

Each IPN request is logging on corresponding Merchant Settings page, so you can easily monitor correctness of your scripts and view response codes.

IPN request is sending with POST method.

Your website must response with 200 http code. If it response with any other code, the system will retry individual payloads to your Status Url ten times, then request marks as incorrect.
Payload Data
Attribute Type Description
status string The current status of invoice.
List of invoice statuses.
invoice_id string Unique Blockmove Merchant Invoice ID.
order_id string Order ID generated by your website.
currency string The fiat currency your website is using. For example USD.
amount float Amount of your order in your website currency. For example 100 USD.
coin string Cryptocurrency coin the customer makes payment.
rate float Rate of selected cryprtocurrency coin.
invoice_amount float Invoice amount of selected cryptocurrency.
invoice_coins float Invoice amount of selected cryptocurrency in satoshis.
paid_amount float Coins of selected cryptocurrency paid by customer.
paid_coins float Coins of selected cryptocurrency paid by customer in satoshis.
refunded_amount float Amount of selected cryptocurrency coins in order if customer requested refund.
refunded_coins float Amount of selected cryptocurrency coins in satoshis in order if customer requested refund.
[custom parameters] mixed Custom parameters that received from your website.
sign string Signature of request signed by Merchant Secret Key. It uses to verify correctness of payload data.

Signed by Merchant Secret Key with HMAC-SHA256 algorithm.


Merchant Invoice Statuses
Status Description
new Invoice created and not yet paid.
confirming Network is confirming transaction.
paid Invoice has been completely paid.
expired Time of the invoice has been expired.
cancel Invoice has been canceled by customer.
error Some error occurred.
refund Customer requested refund.
refunded Refund has been completed.
Merchant IPN
Payload POST Data
{
	"status": "paid",
	"invoice_id": "5dd111f8d71df",
	"order_id": "123456789",
	"currency": "USD",
	"amount": 100,
	"coin": "BTC",
	"rate": 5000,
	"invoice_amount": 0.02,
	"invoice_coins": "20000000",
	"paid_amount": 0.02,
	"paid_coins": "20000000",
	"refunded_amount": 0.019999,
	"refunded_coins": "19999000",
	"param1": "custom_parameter_1",
	"param2": "custom_parameter_2",
	"sign": "7068a8f402eef752a30fc7136c08aa509a8591cb97816714167b49c207d788e4"
}

Merchant Secret Key Example
2Yt0FGJoRJjygiTHCxiGUwdEe_UStiUvbeWVBR8Xyt6g24o4F-

Request Body Example
status=paid&invoice_id=5dd111f8d71df&order_id=123456789¤cy=USD&amount=100&coin=BTC&rate=5000&invoice_amount=0.02&invoice_coins=20000000&paid_amount=0.02&paid_coins=20000000&refunded_amount=0.019999&refunded_coins=19999000¶m1=custom_parameter_1¶m2=custom_parameter_2

Request HMAC SHA256 signature
[linux]$ echo -n 'status=paid&invoice_id=5dd111f8d71df&order_id=123456789¤cy=USD&amount=100&coin=BTC&rate=5000&invoice_amount=0.02&invoice_coins=20000000&paid_amount=0.02&paid_coins=20000000&refunded_amount=0.019999&refunded_coins=19999000¶m1=custom_parameter_1¶m2=custom_parameter_2' \
			| openssl dgst -sha256 -hmac "2Yt0FGJoRJjygiTHCxiGUwdEe_UStiUvbeWVBR8Xyt6g24o4F-"

(stdin)= 7068a8f402eef752a30fc7136c08aa509a8591cb97816714167b49c207d788e4

				echo hash_hmac('sha256', 'status=paid&invoice_id=5dd111f8d71df&order_id=123456789¤cy=USD&amount=100&coin=BTC&rate=5000&invoice_amount=0.02&invoice_coins=20000000&paid_amount=0.02&paid_coins=20000000&refunded_amount=0.019999&refunded_coins=19999000¶m1=custom_parameter_1¶m2=custom_parameter_2', '2Yt0FGJoRJjygiTHCxiGUwdEe_UStiUvbeWVBR8Xyt6g24o4F-');
			

php://stdin = '7068a8f402eef752a30fc7136c08aa509a8591cb97816714167b49c207d788e4'
let crypto = require('crypto');
				
let hmac = crypto.createHmac('sha256', '2Yt0FGJoRJjygiTHCxiGUwdEe_UStiUvbeWVBR8Xyt6g24o4F-');

let result = hmac.update(queryString).digest('hex');
				
console.log(result);

node://stdin = '7068a8f402eef752a30fc7136c08aa509a8591cb97816714167b49c207d788e4'