📚 Obelisk API - Apprendre

Documentation complète pour utiliser l'API Obelisk et les fonctionnalités avancées

🛡️ Liquidation Protection API

Plans disponibles

Plan Icon Description Coût
basic 🔔 Alerte seulement à 80% du seuil de liquidation Gratuit
standard 🛡️ Ajout automatique de collateral à 85% 0.2%/mois
premium 👑 Fermeture automatique à 90% + garantie remboursement 0.5%/mois

Activer la protection sur une position

// Via l'API JavaScript
PerpsModule.api.enableProtection('pos-123456', 'standard');

// Ou directement
PerpsModule.setPositionProtection('pos-123456', true, 'premium');

Désactiver la protection

// Via l'API
PerpsModule.api.disableProtection('pos-123456');

// Ou directement
PerpsModule.setPositionProtection('pos-123456', false);

Changer de plan

// Upgrade vers Premium
PerpsModule.api.changePlan('pos-123456', 'premium');

// Downgrade vers Basic
PerpsModule.upgradeProtectionPlan('pos-123456', 'basic');

Opérations en masse

// Activer protection sur TOUTES les positions
PerpsModule.api.enableAllProtection('standard');

// Désactiver sur toutes les positions
PerpsModule.api.disableAllProtection();

Obtenir les positions protégées

// Liste des positions avec protection active
const protected = PerpsModule.api.getProtected();
console.log(protected);

// Résultat:
// [{ id: 'pos-123', symbol: 'BTC/USDC', liqProtection: true, liqProtectionPlan: 'standard', ... }]

📊 Trading API

Ouvrir une position

// Position avec protection activée
const result = await PerpsModule.openPosition('BTC/USDC', 'long', 0.01, 10, {
    takeProfit: 100000,
    stopLoss: 90000,
    liqProtection: true,
    liqProtectionPlan: 'standard'
});

console.log(result);
// { success: true, position: {...}, action: 'opened' }

Fermer une position

PerpsModule.closePosition('pos-123456');
// Notification: "Position closed: +$123.45 (15.2% ROE)"

Obtenir toutes les positions

const positions = PerpsModule.api.getPositions();
// ou
const positions = PerpsModule.positions;

Obtenir une position spécifique

const pos = PerpsModule.api.getPosition('pos-123456');

🔌 REST API Backend

API REST disponible sur http://localhost:3001. Permet l'intégration de bots externes et le trading programmatique via le moteur de perps interne.

Endpoints Trading

MéthodeEndpointDescription
POST /api/trade/order Placer un ordre (market/limit)
GET /api/trade/positions Lister les positions ouvertes
GET /api/trade/fees Frais par venue
GET /api/trade/route Smart routing - meilleure venue pour un trade
GET /api/trade/history Historique des trades
GET /api/markets Prix et marchés disponibles (36 coins)
GET /health Santé du serveur

Placer un ordre

// POST /api/trade/order
const res = await fetch('http://localhost:3001/api/trade/order', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
        symbol: 'BTC/USDC',
        side: 'buy',           // 'buy' ou 'sell'
        size: 5,               // Taille en $
        leverage: 2,           // Levier (max 3x pour bots)
        type: 'market',        // 'market' ou 'limit'
        sl: 0,                 // Stop loss (0 = désactivé)
        tp: 0,                 // Take profit (0 = désactivé)
        source: 'mixbot',      // Identifiant du bot (route vers perps interne)
        strategy: 'momentum',  // Nom de la stratégie
    })
});

const data = await res.json();
// { success: true, orderId: "PERP_...", exchange: "obelisk-internal", price: 63057.45 }

Lister les positions

// GET /api/trade/positions
const res = await fetch('http://localhost:3001/api/trade/positions');
const data = await res.json();
// { positions: [{ coin: "BTC", side: "buy", size: 5, entryPrice: 63057, pnl: {...} }] }

Prix des marchés

// GET /api/markets
const res = await fetch('http://localhost:3001/api/markets');
const data = await res.json();
// { markets: [{ pair: "BTC/USDC", price: 97250.50 }, { pair: "ETH/USDC", price: 2650.30 }, ...] }

🔀 Smart Routing

Les ordres avec source: 'mixbot' sont automatiquement routés vers le moteur de perps interne (ObeliskPerps). Les autres ordres utilisent le smart router vers les venues externes (GMX, dYdX, Morpher, etc.) basé sur les frais les plus bas.

🏦 Venue Capital API

Système de capital dédié pour bots externes. Chaque bot a son propre compte avec equity, marge et suivi PnL en temps réel.

Architecture

