Flow

Flow Blockchain enables access to the most commonly used Flow methods. These methods bring a small level of abstraction and are used for applications that communicate with the blockchain directly. Some of the methods are used alongside Tatum Private Ledger to connect the blockchain and the private ledger, like wallet generation or getting information about transactions.
Tatum supports FLOW and FUSD stable coin.
Tatum supports 2 chains:

To create accounts or mint NFTs on mainnet, you have to have paid API Key. Tatum covers the transaction fees on FLOW blockchain out of the box, so mainnet operations are available only on the paid API Key.
Tatum handles automatically proposal key management - we internally rotate the proposal keys for you, so you don't have to take care of that and can easily scale your transaction throughput.
Tatum supports BIP44 HD wallets. Because they can generate 2^31 addresses from 1 mnemonic phrase, they are very convenient and secure. It is possible to generate this type of wallet with 1 simple API call.
It's not possible to pregenerate addresses on the Flow blockchain. You can generate only public keys, which are used to generate address using a create account transaction to the Flow blockchain. You have to have existing account on the Flow to initialize new address creation. Transactions on the Flow blockchain are free.

Generate Flow wallet

1 credit per API call.


Tatum supports BIP44 HD wallets. It is very convenient and secure, since it can generate 2^31 addresses from 1 mnemonic phrase. Mnemonic phrase consists of 24 special words in defined order and can restore access to all generated addresses and private keys.
Each address is identified by 3 main values:

  • Private Key - your secret value, which should never be revealed
  • Public Key - public address to be published
  • Derivation index - index of generated address

Tatum follows BIP44 specification and generates for Dogecoin wallet with derivation path m'/44'/3'/0'/0. More about BIP44 HD wallets can be found here - https://github.com/litecoin/bips/blob/master/bip-0044.mediawiki. Generate BIP44 compatible Dogecoin wallet.

SecurityX-API-Key
Request
query Parameters
mnemonic
string <= 500 characters

Mnemonic to use for generation of extended public and private keys.

Responses
200

OK

400

Bad Request. Validation failed for the given object in the HTTP Body or Request parameters.

401

Unauthorized. Not valid or inactive subscription key present in the HTTP Header.

403

Forbidden. The request is authenticated, but it is not possible to required perform operation due to logical error or invalid permissions.

500

Internal server error. There was an error on the server while processing the request.

get/v3/flow/wallet
Request samples
Response samples
application/json
{
  • "mnemonic": "urge pulp usage sister evidence arrest palm math please chief egg abuse",
  • "xpub": "xpub6EsCk1uU6cJzqvP9CdsTiJwT2rF748YkPnhv5Qo8q44DG7nn2vbyt48YRsNSUYS44jFCW9gwvD9kLQu9AuqXpTpM1c5hgg9PsuBLdeNncid"
}

Generate Flow address from Extended public key

1 credit for GET operation + 3000 credits per address.


Generate Flow address from Extended public key. This operation internally creates public key and assings it to the newly created address on the blockchain. There is minimal amount, which must be sent to the FLOW address during creation - 0.001 FLOW, which will be used from Tatum service account.
This operation is allowed on any Testnet plan and only on Paid Mainnet plans. Public key is generated for the specific index - each extended public key can generate up to 2^31 addresses starting from index 0 until 2^31 - 1.

SecurityX-API-Key
Request
path Parameters
xpub
required
string

Extended public key of wallet.

Example: xpub6EsCk1uU6cJzqvP9CdsTiJwT2rF748YkPnhv5Qo8q44DG7nn2vbyt48YRsNSUYS44jFCW9gwvD9kLQu9AuqXpTpM1c5hgg9PsuBLdeNncid
index
required
number

Derivation index of desired address to be generated.

Responses
200

OK

400

Bad Request. Validation failed for the given object in the HTTP Body or Request parameters.

401

Unauthorized. Not valid or inactive subscription key present in the HTTP Header.

403

Forbidden. The request is authenticated, but it is not possible to required perform operation due to logical error or invalid permissions.

500

Internal server error. There was an error on the server while processing the request.

get/v3/flow/address/{xpub}/{index}
Request samples
Response samples
application/json
{
  • "address": "0x4f09d8d43e4967b7"
}

Generate Flow public key from Extended public key

