---
tags: FVM SDK + API V.B1
---
# SDK
### Initialize
```javascript=
const fvm = require('fvm-sdk');
const client = new fvm.Client('http://127.0.0.1:8545', 'main')
```
## Account
### Create/import account
```javascript=
// Generate raw private key
const account = fvm.create_account()
// Recovery accounts
const account = fvm.create_account_from_mnemonic(mnemonic, der_path = '...')
const account = fvm.create_account_from_privkey(privkey)
```
### Export key
```javascript=
const rawSecret = account.export_privkey() // As Buffer
const rawSecret = account.export_privkey_as_WIF() // As Buffer of utf-8 encoded of WIF
if (account.has_mnemonic()) {
const rawMnemonic = account.export_mnemonic() // String
}
```
### Connect hardware wallet
```javascript=
const account = fvm.create_account_from_hardware()
const address = account.address()
// Hardware account is not exportable
assert.ok(!account.exportable())
```
## Other
### Get balance
```javascript=
const balance = client.getBalance(address | account);
const tokenBalance = client.tokenBalance(tokenAddress, address | account);
```
### Create transaction
```javascript=
const address = account.address()
const receiver = "...";
const token = "...";
const contract = "...";
const calldata = "...";
// Basic
const txId1 = client.sendTo(from=address, to=receiver, amount=1);
const txId2 = client.sendTokenTo(from=address, to=receiver, token=token, amount=1.1);
// Basic: interact with contract
const abi = <json>
const contract = client.contract(abi, contract);
const approveTx = await contract.methods.approve(receiver, 1.1).send(from=account);
const balance = await contract.methods.balanceOf(address).call()
// Adjust transaction
let txBuilder = new TransactionBuilder();
let utxos = new client.getUtxos(address)
let rawTransaction = txBuilder
.withUtxos(utxos)
.toAddress(receiver, 1.2)
.withCalldata(contract, calldata);
.changeTo(address)
.sign(acount, ...);
const txId = client.sendRawTransaction(rawTransaction)
```
### Receive funds using QR code
```javascript=
const Utils = require("fvm-utils");
const nativePaymentData = Utils.generate_payment_message(to, amount);
const paymentData = Utils.generate_payment_message(to, amount, token);
// Use paymentData(Hex) to generate QR code
let transactionBuilder = Utils.decode_payment_message(paymentData);
rawTransaction = transactionBuilder
.withUtxos(utxos)
.changeTo(address)
.sign(account, ...);
const txId = client.sendRawTransaction(rawTransaction);
```
### Buy token
```javascript=
// TODO
```
### Query asset
```javascript=
const balance = client.getBalance(address);
const tokenBalance = client.getTokenBalance(token, address);
```
# Backend
### Get transactions history by address to query activities
```javascript=
curl https://api.next.org/transactions/<address>
`
[
{
...Transaction
}
]
`
```