Steem Developer logo

Steem Developer Portal

Welcome to our API

This API document is designed for those interested in developing with steem.

Our API docs are still under development and constantly evolving. The source code for the Dev Portal is open source, and pull requests to update the portal are accepted and encouraged. Developers who would like to make additional improvements to the Dev Portal may submit pull requests to the GitHub repository:

Please visit the quickstart section which includes helpful tutorials to get going quickly. More detailed endpoint and advanced features are available in services for building robust platforms on the amazing and censorship resistant steem blockchain.

Choose Library

Getting started to develop robust and feature rich steem applications couldn’t be easier. Accessing steem data is easy from various options depending on your infrastructure and objectives.

Building a picture discovery app is a breeze with the JavaScript library. There is also a Python library available, and SBDS services, as well as many third party developer projects which could be beneficial for your steem project.

steemd Nodes

Applications that interface directly with the Steem blockchain will need to connect to a steemd node. Developers may choose to use one of the public API nodes that are available, or run their own instance of a node.

Public Nodes

URL Owner @gtg @followbtcnews @privex @steemgigs @steemit @curie @netuoso @ausbitbank

Private Nodes

The simplest way to get started is by deploying a prebuilt dockerized container.

Dockerized p2p Node

To run a p2p node (ca. 2GB of memory is required at the moment):

Dockerized Full Node

to run a node with all the data (e.g. for supporting a content website) that uses ca. 14GB of memory and growing:

docker run \
    -d -p 2001:2001 -p 8090:8090 --name steemd-default \

docker logs -f steemd-default  # follow along
docker run \
    --env USE_WAY_TOO_MUCH_RAM=1 \
    -d -p 2001:2001 -p 8090:8090 --name steemd-full \

docker logs -f steemd-full

Steem Testnet

Steem blockchain software is written in C++ and in order to modify the source code you need some understanding of the C++ programming language. Each Steem node runs an instance of this software, so in order to test your changes, you will need to know how to install dependencies which can be found in the Steem repo. This also means that some knowledge of System administration is also required. There are multiple advantages of running a testnet, you can test your scripts or applications on a testnet without extra spam on the live network, which allows much more flexibility to try new things. Having access to a testnet also helps you to work on new features and possibly submit new or improved pull requests to official the Steem GitHub repository.

Running Testnet

By following official build steps and enabling the BUILD_STEEM_TESTNET flag during compilation, you should be able to run the Steem Testnet locally on your workstation and join the development testnet. Docker can also be used to get started quickly. Compilation generates the steemd executable which is the main daemon for the Steem network. Additional cli_wallet can also be compiled to test/connect to an instance of steemd and request some data from the network, but it is not necessary to run a node.

The development testnet requires a certain minimum set of hardware requirements, depending on the type of compile flags that have been enabled. Because it is a mirror of the live network, private keys are the same for accounts up to the point of the snapshot timestamp of the testnet.

Joining/Running the development testnet requires around 10 GB for block log on an SSD and 8 GB RAM. The CPU requirements are the same.

Testnet has the following parameters by default (as of this writing):

  • Initial supply (250 billion) - STEEM_INIT_SUPPLY 250,000,000,000
  • Max number of blocks to be produced - TESTNET_BLOCK_LIMIT 3,000,000
  • Address prefix, prefix on public addresses - STEEM_ADDRESS_PREFIX "TST"
  • Chain id name, used for chain id - STEEM_CHAIN_ID_NAME "testnet"
  • Chain id, unique id hash of chain - STEEM_CHAIN_ID (fc::sha256::hash(STEEM_CHAIN_ID_NAME))
  • Public key of genesis account - STEEM_INIT_PUBLIC_KEY_STR
  • Account creation fee - STEEM_MIN_ACCOUNT_CREATION_FEE 0

There are a number of other subtle changes that we don’t need to focus on right now.

Live testnet

  • ChainID: 46d82ab7d8db682eb1959aed0ada039a6d49afa1602491f93dde9cac3e8e6c32
  • Address prefix: TST
  • API node:

Anyone can join the Live testnet and start testing their node and applications, become a witness, and provide API (RPC) node for public use.

Custom Testnet

In order to create a custom testnet, separate from the development one, we need to modify a few parameters mentioned in the previous section.

In the file named steem/libraries/protocol/include/steem/protocol/config.hpp, we can see the first few lines dedicated to the Testnet section. The line starts with #ifdef IS_TEST_NET.