1 credit per API call.


Generate Flow public key from Extended public key. This key is added to the address on the blockchain and can control the funds there. Public key is generated for the specific index - each extended public key can generate up to 2^31 addresses starting from index 0 until 2^31 - 1.

SecurityX-API-Key
Request
path Parameters
xpub
required
string

Extended public key of wallet.

Example: xpub6EsCk1uU6cJzqvP9CdsTiJwT2rF748YkPnhv5Qo8q44DG7nn2vbyt48YRsNSUYS44jFCW9gwvD9kLQu9AuqXpTpM1c5hgg9PsuBLdeNncid
index
required
number

Derivation index of desired address to be generated.

Responses
200

OK

400

Bad Request. Validation failed for the given object in the HTTP Body or Request parameters.

401

Unauthorized. Not valid or inactive subscription key present in the HTTP Header.

403

Forbidden. The request is authenticated, but it is not possible to required perform operation due to logical error or invalid permissions.

500

Internal server error. There was an error on the server while processing the request.

get/v3/flow/pubkey/{xpub}/{index}
Request samples
Response samples
application/json
{
  • "pubKey": "968c3ce11e871cb2b7161b282655ee5fcb051f3c04894705d771bf11c6fbebfc6556ab8a0c04f45ea56281312336d0668529077c9d66891a6cad3db877acbe90"
}

Generate Flow private key

2 credits per API call.


Generate private key for address from mnemonic for given derivation path index. Private key is generated for the specific index - each mnemonic can generate up to 2^32 private keys starting from index 0 until 2^31 - 1.

SecurityX-API-Key
Request
Request Body schema: application/json
index
required
integer <= 2147483647

Derivation index of private key to generate.

mnemonic
required
string [ 1 .. 500 ] characters

Mnemonic to generate private key from.

Responses
200

OK

400

Bad Request. Validation failed for the given object in the HTTP Body or Request parameters.

401

Unauthorized. Not valid or inactive subscription key present in the HTTP Header.

403

Forbidden. The request is authenticated, but it is not possible to required perform operation due to logical error or invalid permissions.

500

Internal server error. There was an error on the server while processing the request.

post/v3/flow/wallet/priv
Request samples
application/json
{
  • "index": 0,
  • "mnemonic": "urge pulp usage sister evidence arrest palm math please chief egg abuse"
}
Response samples
application/json
{
  • "key": "cTmS2jBWXgFaXZ2xG9jhn67TiyTshnMp3UedamzEhGm6BZV1vLgQ"
}

Get Flow current block number

1 credit per API call.


Get Flow current block number.

SecurityX-API-Key
Responses
200

OK

401

Unauthorized. Not valid or inactive subscription key present in the HTTP Header.

403

Forbidden. The request is authenticated, but it is not possible to required perform operation due to logical error or invalid permissions.

500

Internal server error. There was an error on the server while processing the request.

get/v3/flow/block/current
Request samples
Response samples
application/json
12345678

Get Flow Block by hash or height

1 credit per API call.


Get Flow Block detail by block hash or height.

SecurityX-API-Key
Request
path Parameters
hash
required
string

Block hash or height.

Example: 1234314
Responses
200

OK

400

Bad Request. Validation failed for the given object in the HTTP Body or Request parameters.

401

Unauthorized. Not valid or inactive subscription key present in the HTTP Header.

404

Block not found.

500

Internal server error. There was an error on the server while processing the request.

get/v3/flow/block/{hash}
Request samples
Response samples
application/json
{
  • "id": "e11ca8f92f2d5dea7406e64ab8cb1780a8a19185d9ac670b16ca8c4f09f05add",
  • "parentId": "7bd701e87f319254d19dc17459f97df6a44052d05df5e1cd442dd2e3f48ecedc",
  • "height": 31733102,
  • "timestamp": "2021-05-11T19:13:03.227Z",
  • "transactions": [
    ],
  • "signatures": [
    ],
  • "blockSeals": [
    ]
}

Get Flow events from blocks

1 credit per API call.


Get Flow events from block.

SecurityX-API-Key
Request
query Parameters
type
required
string

Event type to search for

Example: type=A.7e60df042a9c0868.FlowToken.TokensWithdrawn
from
required
number

