Trades
Endpoints pour gérer vos trades dans InsighTrades.
Authentification
Toutes les routes supportent deux méthodes d'authentification :
| Méthode | Header | Format |
|---|---|---|
| JWT (session) | Authorization | Bearer <jwt_token> |
| API Key | X-API-Key | ik_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_xxxGET /trades
Récupère la liste des trades avec pagination et filtres.
Scope requis
trades:readParamètres de requête
| Paramètre | Type | Requis | Description |
|---|---|---|---|
page | number | ❌ | Numéro de page (défaut: 1) |
limit | number | ❌ | Nombre de résultats par page (défaut: 10, max: 100) |
profileId | string | ❌ | Filtrer par profil de trading |
status | string | ❌ | Filtrer par statut: OPEN ou CLOSED |
type | string | ❌ | Filtrer par type: long ou short |
startDate | string | ❌ | Date de début (ISO 8601) |
endDate | string | ❌ | Date 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
| Code | Description |
|---|---|
| 401 | API Key invalide ou expirée |
| 403 | Scope trades:read manquant |
| 500 | Erreur serveur interne |
GET /trades/stats
Récupère les statistiques de trading agrégées.
Scope requis
stats:readParamètres de requête
| Paramètre | Type | Requis | Description |
|---|---|---|---|
profileId | string | ❌ | Filtrer par profil de trading |
status | string | ❌ | Filtrer par statut: OPEN ou CLOSED |
type | string | ❌ | Filtrer par type: long ou short |
search | string | ❌ | Rechercher par symbole |
startDate | string | ❌ | Date de début (ISO 8601) |
endDate | string | ❌ | Date 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
| Champ | Type | Description |
|---|---|---|
totalTrades | number | Nombre total de trades |
openTrades | number | Nombre de trades ouverts |
closedTrades | number | Nombre de trades clôturés |
totalPnL | number | Profit/perte total |
winRate | number | Taux de réussite (%) |
avgWin | number | Gain moyen |
avgLoss | number | Perte moyenne |
profitFactor | number | Facteur de profit (gains/pertes) |
bestTrade | number | Meilleur trade |
worstTrade | number | Pire trade |
grossProfit | number | Gains bruts |
grossLoss | number | Pertes brutes |
Erreurs possibles
| Code | Description |
|---|---|
| 401 | API Key invalide ou expirée |
| 403 | Scope stats:read manquant |
| 500 | Erreur serveur interne |
POST /trades
Crée un nouveau trade.
Scope requis
trades:writeCorps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
profileId | string | ✅ | ID du profil de trading |
strategyId | string | ❌ | ID de la stratégie utilisée |
symbol | string | ✅ | Symbole de l'instrument (ex: EUR/USD) |
type | string | ✅ | Direction: long ou short |
status | string | ✅ | Statut: OPEN ou CLOSED |
entryDate | string | ✅ | Date d'entrée (ISO 8601) |
exitDate | string | ❌ | Date de sortie (ISO 8601) |
entryPrice | number | ✅ | Prix d'entrée |
exitPrice | number | ❌ | Prix de sortie |
quantity | number | ✅ | Taille de position / lots |
stopLoss | number | ❌ | Niveau de stop loss |
takeProfit | number | ❌ | Niveau de take profit |
riskRewardRatio | number | ❌ | Ratio risque/récompense |
manualPnl | number | ❌ | P&L manuel |
commission | number | ❌ | Frais de commission |
swapOrOvernight | number | ❌ | Frais de swap |
instrumentType | string | ❌ | Type: forex, crypto, stocks, etc. |
timeframe | string | ❌ | Timeframe: M1, M5, H1, D1, etc. |
session | string | ❌ | Session: London, NewYork, Tokyo, Sydney |
tags | string[] | ❌ | Tags de catégorisation |
notes | object[] | ❌ | Notes et commentaires |
brokerTradeId | string | ❌ | ID 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
| Code | Description |
|---|---|
| 400 | Données invalides (validation error) |
| 401 | API Key invalide ou expirée |
| 403 | Scope trades:write manquant |
| 404 | Profile ou Strategy non trouvé |
| 500 | Erreur serveur interne |
POST /trades/bulk
Crée plusieurs trades en une seule requête.
Scope requis
trades:writeCorps 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
| Code | Description |
|---|---|
| 400 | Données invalides ou limite dépassée |
| 401 | API Key invalide ou expirée |
| 403 | Scope trades:write manquant |
| 500 | Erreur 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:importPUT /trades/:id
Met à jour un trade existant.
Scope requis
trades:writeParamètres d'URL
| Paramètre | Type | Description |
|---|---|---|
id | string | ID 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
| Code | Description |
|---|---|
| 400 | Données invalides |
| 401 | API Key invalide ou expirée |
| 403 | Scope trades:write manquant |
| 404 | Trade non trouvé |
| 500 | Erreur serveur interne |
DELETE /trades/:id
Supprime un trade.
Scope requis
trades:deleteParamètres d'URL
| Paramètre | Type | Description |
|---|---|---|
id | string | ID 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
| Code | Description |
|---|---|
| 401 | API Key invalide ou expirée |
| 403 | Scope trades:delete manquant |
| 404 | Trade non trouvé |
| 500 | Erreur 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"]
}