Skip to content

Trades

Endpoints pour gérer vos trades dans InsighTrades.

Authentification

Toutes les routes supportent deux méthodes d'authentification :

MéthodeHeaderFormat
JWT (session)AuthorizationBearer <jwt_token>
API KeyX-API-Keyik_live_xxx ou ik_test_xxx

API Key via Authorization

Vous pouvez aussi envoyer l'API Key via le header Authorization :

Authorization: Bearer ik_live_xxx

GET /trades

Récupère la liste des trades avec pagination et filtres.

Scope requis

trades:read

Paramètres de requête

ParamètreTypeRequisDescription
pagenumberNuméro de page (défaut: 1)
limitnumberNombre de résultats par page (défaut: 10, max: 100)
profileIdstringFiltrer par profil de trading
statusstringFiltrer par statut: OPEN ou CLOSED
typestringFiltrer par type: long ou short
startDatestringDate de début (ISO 8601)
endDatestringDate de fin (ISO 8601)

Exemple de requête

javascript
const response = await fetch('https://api.insightrades.com/trades?page=1&limit=20&status=CLOSED', {
  headers: {
    'X-API-Key': 'ik_live_xxx'
  }
});

Réponse (200 OK)

json
{
  "data": [
    {
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "symbol": "EUR/USD",
      "type": "long",
      "status": "CLOSED",
      "entryPrice": 1.085,
      "exitPrice": 1.092,
      "quantity": 1.5,
      "entryDate": "2024-01-15T10:30:00Z",
      "exitDate": "2024-01-15T14:30:00Z",
      "pnl": 105.0,
      "stopLoss": 1.08,
      "takeProfit": 1.095,
      "profile": {
        "id": "abc123",
        "name": "Live Account"
      },
      "strategy": {
        "id": "def456",
        "name": "Scalping"
      }
    }
  ],
  "meta": {
    "currentPage": 1,
    "itemsPerPage": 20,
    "totalItems": 150,
    "totalPages": 8,
    "hasNextPage": true,
    "hasPreviousPage": false
  }
}

Erreurs possibles

CodeDescription
401API Key invalide ou expirée
403Scope trades:read manquant
500Erreur serveur interne

GET /trades/stats

Récupère les statistiques de trading agrégées.

Scope requis

stats:read

Paramètres de requête

ParamètreTypeRequisDescription
profileIdstringFiltrer par profil de trading
statusstringFiltrer par statut: OPEN ou CLOSED
typestringFiltrer par type: long ou short
searchstringRechercher par symbole
startDatestringDate de début (ISO 8601)
endDatestringDate de fin (ISO 8601)

Exemple de requête

javascript
const response = await fetch('https://api.insightrades.com/trades/stats?profileId=abc123', {
  headers: {
    'X-API-Key': 'ik_live_xxx'
  }
});

Réponse (200 OK)

json
{
  "totalTrades": 150,
  "openTrades": 12,
  "closedTrades": 138,
  "totalPnL": 15420.50,
  "winRate": 65.22,
  "avgWin": 250.30,
  "avgLoss": 180.40,
  "profitFactor": 2.15,
  "bestTrade": 1250.00,
  "worstTrade": -850.00,
  "grossProfit": 22530.00,
  "grossLoss": 7109.50
}

Champs de réponse

ChampTypeDescription
totalTradesnumberNombre total de trades
openTradesnumberNombre de trades ouverts
closedTradesnumberNombre de trades clôturés
totalPnLnumberProfit/perte total
winRatenumberTaux de réussite (%)
avgWinnumberGain moyen
avgLossnumberPerte moyenne
profitFactornumberFacteur de profit (gains/pertes)
bestTradenumberMeilleur trade
worstTradenumberPire trade
grossProfitnumberGains bruts
grossLossnumberPertes brutes

Erreurs possibles

CodeDescription
401API Key invalide ou expirée
403Scope stats:read manquant
500Erreur serveur interne

POST /trades

Crée un nouveau trade.

Scope requis

trades:write

Corps de la requête

ChampTypeRequisDescription
profileIdstringID du profil de trading
strategyIdstringID de la stratégie utilisée
symbolstringSymbole de l'instrument (ex: EUR/USD)
typestringDirection: long ou short
statusstringStatut: OPEN ou CLOSED
entryDatestringDate d'entrée (ISO 8601)
exitDatestringDate de sortie (ISO 8601)
entryPricenumberPrix d'entrée
exitPricenumberPrix de sortie
quantitynumberTaille de position / lots
stopLossnumberNiveau de stop loss
takeProfitnumberNiveau de take profit
riskRewardRationumberRatio risque/récompense
manualPnlnumberP&L manuel
commissionnumberFrais de commission
swapOrOvernightnumberFrais de swap
instrumentTypestringType: forex, crypto, stocks, etc.
timeframestringTimeframe: M1, M5, H1, D1, etc.
sessionstringSession: London, NewYork, Tokyo, Sydney
tagsstring[]Tags de catégorisation
notesobject[]Notes et commentaires
brokerTradeIdstringID du trade chez le broker

Exemple de requête