Le moteur interne ObeliskPerps dispose d'un pool de liquidité de $100K USDC avec 36 coins supportés. Les bots tradent contre cette liquidité avec des prix réels (Binance WebSocket).

ParamètreValeur
Pool de liquidité$100,000 USDC
Coins supportés36 (BTC, ETH, SOL, ARB, OP, AVAX, LINK, ...)
Leverage max bots3x
PrixTemps réel via Binance WebSocket
Frais0.04% taker
Funding rateCalculé toutes les 8h

Endpoints Venue Capital

MéthodeEndpointDescription
GET /api/trade/equity?venue=mixbot Equity, marge disponible, positions, PnL total
GET /api/trade/venue/positions?venue=mixbot Positions ouvertes avec PnL temps réel
POST /api/trade/venue/close Fermer une position venue
POST /api/trade/venue/deposit Déposer du capital
GET /api/trade/venue/stats Statistiques du venue (ROI, trades, fees)

Consulter l'equity

// GET /api/trade/equity?venue=mixbot
const res = await fetch('http://localhost:3001/api/trade/equity?venue=mixbot');
const data = await res.json();

// Réponse:
// {
//   "equity": 5.00,
//   "freeCollateral": 5.00,
//   "positions": [],
//   "totalPnl": 0,
//   "totalFees": 0.002,
//   "totalTrades": 12,
//   "initialCapital": 5,
//   "dailyDrawdown": 0.5
// }

Fermer une position

// POST /api/trade/venue/close
const res = await fetch('http://localhost:3001/api/trade/venue/close', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
        venue: 'mixbot',
        coin: 'BTC',
        side: 'sell',     // Côté inverse pour fermer
        size: 5
    })
});

const data = await res.json();
// { success: true, exchange: "obelisk-internal", price: 97300.50, pnl: 0.23, fee: 0.002 }

Déposer du capital

// POST /api/trade/venue/deposit
const res = await fetch('http://localhost:3001/api/trade/venue/deposit', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
        venue: 'mixbot',
        amount: 10        // Ajouter $10 au capital
    })
});

// { success: true, equity: 15.00 }

Statistiques

// GET /api/trade/venue/stats?venue=mixbot
const res = await fetch('http://localhost:3001/api/trade/venue/stats?venue=mixbot');
const data = await res.json();

// {
//   "id": "mixbot",
//   "name": "MixBot",
//   "equity": 5.23,
//   "initialCapital": 5,
//   "totalPnl": 0.23,
//   "totalFees": 0.04,
//   "totalTrades": 12,
//   "openPositions": 0,
//   "roi": "4.60%"
// }

⚡ Exemple complet: Bot d'intégration

// Exemple: bot qui trade via l'API REST Obelisk
const API = 'http://localhost:3001';

async function botTrade() {
    // 1. Vérifier l'equity
    const equity = await fetch(`${API}/api/trade/equity?venue=mixbot`).then(r => r.json());
    console.log(`Equity: $${equity.equity} | Free: $${equity.freeCollateral}`);

    if (equity.freeCollateral < 3) {
        console.log('Marge insuffisante, skip');
        return;
    }

    // 2. Ouvrir un trade
    const order = await fetch(`${API}/api/trade/order`, {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({
            symbol: 'ETH/USDC', side: 'buy', size: 5,
            leverage: 2, source: 'mixbot', strategy: 'momentum'
        })
    }).then(r => r.json());

    if (order.success) {
        console.log(`Opened ETH LONG @ $${order.price} via ${order.exchange}`);
    }

    // 3. Attendre... puis fermer
    const close = await fetch(`${API}/api/trade/venue/close`, {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({ venue: 'mixbot', coin: 'ETH', side: 'sell', size: 5 })
    }).then(r => r.json());

    console.log(`Closed ETH | PnL: $${close.pnl?.toFixed(2)}`);
}

botTrade();

🛡️ Protections intégrées

ProtectionDescription
Equity minimumBloque les trades si equity < $3
Max positions1 position ouverte par venue (configurable)
Max leverage3x maximum pour les bots
Daily drawdownCoupe le trading si perte > 3% du capital journalier
Anti-race lockEmpêche les ordres simultanés sur le même venue
Marge requiseVérifie que la marge est disponible avant chaque trade

🚀 Products API

Modules disponibles

ModuleDescription
PerpsModuleTrading perpetuals
DCAVaultModuleDollar Cost Average automatique
WhaleTrackerModuleTracker les gros portefeuilles
AirdropHunterModuleTracker les airdrops
CryptoPayrollPaiements B2B/B2C
LiquidationProtectionModuleProtection standalone
SmartYieldRouterModuleAuto-routage yield
NFTCollateralModulePrêts contre NFTs
GasOptimizerModuleOptimisation gas
AutoRebalancerModuleRééquilibrage portfolio