Let’s say we want to create a custom testnet with an initial supply of 1,000,000 STEEM. We can change STEEM_INIT_SUPPLY 1,000,000 and by changing STEEM_CHAIN_ID_NAME "testnet", testnet to mytestnet we will automatically get a unique Chain ID for our testnet. The address prefix can be set to something like MTN and of course, we need to change the public and private keys to the genesis account. Note that the genesis account will receive the entire pre-mined supply of 1,000,000. That way, you can execute a setup script to fund any newly created accounts. Such a custom testnet will not have any additional hardware requirements to run.

A minimum of 8GB RAM should be sufficient to run a custom testnet. Currently, Steem only has Linux and Mac compiling guides to build. A testnet can either be hosted locally, on a rented AWS, or dedicated bare metal servers so one can start testing functionality, explore different APIs, and start developing.

One more crucial point to modify is to change the number of witnesses required to accept hardforks for a custom testnet, by default it is set to 17, we can change it to 1 STEEM_HARDFORK_REQUIRED_WITNESSES 1 so that only one node instance would be sufficient and the network will be still functional and fast.

Another thing to note is that you can start a new chain with all previous hardforks already accepted, by changing the file named steem/blob/master/libraries/chain/database.cpp with the following function:

void database::init_genesis( uint64_t init_supply ) inside try add this line:

set_hardfork( 19, true );

This would mean that 19 hardforks have been accepted by witnesses and the new chain will start with all previous forks included.

After these changes, all we have to do is compile the source code and get the steemd executable. And once we fire up the custom testnet we can start testing and experimenting.

If you want to port some data from Steem main network you can use Tinman, also developed by Steemit, to help with taking snapshots of the main network.

Custom live testnet

  • ChainID: 79276aea5d4877d9a25892eaa01b0adf019d3e5cb12a97478df3298ccdd01673
  • Address prefix: STX
  • API node:

The above testnet is powered by community member @almost-digital and doesn’t have a snapshot of the main network. endpoints offers a few endpoints for getting common data. User profile and post JSON data is very convenient and simple by appending .json to your request.

Getting a particular user profile JSON:

Getting a particular post JSON:

Example outputs.

User object

