Developers

Everything a program needs to read or write this chain. A gateway is an HTTPS front door: it terminates TLS, rate-limits, and proxies the chain API to the nodes, so a browser can talk to ZooBC without running one.

One base URL

Everything about the chain lives under /api/v1/ on this gateway, same origin as this page — no CORS to negotiate, no key to obtain, no rate plan.

curl https://this-gateway/api/v1/blockchain/status

Reads and writes go to different places, which matters more than it sounds:

GETproxied to an archival node, which holds the deep history — blocks, transactions, accounts as of any height.
POSTproxied straight to a full node, never to archival. Submitting a transaction needs a mempool, and an archival node is a read-only history service — it used to answer POST with 404, which is why broadcasting through a gateway once did not work.

The routes you will reach for first

/api/v1/blockchain/statusheight, confirmed height, latest block
/api/v1/blocks/latestthe newest block in full
/api/v1/accounts/<address>balance and spendable balance. Takes a ZBC_… address or the raw 36-byte hex
/api/v1/accounts/<address>/tokensevery token that account holds
/api/v1/transactions?limit=25recent signed transactions
/api/v1/movements/latestbalance changes the chain makes itself — rewards, vesting, refunds
/api/v1/exchange/marketsopen markets; …/orderbook?market=<id> for depth, …/offers for swap packages
/api/v1/tokensevery token, with supply and decimals
/api/v1/release/listpublished releases and their hashes — what /verify checks against
/api/v1/registry/nodesthe node registry; also /gateways, /relays, /archivals

Some routes exist only on an archival node and some only on a full node. This gateway tries archival first and retries the node API on an empty-bodied 404, so you rarely have to care which is which — but a 404 with a body is a real answer, not a wrong turn.

Submitting a transaction

Build and sign it with zbc-cli, which takes its parameters as JSON on stdin so a private key never lands in ps or your shell history:

echo '{"sender_privkey":"…","recipient":"ZBC_…","amount":100000000}' \
  | zbc-cli send --json-input --api https://this-gateway

1 ZBC is 108 atomic units. Every amount in the API is atomic — there are no decimals anywhere in the wire format.

Full reference

Every route, its parameters and its response shape:

Open the API reference →  ·  alternate view

Both addresses serve the same document.

Downloads

Files an operator has published on this gateway are served at /dl/<name>. Names are a single segment of [A-Za-z0-9._-], and everything is sent as an attachment and never rendered — this origin also serves the wallet, and a page rendered here would inherit the wallet's origin.

Release bundles live under /releases/<version>/<arch>/, with /releases/latest naming the current one. The node installer is at /install.

Is this gateway healthy? checking…

/gateway/status reports what this gateway knows about itself and the nodes it can reach — mode, domain, how many nodes are on its allowlist, which are answering.

/gateway/system-stats reports the machine: CPU, memory, disk, uptime. It is what the figures on the gateway page are drawn from.

curl https://this-gateway/gateway/status
curl https://this-gateway/gateway/system-stats

Neither needs a key. Neither exposes anything about the chain — for that use /api/v1/… above.

Reaching one specific node

The chain routes answer from whichever archival node this gateway picks. To query a named node, put its IP in the hostname — dots become dashes, and an optional -p<port> chooses the API port:

curl https://ip-192-168-1-100.this-gateway/api/v1/node/info
curl https://ip-192-168-1-100-p8080.this-gateway/api/v1/node/info

Only nodes on this gateway's allowlist answer. Anything else is refused rather than proxied, so the hostname cannot be used to reach arbitrary hosts through the gateway.

Relay

Voice, video and screen-share go peer-to-peer; when a firewall blocks a direct link a relay carries the traffic for credit. /relay/info reports its address, its rate and the genesis hash of the chain it settles on — a wallet compares that against its own node before paying, because a relay on another chain cannot credit what it is paid.

curl https://this-gateway/relay/info

Admin panel

The gateway's own controls live at /admin. It is protected by the admin_api_key from /etc/zoobc/gateway.json, which the installer generates per box — there is no default key.

The allowlist

A gateway only proxies to nodes it has been told about. That list is what stops the ip-… hostname form from turning the gateway into an open proxy.

POST /gateway/allowlist/addadmit a node — {"ip":"…","port":8080}
POST /gateway/allowlist/removedrop one
POST /gateway/allowlist/refreshre-read the registry and re-check health
GET  /gateway/allowlistwhat is currently admitted

All three writes need the admin key. In public mode the gateway also discovers nodes from the chain's own registry; in private mode it uses only static_nodes.

Release tooling

The offline signer signs a release bundle without the signing key ever touching a server — it is a self-contained page, meant to be opened on a machine that holds the key and nothing else. The file hasher computes a SHA-256 in the browser for anything you want to check by hand.