Agent Websocket API

The Fractrade platform provides websocket endpoints for real-time data and action streaming for every agent.

Action Websocket

The Action websocket allows you to receive real-time actions from your agents.

Endpoint

wss://api.fractrade.xyz/ws/actions/{agent_id}

Authentication

Authentication is required to connect to the websocket. You can authenticate using your API key and secret:

wss://api.fractrade.xyz/ws/actions/{agent_id}?api_key={api_key}&api_secret={api_secret}

Message Format

Messages are sent in JSON format. Each message contains an action object:

{
  "action_id": "action-uuid",
  "action_type": "EXECUTE_HYPERLIQUID_PERP_TRADE",
  "agent_id": "agent-uuid",
  "config": {
    "position": {
      "asset": "BTC",
      "size": 0.1,
      "side": "LONG",
      "leverage": 10,
      "exchange": "hyperliquid"
    }
  },
  "created_at": "2023-01-01T00:00:00Z",
  "status": "PENDING"
}

Action Types

The following action types are published to the websocket:

Action Type
Description

EXECUTE_HYPERLIQUID_PERP_TRADE

Execute a trade on Hyperliquid

SET_HYPERLIQUID_PERP_STOP_LOSS

Set a stop loss on Hyperliquid

SET_HYPERLIQUID_PERP_TAKE_PROFIT

Set a take profit on Hyperliquid

Note: SEND_TELEGRAM actions are not published to the websocket as they are only used internally for sending notifications to Telegram.

Example: Connecting with Python

import websocket
import json
import threading
import rel

def on_message(ws, message):
    action = json.loads(message)
    print(f"Received action: {action}")

    # Process the action
    action_type = action['action_type']
    config = action['config']

    if action_type == 'EXECUTE_HYPERLIQUID_PERP_TRADE':
        # Handle trade execution
        position = config['position']
        print(f"Trade signal: {position}")

        # Execute the trade using your own logic
        # ...

def on_error(ws, error):
    print(f"Error: {error}")

def on_close(ws, close_status_code, close_msg):
    print(f"Connection closed: {close_msg}")

def on_open(ws):
    print("Connection opened")

if __name__ == "__main__":
    # Replace with your actual values
    agent_id = "your-agent-id"
    api_key = "your-api-key"
    api_secret = "your-api-secret"

    # Create websocket connection
    ws_url = f"wss://api.fractrade.xyz/ws/actions/{agent_id}?api_key={api_key}&api_secret={api_secret}"

    ws = websocket.WebSocketApp(
        ws_url,
        on_open=on_open,
        on_message=on_message,
        on_error=on_error,
        on_close=on_close
    )

    # Set dispatcher to automatic reconnection
    ws.run_forever(dispatcher=rel)
    rel.signal(2, rel.abort)  # Keyboard Interrupt
    rel.dispatch()

Example: Connecting with JavaScript

const WebSocket = require('ws');

// Replace with your actual values
const agentId = 'your-agent-id';
const apiKey = 'your-api-key';
const apiSecret = 'your-api-secret';

// Create websocket connection
const wsUrl = `wss://api.fractrade.xyz/ws/actions/${agentId}?api_key=${apiKey}&api_secret=${apiSecret}`;
const ws = new WebSocket(wsUrl);

ws.on('open', function open() {
  console.log('Connection opened');
});

ws.on('message', function incoming(data) {
  const action = JSON.parse(data);
  console.log('Received action:', action);

  // Process the action
  const actionType = action.action_type;
  const config = action.config;

  if (actionType === 'EXECUTE_HYPERLIQUID_PERP_TRADE') {
    // Handle trade execution
    const position = config.position;
    console.log('Trade signal:', position);

    // Execute the trade using your own logic
    // ...
  }
});

ws.on('error', function error(err) {
  console.log('Error:', err);
});

ws.on('close', function close() {
  console.log('Connection closed');
});

User Channel Websocket

For users who want to receive actions from all their agents, you can connect to the user channel websocket:

wss://api.fractrade.xyz/ws/user/{user_id}

This endpoint requires user authentication and will stream all actions from all agents owned by the user.

Rate Limits

  • Maximum 10 concurrent connections per user

  • Maximum 100 messages per minute per connection

Error Codes

Code
Description

1000

Normal closure

1001

Going away

1002

Protocol error

1003

Unsupported data

1008

Policy violation

1011

Internal server error

Last updated