javascript
const response = await fetch('https://api.insightrades.com/trades', {
  method: 'POST',
  headers: {
    'X-API-Key': 'ik_live_xxx',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    profileId: '550e8400-e29b-41d4-a716-446655440000',
    symbol: 'EUR/USD',
    type: 'long',
    status: 'CLOSED',
    entryDate: '2024-01-15T10:30:00Z',
    exitDate: '2024-01-15T14:30:00Z',
    entryPrice: 1.085,
    exitPrice: 1.092,
    quantity: 1.5,
    stopLoss: 1.08,
    takeProfit: 1.095,
    tags: ['scalping', 'trend-following']
  })
});

Réponse (201 Created)

json
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "symbol": "EUR/USD",
  "type": "long",
  "status": "CLOSED",
  "entryPrice": 1.085,
  "exitPrice": 1.092,
  "quantity": 1.5,
  "pnl": 105.0,
  "createdAt": "2024-01-15T14:35:00Z"
}

Erreurs possibles

CodeDescription
400Données invalides (validation error)
401API Key invalide ou expirée
403Scope trades:write manquant
404Profile ou Strategy non trouvé
500Erreur serveur interne

POST /trades/bulk

Crée plusieurs trades en une seule requête.

Scope requis

trades:write

Corps de la requête

Un tableau de trades avec les mêmes champs que POST /trades.

Exemple de requête

javascript
const response = await fetch('https://api.insightrades.com/trades/bulk', {
  method: 'POST',
  headers: {
    'X-API-Key': 'ik_live_xxx',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify([
    {
      profileId: '550e8400-e29b-41d4-a716-446655440000',
      symbol: 'EUR/USD',
      type: 'long',
      status: 'CLOSED',
      entryDate: '2024-01-15T10:30:00Z',
      entryPrice: 1.085,
      exitPrice: 1.092,
      quantity: 1.5
    },
    {
      profileId: '550e8400-e29b-41d4-a716-446655440000',
      symbol: 'GBP/USD',
      type: 'short',
      status: 'CLOSED',
      entryDate: '2024-01-15T11:00:00Z',
      entryPrice: 1.265,
      exitPrice: 1.260,
      quantity: 1.0
    }
  ])
});

Réponse (201 Created)

json
{
  "created": 2,
  "trades": [
    { "id": "xxx", "symbol": "EUR/USD" },
    { "id": "yyy", "symbol": "GBP/USD" }
  ]
}

Limites

  • Maximum 100 trades par requête
  • Taille maximale de la requête : 1 MB

Erreurs possibles

CodeDescription
400Données invalides ou limite dépassée
401API Key invalide ou expirée
403Scope trades:write manquant
500Erreur serveur interne

POST /trades/import

Importe des trades depuis un broker (MT4/MT5).

Documentation complète

Voir la documentation détaillée de l'import pour plus d'informations.

Scope requis

trades:import

PUT /trades/:id

Met à jour un trade existant.

Scope requis

trades:write

Paramètres d'URL

ParamètreTypeDescription
idstringID du trade à modifier

Corps de la requête

Mêmes champs que POST /trades, tous optionnels.

Exemple de requête

javascript
const response = await fetch('https://api.insightrades.com/trades/550e8400-e29b-41d4-a716-446655440000', {
  method: 'PUT',
  headers: {
    'X-API-Key': 'ik_live_xxx',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    exitPrice: 1.095,
    exitDate: '2024-01-15T16:00:00Z',
    status: 'CLOSED'
  })
});

Réponse (200 OK)

json
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "symbol": "EUR/USD",
  "status": "CLOSED",
  "exitPrice": 1.095,
  "pnl": 150.0,
  "updatedAt": "2024-01-15T16:05:00Z"
}

Erreurs possibles

CodeDescription
400Données invalides
401API Key invalide ou expirée
403Scope trades:write manquant
404Trade non trouvé
500Erreur serveur interne

DELETE /trades/:id

Supprime un trade.

Scope requis

trades:delete

Paramètres d'URL

ParamètreTypeDescription
idstringID du trade à supprimer

Exemple de requête

javascript
const response = await fetch('https://api.insightrades.com/trades/550e8400-e29b-41d4-a716-446655440000', {
  method: 'DELETE',
  headers: {
    'X-API-Key': 'ik_live_xxx'
  }
});

Réponse (200 OK)

json
{
  "deleted": true,
  "id": "550e8400-e29b-41d4-a716-446655440000"
}

Erreurs possibles

CodeDescription
401API Key invalide ou expirée
403Scope trades:delete manquant
404Trade non trouvé
500Erreur serveur interne

Codes d'erreur communs

json
{
  "statusCode": 401,
  "errorCode": "API_KEY_INVALID",
  "message": "Invalid or expired API Key"
}
json
{
  "statusCode": 403,
  "errorCode": "FORBIDDEN",
  "message": "Insufficient permissions. Missing scopes: trades:read"
}
json
{
  "statusCode": 400,
  "errorCode": "VALIDATION_ERROR",
  "message": ["symbol should not be empty", "entryPrice must be a number"]
}

Documentation de l'API InsighTrades