signalmAgIc
  • 🤝Welcome
  • 🧑‍💻Advanced AI Technology Stack
  • ⛑️How It Works
  • 💲Tokenomics
  • 🏦Exchange Integration
  • 📊Signal Monitoring Dashboard
  • 👨‍💻API Integration for Devs.
  • 📱Mobile Notifications & Trading Education
  • 🏃‍♂️Get Started Today
Powered by GitBook
On this page

API Integration for Devs.

SignalMagic offers a robust API for developers who want to integrate our signals into their own trading systems:

### REST API Documentation

```
BASE URL: https://api.signalmagic.ai/v1
```

<details>
<summary><strong>Authentication</strong></summary>

```
Authorization: Bearer YOUR_API_KEY
```

Generate your API key from: **Dashboard > Settings > API Access**
</details>

<details>
<summary><strong>Endpoints</strong></summary>

**Get Latest Signals**
```
GET /signals/latest
```
Parameters:
- `asset`: Filter by specific asset (optional)
- `confidence`: Minimum confidence score (optional)
- `limit`: Number of signals to return (default: 10)

**Get Signal by ID**
```
GET /signals/{signal_id}
```

**Get Account Positions**
```
GET /positions
```
Parameters:
- `status`: open, closed, all (default: open)
- `asset`: Filter by specific asset (optional)

**Place Order**
```
POST /orders
```
Body:
```json
{
  "signal_id": "sig_123456",
  "exchange": "binance",
  "position_size": "10%", // or specific amount
  "entry_type": "market", // or "limit"
  "stop_loss_type": "fixed", // or "trailing"
  "take_profit_levels": [
    { "price": 45000, "percentage": 25 },
    { "price": 47000, "percentage": 50 },
    { "price": 50000, "percentage": 25 }
  ]
}
```
</details>

### WebSocket API

Connect to our WebSocket API for real-time signal updates:

```
wss://api.signalmagic.ai/v1/ws
```

#### Events:

- `signal`: New trading signal generated
- `signal_update`: Updates to existing signal
- `position_update`: Changes in your open positions
- `market_alert`: Critical market condition alerts

### Code Examples

<details>
<summary><strong>Python Integration Example</strong></summary>

```python
import requests
import json
import hmac
import hashlib
import time

API_KEY = "your_api_key"
API_SECRET = "your_api_secret"
BASE_URL = "https://api.signalmagic.ai/v1"

def get_signature(query_string):
    return hmac.new(
        API_SECRET.encode('utf-8'),
        query_string.encode('utf-8'),
        hashlib.sha256
    ).hexdigest()

def get_latest_signals(asset=None, confidence=None, limit=10):
    endpoint = "/signals/latest"
    timestamp = int(time.time() * 1000)
    params = f"timestamp={timestamp}&limit={limit}"
    
    if asset:
        params += f"&asset={asset}"
    if confidence:
        params += f"&confidence={confidence}"
        
    signature = get_signature(params)
    headers = {
        "Authorization": f"Bearer {API_KEY}",
        "X-SM-SIGNATURE": signature
    }
    
    response = requests.get(
        f"{BASE_URL}{endpoint}?{params}",
        headers=headers
    )
    
    return response.json()

def place_order(signal_id, exchange, position_size, entry_type="market", 
                stop_loss_type="fixed", take_profit_levels=None):
    endpoint = "/orders"
    timestamp = int(time.time() * 1000)
    
    payload = {
        "signal_id": signal_id,
        "exchange": exchange,
        "position_size": position_size,
        "entry_type": entry_type,
        "stop_loss_type": stop_loss_type,
        "timestamp": timestamp
    }
    
    if take_profit_levels:
        payload["take_profit_levels"] = take_profit_levels
        
    payload_str = json.dumps(payload)
    signature = get_signature(payload_str)
    
    headers = {
        "Authorization": f"Bearer {API_KEY}",
        "X-SM-SIGNATURE": signature,
        "Content-Type": "application/json"
    }
    
    response = requests.post(
        f"{BASE_URL}{endpoint}",
        headers=headers,
        data=payload_str
    )
    
    return response.json()

# Example usage
if __name__ == "__main__":
    # Get latest Bitcoin signals with at least 80% confidence
    btc_signals = get_latest_signals(asset="BTC-USDT", confidence=80)
    
    # Place an order based on the first signal
    if btc_signals["signals"]:
        signal = btc_signals["signals"][0]
        order = place_order(
            signal_id=signal["id"],
            exchange="binance",
            position_size="5%",
            take_profit_levels=[
                {"price": signal["take_profit_1"], "percentage": 50},
                {"price": signal["take_profit_2"], "percentage": 50}
            ]
        )
        print(f"Order placed: {order}")
```
</details>