Block height to start searching

Example: from=654321
to
required
number

Block height to end searching

Example: to=654326
Responses
200

OK

400

Bad Request. Validation failed for the given object in the HTTP Body or Request parameters.

401

Unauthorized. Not valid or inactive subscription key present in the HTTP Header.

404

Block not found.

500

Internal server error. There was an error on the server while processing the request.

get/v3/flow/block/events
Request samples
Response samples
application/json
[
  • {
    }
]

Get Flow Transaction by hash

1 credit per API call.


Get Flow Transaction detail by transaction hash.

SecurityX-API-Key
Request
path Parameters
hash
required
string

Transaction hash

Example: d60631d8e5c8b6eb0557b5181cf28564d771c628a08abc414e87ad7c05ff2fc2
Responses
200

OK

400

Bad Request. Validation failed for the given object in the HTTP Body or Request parameters.

401

Unauthorized. Not valid or inactive subscription key present in the HTTP Header.

403

Forbidden. The request is authenticated, but it is not possible to required perform operation due to logical error or invalid permissions.

500

Internal server error. There was an error on the server while processing the request.

get/v3/flow/transaction/{hash}
Request samples
Response samples
application/json
{
  • "referenceBlockId": "ad8b9ab637d56e19188cd5410db6e993fbf66216296c99f7934cf9f3594f9658",
  • "script": "string",
  • "args": [
    ],
  • "gasLimit": 1000,
  • "proposalKey": {
    },
  • "payer": "955cd3f17b2fd8ad",
  • "payloadSignatures": [
    ],
  • "envelopeSignatures": [
    ],
  • "status": 4,
  • "statusCode": 0,
  • "errorMessage": "string",
  • "events": [
    ]
}

Get Flow account

1 credit per API call.


Get Flow account details.

SecurityX-API-Key
Request
path Parameters
address
required
string

Account address you want to get balance of

Example: 0x955cd3f17b2fd8ad
Responses
200

OK

400

Bad Request. Validation failed for the given object in the HTTP Body or Request parameters.

401

Unauthorized. Not valid or inactive subscription key present in the HTTP Header.

403

Forbidden. The request is authenticated, but it is not possible to required perform operation due to logical error or invalid permissions.

500

Internal server error. There was an error on the server while processing the request.

get/v3/flow/account/{address}
Request samples
Response samples
application/json
{
  • "address": "0x02fcc83938d2b63b",
  • "balance": 10000000,
  • "code": "string",
  • "contracts": { },
  • "keys": [
    ]
}

Send Flow to blockchain addresses

100 credits per API call.


Send Flow or FUSD to blockchain addresses. Tatum covers the fee connected to the transaction costs in subscription credits. This operation can be done on mainnet only for paid plans.
There are two possibilites how the transaction on the blockchain can be created:

  • Using mnemonic and index - private key is generated based on the index in the mnemonic.
  • Using secret - private keys is entered manually.


This operation needs the private key of the blockchain address. Every time the funds are transferred, the transaction must be signed with the corresponding private key. No one should ever send it's own private keys to the internet because there is a strong possibility of stealing keys and losing funds. In this method, it is possible to enter privateKey or signatureId. PrivateKey should be used only for quick development on testnet versions of blockchain when there is no risk of losing funds. In production, Tatum KMS should be used for the highest security standards, and signatureId should be present in the request. Alternatively, using the Tatum client library for supported languages.

SecurityX-API-Key
Request
Request Body schema: application/json
One of:
account
required
string = 18 characters

Blockchain account to send from

currency
required
string

Type of asset to send

Enum: "FLOW" "FUSD"
to
string = 18 characters

Blockchain address to send assets

amount
required
string <= 38 characters ^[+]?((\d+(\.\d*)?)|(\.\d+))$

Amount to be sent, in Flow.

mnemonic
required
string [ 1 .. 500 ] characters

Mnemonic to generate private key.

index
required
number >= 0

Index to the specific address from mnemonic.

Responses
200

OK

400

Bad Request. Validation failed for the given object in the HTTP Body or Request parameters.

401

Unauthorized. Not valid or inactive subscription key present in the HTTP Header.

403

Forbidden. The request is authenticated, but it is not possible to required perform operation due to logical error or invalid permissions.

