REST API endpoint

The service allows users to easily query for recent price updates via a REST API or via a websocket

Through a rest api endpoint

a user could use this endpoint to query symbol price quotes via REST api. Our REST api endpoints could be found at: https://api.testnet.eoracle.network

Get Rate

  • Endpoint: /api/v1/get_rate

  • Method: GET

  • Parameters:

    • symbol (string, required): The symbol for which to get the rate.

  • Authentication The authentication method for the REST api is a simple basic authentication. The username is the api key provided to you by eoracle and the password should be left blank.

$ curl -X GET -u your_api_key "https://api.testnet.eoracle.network/api/v1/get_rate?symbol=eth"
{
    "symbol":"eth",  
    "rate":"2235520000000000000000",   
    "timestamp":1704645014000,  
    "data":"0x0c64cc6cb523085bac8aa2221d5458999...2309417974f4a72b98"
} 

Get Symbols

  • Endpoint: /api/v1/get_symbols

  • Method: GET

Example

curl -u your_api_key: 'https://api.testnet.eoracle.network/api/v1/get_symbols'

Response

["jpy", "eth", "btc"]

Socket.IO API

We provide a simple socket stream using the standard Socket.IO library. The message protocol is describe in the following section and includes a connection, authentication and subscribe phases.

Connection

Connection is made to our eoracle api endpoint at https://api.testnet.eoracle.network. Once connected the consumer can initiate an authentication event.

Request Events

  1. authenticate

  • name: authenticate

  • payload:

{ 
  "token": "your_api_key" // your oracle api key
}
  1. subscribe

    • name: subscribe

    • payload:

    {
       "topic": "feed", //(string, required): The topic to subscribe to (e.g., 'feed').
       "symbols": ["btc", "eth", "jpy"] //(array of strings, optional): An array of symbols to subscribe to. If empty, subscribe to all symbols.
    }

Response Events

  1. authenticated

    • this message is received when your client was successfully authenticated with a valid api key. once you receive this it's a good trigger point for subscribing to quote feeds.

    • name: 'authenticated'

    • payload: none

  2. quote

    • name: quote

    • payload:

    {
      "symbol": "eth",
      "rate": "1923.45", 
      "timestamp": 1238971228, 
      "data": "0xbd3de674b8bd65........93c9220fb3202e405266", // provable merkle tree
     }

Examples

following are more examples of usage

Python

import socketio

# socket.IO connection URL
server_url = 'https://api.testnet.eoracle.network/api/v1/get_rate'

# create a Socket.IO client instance
sio = socketio.Client()

def on_connect():
    print('connected to server')
    sio.emit('authenticate', { 'token': 'your_api_key' })

# subscribe to a specific topic when the client is authenticated
def on_authenticated():
    print('authenticated with server')
    sio.emit('subscribe', { 'topic': 'feed', 'symbols': ['btc', 'eth'] })

sio.on('connect', on_connect)

# listen for updates on the specified topic
def on_quote(quote):
    print(f"Received symbol quote for {quote['symbol']}: {quote['rate']}")
    # TODO: implement your own logic here to handle the symbol rate update

sio.on('quote', on_quote)

# handle disconnection
def on_disconnect():
    print('Disconnected from server')

sio.on('disconnect', on_disconnect)

# Connect to the server
sio.connect(server_url)

# Keep the script running
try:
    sio.wait()
except KeyboardInterrupt:
    print('Disconnecting...')
    sio.disconnect()

TypeScript

import { io, Socket } from 'socket.io-client';

const socket: Socket = io('https://api.testnet.eoracle.network');

socket.on('connect', () => {
  console.log('Connected to server');
  socket.emit('subscribe', { topic: 'feed', symbols: ['btc', 'eth'] });
});

socket.on('quote', (quote: any) => {
    console.log(`Received symbol quote for ${quote.symbol}: ${quote.rate}`);
    // TODO: implement your own logic here to handle the symbol rate update
});

// Handle disconnection
socket.on('disconnect', () => {
  console.log('Disconnected from server');
});

Last updated