<details>
<summary><strong>Node.js Integration Example</strong></summary>

```javascript
const axios = require('axios');
const crypto = require('crypto');
const WebSocket = require('ws');

const API_KEY = 'your_api_key';
const API_SECRET = 'your_api_secret';
const BASE_URL = 'https://api.signalmagic.ai/v1';

// Generate signature for API authentication
function generateSignature(queryString) {
  return crypto
    .createHmac('sha256', API_SECRET)
    .update(queryString)
    .digest('hex');
}

// Get latest trading signals
async function getLatestSignals(asset = null, confidence = null, limit = 10) {
  const headers = authenticate();
  const url = 'https://api.signalmagic.ai/v1/signals';
  
  const params = new URLSearchParams({
    limit: 10,
    confidence: 80,
    pairs: 'BTC-USDT,ETH-USDT,SOL-USDT'
  });
  
  try {
    const response = await fetch(`${url}?${params}`, { headers });
    if (response.ok) {
      return await response.json();
    } else {
      throw new Error(`API request failed: ${await response.text()}`);
    }
  } catch (error) {
    console.error('Error fetching signals:', error);
    throw error;
  }
}

// Place trading order based on signal
async function placeOrder(signalId, exchange, positionSize, entryType = 'market', 
                          stopLossType = 'fixed', takeProfitLevels = null) {
  const endpoint = '/orders';
  const timestamp = Date.now();
  
  const payload = {
    signal_id: signalId,
    exchange: exchange,
    position_size: positionSize,
    entry_type: entryType,
    stop_loss_type: stopLossType,
    timestamp: timestamp
  };
  
  if (takeProfitLevels) {
    payload.take_profit_levels = takeProfitLevels;
  }
  
  const payloadStr = JSON.stringify(payload);
  const signature = generateSignature(payloadStr);
  
  try {
    const response = await axios.post(`${BASE_URL}${endpoint}`, payload, {
      headers: {
        'Authorization': `Bearer ${API_KEY}`,
        'X-SM-SIGNATURE': signature,
        'Content-Type': 'application/json'
      }
    });
    
    return response.data;
  } catch (error) {
    console.error('Error placing order:', error.response?.data || error.message);
    throw error;
  }
}

// Connect to WebSocket for real-time updates
function connectToSignalStream(onSignal, onPositionUpdate) {
  const timestamp = Date.now();
  const signature = generateSignature(`timestamp=${timestamp}`);
  
  const ws = new WebSocket(`wss://api.signalmagic.ai/v1/ws?timestamp=${timestamp}&signature=${signature}`);
  
  ws.on('open', () => {
    console.log('Connected to SignalMagic WebSocket');
    ws.send(JSON.stringify({
      action: 'authenticate',
      api_key: API_KEY
    }));
  });
  
  ws.on('message', (data) => {
    const message = JSON.parse(data);
    
    switch (message.event) {
      case 'signal':
        onSignal(message.data);
        break;
      case 'position_update':
        onPositionUpdate(message.data);
        break;
      case 'auth_success':
        console.log('Authentication successful');
        break;
      case 'error':
        console.error('WebSocket error:', message.message);
        break;
    }
  });
  
  ws.on('error', (error) => {
    console.error('WebSocket connection error:', error);
  });
  
  ws.on('close', () => {
    console.log('WebSocket connection closed, reconnecting...');
    setTimeout(() => connectToSignalStream(onSignal, onPositionUpdate), 5000);
  });
  
  return ws;
}

// Example usage
async function main() {
  try {
    // Get latest Ethereum signals with at least 85% confidence
    const ethSignals = await getLatestSignals('ETH-USDT', 85);
    console.log('Latest ETH signals:', ethSignals);
    
    // Place an order based on the first signal
    if (ethSignals.signals && ethSignals.signals.length > 0) {
      const signal = ethSignals.signals[0];
      const order = await placeOrder(
        signal.id,
        'kraken',
        '3%',
        'limit',
        'trailing',
        [
          { price: signal.take_profit_1, percentage: 30 },
          { price: signal.take_profit_2, percentage: 40 },
          { price: signal.take_profit_3, percentage: 30 }
        ]
      );
      console.log('Order placed:', order);
    }
    
    // Connect to real-time signal stream
    connectToSignalStream(
      (signal) => console.log('New signal received:', signal),
      (position) => console.log('Position update:', position)
    );
  } catch (error) {
    console.error('Error:', error);
  }
}

main();
```
</details>
PreviousSignal Monitoring DashboardNextMobile Notifications & Trading Education

Last updated 14 days ago

👨‍💻