NEM Exchange Integration Guide


This tutorial will quickly guide you through everything an exchange needs to add NEM.

1. Account

To create an account go to and download the desktop client. We recommend creating a simple wallet. The delegated keys can be found at Services/Delegated Harvesting/Manage delegated account. The account’s private key can be found at Account.

2. API Documentation

NEM is completely API based and therefore language agnostic. To get started, take a look at the API documentation

Further, the NEM Knowledge Base consolidates lots of developer resources and examples:

3. Self-Hosted Node/Hugenode

Most exchanges like to run their own node for obvious reasons. I’d still like to point out that you can use the NEM library to execute API calls on a pool of supernodes. This is more reliable than running your own node since the call will be attempted until a working node has been found:

3.1. Self-Hosted Node

If you want to run your own node, you can use the supernode guide and skip step 3:

3.2. Self-Hosted Hugenode

If you require historical lookups (i.e. running /account/transfers/all with a hash that’s older than 36 hours), you’ll need to change a few settings for your node and you’ll need much more RAM.

RAM Requirements

Running a node with historical lookups requires at least 9GB of RAM for the NIS process. I recommend a 16GB VPS that assigns 10GB to the NIS. Check section 1.3. of the supernode guide and change the config file to:


java -Xms10240M -Xmx10240M -cp ".:package/nis:package/nis/*:package/libs/*" org.nem.deploy.CommonStarter

Config Changes

Change the following in nis-ncc/package/nis/



nis.transactionHashRetentionTime = -1

NEM node stuck on block height
NEM node stuck on block height

Thank you Paul. Your article was very useful and took us one step closer to integrating NEM with our Exchange. However if falls short of explaining how to monitoring deposits and withdrawals. Could you please elaborate on these two subjects?


Please PM in Telegram Shin Tatt.
He is NEM Technical Trainer. Will help you with integration.
I’ve sent you contact in private message.


How would you monitor deposits and withdrawals if it wouldn’t be a blockchain but a normal RMDBS ?

Majority of exchanges are doing this way.
They have a unique cold wallet address.
When a user wants to deposit they give (display) to the user an unique message ID.
The user needs to send this message in the same transaction that he sands to deposit xem to the exchange.

check for example this address (bittrex wallet)

check this transaction:

you see there is a message sent by the user.
this an unique ID generated by the exchange to track user deposits.

I hope this info could help you.