500

Internal server error. There was an error on the server while processing the request.

post/v3/flow/transaction
Request samples
application/json
{
  • "account": "0x955cd3f17b2fd8ad",
  • "currency": "FLOW",
  • "amount": "10000",
  • "mnemonic": "urge pulp usage sister evidence arrest palm math please chief egg abuse",
  • "index": 0
}
Response samples
application/json
{
  • "txId": "c83f8818db43d9ba4accfe454aa44fc33123d47a4f89d47b314d6748eb0e9bc9"
}

Send arbitrary transaction to blockchain

100 credits per API call.


Send arbitrary blockchain transaction to FLOW blockchain. Tatum covers the fee connected to the transaction costs in subscription credits. This operation can be done on mainnet only for paid plans.
There are two possibilites how the transaction on the blockchain can be created:

  • Using mnemonic and index - private key is generated based on the index in the mnemonic.
  • Using secret - private keys is entered manually.


This operation needs the private key of the blockchain address. Every time the funds are transferred, the transaction must be signed with the corresponding private key. No one should ever send it's own private keys to the internet because there is a strong possibility of stealing keys and losing funds. In this method, it is possible to enter privateKey or signatureId. PrivateKey should be used only for quick development on testnet versions of blockchain when there is no risk of losing funds. In production, Tatum KMS should be used for the highest security standards, and signatureId should be present in the request. Alternatively, using the Tatum client library for supported languages.

SecurityX-API-Key
Request
Request Body schema: application/json
One of:
account
required
string = 18 characters

Blockchain account to send from

transaction
required
string [ 1 .. 500000 ] characters

Transaction string to send to the chain.

required
Array of objects
Array
required
string or Array of arrays

The value of the argument; can be a string or an array of strings

type
required
string <= 38 characters

Type of the argument

Enum: "Identity" "UInt" "Int" "UInt8" "Int8" "UInt16" "Int16" "UInt32" "Int32" "UInt64" "Int64" "UInt128" "Int128" "UInt256" "Int256" "Word8" "Word16" "Word32" "Word64" "UFix64" "Fix64" "String" "Character" "Bool" "Address" "Void" "Optional" "Reference" "Array" "Dictionary" "Event" "Resource" "Struct"
subType
string <= 38 characters

Type of the argument

Enum: "Identity" "UInt" "Int" "UInt8" "Int8" "UInt16" "Int16" "UInt32" "Int32" "UInt64" "Int64" "UInt128" "Int128" "UInt256" "Int256" "Word8" "Word16" "Word32" "Word64" "UFix64" "Fix64" "String" "Character" "Bool" "Address" "Void" "Optional" "Reference" "Array" "Dictionary" "Event" "Resource" "Struct"
mnemonic
required
string [ 1 .. 500 ] characters

Mnemonic to generate private key.

index
required
number >= 0

Index to the specific address from mnemonic.

Responses
200

OK

400

Bad Request. Validation failed for the given object in the HTTP Body or Request parameters.

401

Unauthorized. Not valid or inactive subscription key present in the HTTP Header.

403

Forbidden. The request is authenticated, but it is not possible to required perform operation due to logical error or invalid permissions.

500

Internal server error. There was an error on the server while processing the request.

post/v3/flow/transaction/custom
Request samples
application/json
{
  • "account": "0x955cd3f17b2fd8ad",
  • "transaction": "transaction(publicKey: String) {\n prepare(signer: AuthAccount) {\n signer.addPublicKey(publicKey.decodeHex())\n }\n}\n",
  • "args": [
    ],
  • "mnemonic": "urge pulp usage sister evidence arrest palm math please chief egg abuse",
  • "index": 0
}
Response samples
application/json
{
  • "txId": "c83f8818db43d9ba4accfe454aa44fc33123d47a4f89d47b314d6748eb0e9bc9"
}

Create Flow address from public key

100 credits per API call. Tatum covers the fee connected to the transaction costs in subscription credits. This operation can be done on mainnet only for paid plans.


Create Flow blockchain addresses from public key. This will generate address on the blockchain with public key. Private key for that public key can be used for signing transaction. There are two possibilites how the transaction on the blockchain can be created:

  • Using mnemonic and index - private key is generated based on the index in the mnemonic.
  • Using secret - private keys is entered manually.