"user": {
"id": 81544,
"name": "curie",
"owner": {
"weight_threshold": 1,
"account_auths": [],
"key_auths": [
"active": {
"weight_threshold": 1,
"account_auths": [],
"key_auths": [
"proxy": "",
"last_owner_update": "1970-01-01T00:00:00",
"last_account_update": "2016-12-04T12:47:39",
"created": "2016-09-02T10:44:24",
"mined": false,
"owner_challenged": false,
"active_challenged": false,
"last_owner_proved": "1970-01-01T00:00:00",
"last_active_proved": "1970-01-01T00:00:00",
"recovery_account": "anonsteem",
"last_account_recovery": "1970-01-01T00:00:00",
"reset_account": "null",
"comment_count": 0,
"lifetime_vote_count": 0,
"post_count": 229,
"can_vote": true,
"voting_power": 5960,
"last_vote_time": "2017-02-13T19:21:12",
"balance": "1577.838 STEEM",
"savings_balance": "0.000 STEEM",
"sbd_balance": "0.000 SBD",
"sbd_seconds": "2918395506",
"sbd_seconds_last_update": "2017-02-12T15:58:36",
"sbd_last_interest_payment": "2017-02-05T13:45:09",
"savings_sbd_balance": "0.000 SBD",
"savings_sbd_seconds": "0",
"savings_sbd_seconds_last_update": "1970-01-01T00:00:00",
"savings_sbd_last_interest_payment": "1970-01-01T00:00:00",
"savings_withdraw_requests": 0,
"vesting_shares": "141562477.072664 VESTS",
"vesting_withdraw_rate": "12897472.658235 VESTS",
"next_vesting_withdrawal": "2017-02-15T04:53:06",
"withdrawn": "116077253924115",
"to_withdraw": "167667144557061",
"withdraw_routes": 0,
"curation_rewards": 448416,
"posting_rewards": 154104841,
"proxied_vsf_votes": [
"witnesses_voted_for": 1,
"average_bandwidth": 855531960,
"lifetime_bandwidth": "10797835000000",
"last_bandwidth_update": "2017-02-13T19:21:12",
"average_market_bandwidth": 127424482,
"last_market_bandwidth_update": "2017-02-12T15:39:57",
"last_post": "2017-02-13T18:00:51",
"last_root_post": "2017-02-13T18:00:51",
"post_bandwidth": 19271,
"new_average_bandwidth": "370418659068",
"new_average_market_bandwidth": "93913506382",
"vesting_balance": "0.000 STEEM",
"reputation": "330673789878881",
"transfer_history": [],
"market_history": [],
"post_history": [],
"vote_history": [],
"other_history": [],
"witness_votes": [
"tags_usage": [],
"guest_bloggers": [],
"blog_category": {}
"status": "200"

Post object

"post": {
"id": 1720643,
"author": "curie",
"permlink": "the-daily-curie-08-09-jan-2017",
"category": "curation",
"parent_author": "",
"parent_permlink": "curation",
"title": "The Daily Curie (08-09 Jan 2017)",
"body": "</center>
\n IntroductionCurie](
ing-authors) is a community project",
"last_update": "2017-01-09T12:20:15",
"created": "2017-01-09T12:20:15",
"active": "2017-01-11T22:44:57",
"last_payout": "2017-02-09T14:40:54",
"depth": 0,
"children": 36,
"children_rshares2": "0",
"net_rshares": 0,
"abs_rshares": 0,
"vote_rshares": 0,
"children_abs_rshares": 0,
"cashout_time": "1969-12-31T23:59:59",
"max_cashout_time": "1969-12-31T23:59:59",
"total_vote_weight": 0,
"reward_weight": 10000,
"total_payout_value": "0.000 SBD",
"curator_payout_value": "0.000 SBD",
"author_rewards": 0,
"net_votes": 519,
"root_comment": 1720643,
"mode": "archived",
"max_accepted_payout": "0.000 SBD",
"percent_steem_dollars": 10000,
"allow_replies": true,
"allow_votes": true,
"allow_curation_rewards": true,
"url": "/curation/@curie/the-daily-curie-08-09-jan-2017",
"root_title": "The Daily Curie (08-09 Jan 2017)",
"pending_payout_value": "0.000 SBD",
"total_pending_payout_value": "0.000 SBD"


sbds is a tool for easily querying the data of the Steem Blockchain.

While providing direct interfaces to several pluggable storage architectures that may be used for querying the blockchain, sbds may also be used as a lower level API upon which other applications can be built.

Docker Hub

docker run -d steemit/sbds

Python 3

pip3 install -e


Stream blocks 1 to 3450000 from our dev S3 bucket

sbds checkpoints get-blocks s3://steemit-dev-sbds-checkpoints/gzipped --start 1 --end 3450000

Stream blocks 8000000 to the last block from your local copy of our S3 bucket

sbds checkpoints get-blocks /home/ubuntu/checkpoints/gzipped --start 8000000

Stream all blocks from your local copy of our S3 bucket

sbds checkpoints get-blocks /home/ubuntu/checkpoints/gzipped


Coming soon.


The steem community is thriving with developer activity and projects to support our great blockchain steem.

While we don’t officially endorse the following projects, below are growing third party developer projects which could be beneficial for your steem project.

Ruby Client

Radiator is a Ruby API client to interact with the steem blockchain.

Radiator -


A public Microsoft SQL server database with steem blockchain data.

steem SQL -


SteemData helps developers and researchers build better STEEM applications. We parse the STEEM blockchain for you, and provide the data as a fast and convenient MongoDB service.

SteemData provides public MongoDB database, as well as HTTP API endpoints.

Steem Data -

SteemDevs Chat

SteemDevs chat is a Discord chat community where members of the Steem development community go to discuss Steem development, and other related topics. It is a great place to go to ask questions, meet other developers that are working on Steem projects, share tips and code snippets, and discuss the items you are working on.

SteemDevs Chat -

Developer Advocate

The members of the Steemit Inc. development team are currently the main contributors to the Steem blockchain software. They oversee the open source Steem GitHub repository, and maintain many of the open source libraries that developers use.

Steemit’s Developer Advocate is here to make the process of developing for the Steem platform as smooth as possible. If you have any comments, concerns, or suggestions about how to improve the experience of developing applications with the Steem blockchain - please don’t hesitate to reach out.

Please note, the D.A. receives a lot of emails, but they will respond as quickly as possible.