Secure Nodes

Tracking & Payment System: Beta(mainnet)

API Guide

API Keys

API keys are required for the public API service and are now used in the 'My Nodes' pages of the tracking server web site. 

The main purpose of the API key is replace sending email addresses of node operators in the url of API calls and removing the ability for any email address to be entered on a My Nodes page to display nodes associated with that address. It will also stop other users or bots from clicking on buttons on the Node Details page to send emails for details and challenges.

How to create an API Key

  1. The node operator enters the email address associated with his/her nodes on the Settings page.

  2. A new API key is generated and a confirmation email is sent to the email address entered. 

  3. When the email link for the new API key is clicked, the key is confirmed and activated.

  4. The node operator is brought back to the Settings page and the API key is displayed. 

The API key is required for use with third party applications.

Using the API

First obtain a key from the tracking server Settings page.  The key must be used for any API request that returns node data linked to email address (provided at the time of the node configuration).

Note: The API calls are meant to replace any use of a url 'grid' in it. The grid urls were intended to be used by the web pages, not as stand-alone API calls. Please do not use them.

Please limit the number of API calls to no more than once every 30 seconds for periodic calls.  Rate limiting will be implemented at a later time. 

Any use of <sample> in a url is a value meant to be substituted without the <>.  All data is returned as JSON.  If an error is encountered, a JSON object with a key of "error" is returned with a message.


These do not require an API key


Path: /api/srvstats
Return: the current server, region and global node counts and estimated earnings.



Path: /api/srvlist
Return: regions and servers.  

{"region":"na","regions":[["na","North America"],["eu","Europe"]],"servers":["","","","","","","",""]}

Note: Nodes use this list to register and for failover. The tracking servers also pushes a server list update when a node connects.

Path: /api/earnings
Return: amount of stake, current worth of ZEN, BTC in USD, Price of ZEN in USD, total ZEN earned by all nodes to date, worth of toal ZEN paid in USD.



Path: /api/chal/open
Return: the open challenge count for each server



Path: /api/node/<node_id>/certstatus
Return: validity of the node's certificate, msg to display, certificate information, when the tracking server last checked it, and an internal flag for whether to check peers for TLS connections if the primary DNS method fails.

{"valid":true,"msg":"Hostname matches CN","certinfo":{"subject":{"CN":""},"issuer":{"C":"US","O":"Let's Encrypt","CN":"Let's Encrypt Authority X3"}},"checked":"2018-05-31T21:21:56.987Z","trynext":false}

Note: This is used on the Node Detail web page for the certificate status.  Since this information is not in the database, this call will only work against the tracking server the node is currently connected to ('curserver' property of a node)


All of the following calls require an API key. The API key must be sent as a query parameter appended to the Path. ?key=<apikey>


Non-Paged Requests

Path: /api/nodes/<nodeid>/detail?key=<apikey>
Return: returns node details for given nodeid.  If the email of the API key matches the email of the node, the node t-address and stake t-address are also returned as 'taddr' and 'stkaddr'. Any open Exceptions and Downtimes are also returned.

{"id":9,"status":"up","home":"","curserver":"","ip4":"","ip6":null,"fqdn":"","config":{"hw":{"CPU":"Intel(R) Xeon(R) CPU E5-2697 v4 @ 2.30GHz","cores":1,"speed":2299},"node":{"version":2001050,"wallet.version":60000,"protocolversion":170002},"trkver":"0.2.1"},"createdAt":"2017-10-16T19:24:11.000Z","updatedAt":"2018-06-13T22:38:25.000Z","taddr":"ztTYagRWzHZuiZxFTuhTgUZigFyoHNBe65s","stkaddr":"ztaj8xNwDjkLxMYWHnWLCvaxHYLmDQzwcxZ","email":"[email protected]","exceptions":[{"id":40184,"etype":"chalmax","start":"2018-05-02T17:06:40.000Z","check":"2018-06-13T22:40:22.000Z","end":null}],"hasException":true}


Path: /api/nodes/my/list?key=<apikey>

Optional parameters: &status=<status>  where <status> can be 'up' or 'down'. e.g. &status=up

Return: array of nodes associated with the node email address linked to the API key. 


{"nodes":[{"id":9,"status":"up","home":"","curserver":"","ip4":"","ip6":null,"fqdn":"","createdAt":"2017-10-16T19:24:11.000Z","updatedAt":"2018-06-13T21:44:27.000Z","email":"[email protected]","zenver":2001050,"trkver":"0.2.1"}]}


Path: /api/nodes/my/earnings?key=<apikey>

Optional parameters:  &nid=<nodeid>  return only for specified node. e.g. &nid=435

Return: array of nodes with their associated earnings to date along with a record count and summary data that include the total zen earned to date and the current price of Zen in USD. Data is associated with the node email address linked to the API key. 





Paged Requests

The following API calls return paged results.  The page number and row count must be passed in the search parameters of the request.  

Example: api/nodes/my/exceptions?key=6201c79b86e4ec54048344512f1498c2ed5ba2c0&page=1&rows=10

The result elements with data about the number of records, total pages and the current page number along with the items requested in the 'rows' array.  The number of rows requested is returned as 'rowsperpage'.

{"page":1,"total":79,"rowsperpage":10,"records":781,"rows":[{"id":120679,"fqdn". . .

Path: /api/nodes/my/downtimes?key=<apikey>&page=<pagenumber>&rows=<rowcount>

Optional parameters:

  &nid=<nodeid>  return only for specified node. e.g. &nid=435
  &status=<status>  where <status> is 'o' for open or 'c' for closed.  e.g. &status=o

Result: Downtimes for all nodes associated with the API key.




Path: /api/nodes/my/exceptions?key=<apikey>&page=<pagenumber>&rows=<rowcount>

Optional parameters:

  &nid=<nodeid>  return only for specified node.  e.g. &nid=435
  &status=<status>  where <status> is 'o' for open or 'c' for closed.   e.g. &status=o

Result: Exceptions for all nodes associated with the API key.




Path: /api/nodes/my/challenges?key=<apikey>&page=<pagenumber>&rows=<rowcount>

Optional parameters:

  &nid=<nodeid>  return only for specified node.  e.g. &nid=435
  &result=<result>  where <result> is 'pass' or 'fail'.   e.g. &result=fail

Result: Challenge results for all nodes associated with the API key.




Path: /api/nodes/my/payments?key=<apikey>&page=<pagenumber>&rows=<rowcount>

Optional parameters:

  &nid=<nodeid>  return only for specified node.  e.g. &nid=435
  &status=<status>  where <status> is 'exclude'  e.g. &status=exclude

Result: Payments and Credits for all nodes associated with the API key. The type is 'e' for earnings and 'c' for credit