🚀 Need to scale your dApp? Check out EOS Infra for our premium EOS API service.


curl -si https://public.eosinfra.io/v1/chain/get_info

The Problem: Knowing which EOS API nodes are best suited to handle your users' requests
The Solution: A geo routing proxy that auto tunnels requests to the most relevant API node

One API Host

Use a single API host to gain access to all top EOS block producer API nodes. Requests to our API use the same nodeos RPC API paths and parameters.

Reduce Latency

All requests are served by Geo-DNS contextual to the location of the user. The chosen producer details are returned in the response headers.

Client Side Integration

Use our API proxy host as a drop in replacement with all major client side libraries. It even works with cleos using the -u switch.

How Does It Work?

Based on real-time API performance data collected from our monitoring service, we always serve the best API contextual to the location of the user.


The API proxy is designed to handle thousands of requests a second. We hope our proxy will become a fundamental building block for all dApps.

History APIs

We validate the producer nodes to determine if the history plugin is enabled. All proxy requests for history will be auto routed to matching APIs.

How To Use

Simply append the desired endpoint to the end of our API host: https://public.eosinfra.io/path/to/endpoint

As the API host is a drop in replacement, you can call all endpoints using the official request structure. You can check out the EOS Developers microsite for a full rundown of all available endpoints.

There is no restriction on how you call the proxy, check out the examples on the right to see how it can be done via js, curl and cleos.

Call the chain info GET endpoint using js

	.then(response => response.json()
	.then(data => console.log(data)));


Fetch a block via POST using curl

curl -sX POST -d '{"block_num_or_id":"888888"}' https://public.eosinfra.io/v1/chain/get_block

{"timestamp":"2018-06-15T14:32:09.000","producer":"eoshuobipool","confirmed":0,"previous":"000d903756de5c2ba16368d3a63f5367f26645029908088c71b6cc5840bab6a1","transaction_mroot":"09c2be1af51b544c4f5d0cf928f583b19712007453c43b12f0f7a6f8b4e398c3","action_mroot":"a38bae1fab5da942eb13cb2df1737f4aafb16d543c2158e4a6431e50154a49cd","schedule_version":7,"new_producers":null,"header_extensions":[],"producer_signature":"SIG_K1_K65pQY9NWCncwzwwCMJFkRnM1ZysBAzFZuoUyUdrF3PWJZdR4zEULEt8Na4VW5cPPNLNb6wCjGeXgbENd2dYbkuaNS7ZHJ","transactions":[{"status":"executed","cpu_usage_us":849,"net_usage_words":14,"trx":{"id":"6b4cbb22b3036bfbf40be47f3eee2442b1c5d3f8389608d2e3a8274a6db435e4","signatures":["SIG_K1_K9dDQULQVKG1dKF8WfkZpHZqnetumRYSLfz7dbarC9MxdWDE6CuuUFaRsfs2oeLAP99yLreQEeTXcsXzwxR2H1Si4tUBVG"],"compression":"none","packed_context_free_data":"","context_free_data":[],"packed_trx":"b4d5235bed8e99b9b1b10000000001a09861f648958566000000000080694a01a09864fa489abe6600000000a8ed3232100f41444120746f20746865206d6f6f6e00","transaction":{"expiration":"2018-06-15T15:05:24","ref_block_num":36589,"ref_block_prefix":2981214617,"max_net_usage_words":0,"max_cpu_usage_ms":0,"delay_sec":0,"context_free_actions":[],"actions":[{"account":"gu2tembqgage","name":"ddos","authorization":[{"actor":"guzdombugmge","permission":"active"}],"data":{"memo":"ADA to the moon"},"hex_data":"0f41444120746f20746865206d6f6f6e"}],"transaction_extensions":[]}}}],"block_extensions":[],"id":"000d9038417ac66f405e9065be34dc27d9f22b033be71541c07c4102f0d4f38a","block_num":888888,"ref_block_prefix":1703960128}

Using cleos to call get code

cleos -u https://public.eosinfra.io get code eosio

code hash: b721d706e5ea6dbdfd6fc601bbc3e52adca5c83138e3326290451ef888707b6d
# Requesting some history info
curl -siX POST -d '{"id":"91c64386b29fe91dd7bfc612bf8d927be297e55d15da2bd8780b1b74588de39a"}' https://public.eosinfra.io/v1/history/get_transaction

Content-Type: application/json
Content-Length: 594
Connection: keep-alive
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: X-Selected-Producer, X-Selected-Node
Cache-Control: no-cache, private
X-Request-Id: Root=1-5bd86947-9640b75008133bb832e0aca8
X-Selected-Location: Frankfurt
X-Selected-Node: https://eu.eosdac.io
X-Selected-Producer: eosdacserver
X-Total-Execution-Time: 29.861696ms
X-Total-Process-Time: 29.851513ms

Response Headers

As we are proxying the API requests, we decorate this response with some of our own custom headers, most notable are the actual EOS producer and corresponding API host that served the request.

Each response also contains the geographic location of our application node that served the request, along with the fetch time from the producer API and the total time of the request.

We have also enabled HTTP persistent connections, so that multiple requests can be served as efficiently as possible.

Improving Reliability

We created the proxy to help developers and to improve the user experience for EOS dApps. Within our app, we have implemented many features that trigger transparently to improve the response success rate and speed.

For example, if the initial proxied producer returns a non-standard nodeos error, the proxy will auto retry the request using a different producer.

Within our producer selection algorithm, we deprioritise producer API hosts that start to return failures or begin to respond slowly.

With these safeguards in place, we have dramatically increased the percentage of successful requests which should make any app that relies on EOS chain data much more reliable.

We also collect metrics for every call to our proxy and we want to use this data with our fellow block producers to help improve API performance and reliability across the EOS network.

Geo-DNS Routing

It's imperative that a proxy service is as fast as possible. We have deployed application nodes around the globe and utilise Geo-DNS routing to reduce request latency for calls to the proxy.

Get in touch with us

We have a dedicated telegram group for discussing the API proxy, we'd love to hear your thoughts and feedback.

EOS Infra Telegram Group