This operation needs the private key of the blockchain address. Every time the funds are transferred, the transaction must be signed with the corresponding private key. No one should ever send it's own private keys to the internet because there is a strong possibility of stealing keys and losing funds. In this method, it is possible to enter privateKey or signatureId. PrivateKey should be used only for quick development on testnet versions of blockchain when there is no risk of losing funds. In production, Tatum KMS should be used for the highest security standards, and signatureId should be present in the request. Alternatively, using the Tatum client library for supported languages.

SecurityX-API-Key
Request
Request Body schema: application/json
One of:
account
required
string = 18 characters

Blockchain account to send from

publicKey
required
string = 128 characters

Public key to be used

weight
number [ 0 .. 1000 ]

Weight of the key. If not set, default 1000 will be used.

mnemonic
required
string [ 1 .. 500 ] characters

Mnemonic to generate private key.

index
required
number >= 0

Index to the specific address from mnemonic.

Responses
200

OK

400

Bad Request. Validation failed for the given object in the HTTP Body or Request parameters.

401

Unauthorized. Not valid or inactive subscription key present in the HTTP Header.

403

Forbidden. The request is authenticated, but it is not possible to required perform operation due to logical error or invalid permissions.

500

Internal server error. There was an error on the server while processing the request.

post/v3/flow/account
Request samples
application/json
{
  • "account": "0x955cd3f17b2fd8ad",
  • "publicKey": "968c3ce11e871cb2b7161b282655ee5fcb051f3c04894705d771bf11c6fbebfc6556ab8a0c04f45ea56281312336d0668529077c9d66891a6cad3db877acbe90",
  • "mnemonic": "urge pulp usage sister evidence arrest palm math please chief egg abuse",
  • "index": 0
}
Response samples
application/json
{
  • "signatureId": "1f7f7c0c-3906-4aa1-9dfe-4b67c43918f6"
}

Add public key to Flow address

100 credits per API call. Tatum covers the fee connected to the transaction costs in subscription credits. This operation can be done on mainnet only for paid plans.


Add public key to existing Flow blockchain addresses. Private key for that public key can be used for signing transaction. There are two possibilites how the transaction on the blockchain can be created:

  • Using mnemonic and index - private key is generated based on the index in the mnemonic.
  • Using secret - private keys is entered manually.


This operation needs the private key of the blockchain address. Every time the funds are transferred, the transaction must be signed with the corresponding private key. No one should ever send it's own private keys to the internet because there is a strong possibility of stealing keys and losing funds. In this method, it is possible to enter privateKey or signatureId. PrivateKey should be used only for quick development on testnet versions of blockchain when there is no risk of losing funds. In production, Tatum KMS should be used for the highest security standards, and signatureId should be present in the request. Alternatively, using the Tatum client library for supported languages.

SecurityX-API-Key
Request
Request Body schema: application/json
One of:
account
required
string = 18 characters

Blockchain account to send from

publicKey
required
string = 128 characters

Public key to be used

weight
number [ 0 .. 1000 ]

Weight of the key. If not set, default 1000 will be used.

mnemonic
required
string [ 1 .. 500 ] characters

Mnemonic to generate private key.

index
required
number >= 0

Index to the specific address from mnemonic.

Responses
200

OK

400

Bad Request. Validation failed for the given object in the HTTP Body or Request parameters.

401

Unauthorized. Not valid or inactive subscription key present in the HTTP Header.

403

Forbidden. The request is authenticated, but it is not possible to required perform operation due to logical error or invalid permissions.

500

Internal server error. There was an error on the server while processing the request.

put/v3/flow/account
Request samples
application/json
{
  • "account": "0x955cd3f17b2fd8ad",
  • "publicKey": "968c3ce11e871cb2b7161b282655ee5fcb051f3c04894705d771bf11c6fbebfc6556ab8a0c04f45ea56281312336d0668529077c9d66891a6cad3db877acbe90",
  • "mnemonic": "urge pulp usage sister evidence arrest palm math please chief egg abuse",
  • "index": 0
}
Response samples
application/json
{
  • "txId": "c83f8818db43d9ba4accfe454aa44fc33123d47a4f89d47b314d6748eb0e9bc9"
}