DCA Vault - Créer un plan

DCAVaultModule.createPlan({
    asset: 'BTC',
    amount: 100,        // $100 par exécution
    frequency: 'weekly' // daily, weekly, biweekly, monthly
});

// Exécuter manuellement
DCAVaultModule.executeDCA('dca-123456');

Crypto Payroll - Ajouter un destinataire

CryptoPayroll.addRecipient('company-123', {
    name: 'John Doe',
    wallet: '0x123...',
    salary: 5000,
    type: 'b2c',           // b2b ou b2c
    frequency: 'weekly',   // daily, weekly, biweekly, monthly
    paymentCurrency: 'USDC'
});

📡 Events

Écouter les changements de protection

window.addEventListener('obelisk:protection-changed', (e) => {
    console.log('Protection changed:', e.detail);
    // { positionId, enabled, plan, position }
});

Écouter les nouvelles positions

// Observer les changements dans PerpsModule.positions
const observer = setInterval(() => {
    const positions = PerpsModule.positions;
    // Votre logique ici
}, 1000);

💡 Exemples pratiques

🤖 Bot: Protéger automatiquement toutes les nouvelles positions

// Surveiller et protéger automatiquement
let lastCount = PerpsModule.positions.length;

setInterval(() => {
    const currentCount = PerpsModule.positions.length;

    if (currentCount > lastCount) {
        // Nouvelle position détectée
        const newPos = PerpsModule.positions[PerpsModule.positions.length - 1];

        if (!newPos.liqProtection) {
            PerpsModule.setPositionProtection(newPos.id, true, 'standard');
            console.log(`🛡️ Auto-protected: ${newPos.symbol}`);
        }
    }

    lastCount = currentCount;
}, 1000);

📊 Script: Rapport des positions protégées

function generateProtectionReport() {
    const positions = PerpsModule.positions;
    const protected = positions.filter(p => p.liqProtection);
    const unprotected = positions.filter(p => !p.liqProtection);

    console.log('=== PROTECTION REPORT ===');
    console.log(`Total positions: ${positions.length}`);
    console.log(`Protected: ${protected.length}`);
    console.log(`Unprotected: ${unprotected.length}`);

    console.log('\n📋 Protected positions:');
    protected.forEach(p => {
        console.log(`  ${p.liqProtectionPlan === 'basic' ? '🔔' : p.liqProtectionPlan === 'standard' ? '🛡️' : '👑'} ${p.symbol} - ${p.liqProtectionPlan}`);
    });

    if (unprotected.length > 0) {
        console.log('\n⚠️ Unprotected positions:');
        unprotected.forEach(p => {
            console.log(`  ❌ ${p.symbol} - Liq: $${p.liquidationPrice.toFixed(2)}`);
        });
    }
}

generateProtectionReport();

🔄 Integration externe via fetch

// Si vous avez un serveur backend, exposez l'API

// Côté client - Envoyer l'état au backend
async function syncToBackend() {
    const data = {
        positions: PerpsModule.positions,
        protected: PerpsModule.api.getProtected()
    };

    await fetch('https://your-api.com/sync', {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify(data)
    });
}

// Webhook sur changement de protection
window.addEventListener('obelisk:protection-changed', async (e) => {
    await fetch('https://your-api.com/webhook/protection', {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify(e.detail)
    });
});

🔌 curl - Tester l'API backend rapidement

# Vérifier la santé du serveur
curl http://localhost:3001/health

# Equity MixBot
curl http://localhost:3001/api/trade/equity?venue=mixbot

# Positions ouvertes
curl http://localhost:3001/api/trade/venue/positions?venue=mixbot

# Prix des marchés
curl http://localhost:3001/api/markets

# Ouvrir un trade BTC LONG $5 x2
curl -X POST http://localhost:3001/api/trade/order \
  -H "Content-Type: application/json" \
  -d '{"symbol":"BTC/USDC","side":"buy","size":5,"leverage":2,"source":"mixbot","strategy":"test"}'

# Fermer le trade
curl -X POST http://localhost:3001/api/trade/venue/close \
  -H "Content-Type: application/json" \
  -d '{"venue":"mixbot","coin":"BTC","side":"sell","size":5}'

# Stats du venue
curl http://localhost:3001/api/trade/venue/stats?venue=mixbot

🚀 Prêt à commencer?

Ouvrez la console du navigateur (F12) et testez les commandes!

🚀 Ouvrir l'App 📚 Documentation 🚀 Innovations