/positions/{positionId}/historyQué ocurrió con una posición, las más recientes primero: aumentos, cierres parciales y totales, liquidación, cierre forzoso, cambios de margen.
- Los pagos de financiación quedan fuera de este feed.
- Un cierre forzoso lleva consigo el evento de mercado que tiene detrás, que es donde reside el motivo del mismo.
https://api.upscale.tradeParámetros
positionIdstring · uuidobligatorioIdentificador de posición. Su cuenta debe pertenecer al llamador.
00000000-0000-4000-8000-000000000000Ejemplos
curl --request GET 'https://api.upscale.trade/positions/{positionId}/history' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer YOUR_API_KEY'const response = await fetch("https://api.upscale.trade/positions/{positionId}/history", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": "Bearer YOUR_API_KEY"
},
});
console.log(response.status, await response.text());import requests
response = requests.request(
"GET",
"https://api.upscale.trade/positions/{positionId}/history",
headers={"Accept":"application/json","Authorization":"Bearer YOUR_API_KEY"},
timeout=30,
)
print(response.status_code, response.text)Respuestas
No autorizado
La cuenta pertenece a otro usuario (account_access_denied), o la solicitud se autentica con una clave de API mientras api_trading está deshabilitado en la cuenta (api_trading_not_enabled).
No existe ninguna posición con este identificador.
Se superó el límite de velocidad de la clave de API (api_key_rate_limit_exceeded). Retry-After indica cuándo volver; el cuerpo incluye el bucket (read / write), la ventana que se activó, su límite y retryAt.
defaultRespuestaapplication/json
Array de PositionEventResponse
idxstring[]obligatorioIdentificador de la posición. Mismo valor que txId.
Elementos del array · string
string
Ver ejemplo
[
"string"
]txIdstring[]obligatorioIdentificador de la posición. Se mantiene por compatibilidad hacia atrás, siempre igual a idx.
Elementos del array · string
string
Ver ejemplo
[
"string"
]versionnumberobligatorioRevisión de la posición: incrementada por cada evento que se le aplica.
0openedAtstring · date-timeobligatorioCuándo se abrió la posición.
2026-05-01T12:30:00.000ZlastUpdatedAtstring · date-timeobligatorioCuándo se aplicó el último evento a la posición.
2026-05-01T12:30:00.000ZclosedAtstring · date-time · nullableobligatorioCuándo se cerró la posición; null mientras sigue abierta.
2026-05-01T12:30:00.000Ztypestring · enumobligatorioDirección de la posición. Mismo valor que direction.
"long" "short"longstatusstring · enumobligatorioSi la posición sigue abierta, fue cerrada por el trader o fue liquidada.
"opened" "closed" "liquidated"openedmarketstring · uuidobligatorioMercado en el que se mantiene la posición.
- pattern
- ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$
00000000-0000-4000-8000-000000000000traderstring · uuidobligatorioCuenta del trader a la que pertenece la posición.
- pattern
- ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$
00000000-0000-4000-8000-000000000000sizestring · int32obligatorioTamaño de la posición en unidades del activo base, fp9 sin procesar.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000notionalstring · int32obligatorioNocional abierto de la posición en moneda de cotización, fp9 sin procesar — tamaño al precio de entrada.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000fractionstring · int32obligatorioSiempre 0. Se mantiene por compatibilidad hacia atrás.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000marginstring · int32obligatorioMargen que actualmente respalda la posición, fp9 sin procesar. Cambia con pnl, financiación y cambios manuales de margen.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000pnlstring · int32 · nullableobligatorioPnl realizado acumulado a lo largo de cada evento de la posición, fp9 sin procesar.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000fundingstring · int32 · nullableobligatorioFinanciación pagada (negativa) o recibida (positiva) durante la vida de la posición, fp9 en bruto.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000rolloverFeestring · int32obligatorioSiempre 0. Se mantiene por compatibilidad hacia atrás.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000settlementOraclePricestring · int32obligatorioSiempre 1000000000 (1.0). Se mantiene por compatibilidad con versiones anteriores.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000feestring · int32obligatorioComisiones de trading cobradas durante la vida de la posición, fp9 en bruto.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000feeRatestring · int32obligatorioTasa de comisión aplicada a la posición, fp9 fracción en bruto (1000000 = 0.1%).
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000exchangedQuotestring · int32obligatorioImporte de cotización intercambiado por el evento más reciente, fp9 en bruto.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000exchangedBasestring · int32obligatorioImporte base intercambiado por el evento más reciente, fp9 en bruto.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000directionstring · enumobligatorioDirección de la posición.
"long" "short"longeventNamestring · enumobligatorioTipo del evento más reciente aplicado a la posición.
"addMargin" "removeMargin" "closePosition" "increasePosition" "liquidate" "forceClose" "payFunding"addMarginpnlInEventstring · int32obligatorioPnl realizado del evento más reciente, fp9 en bruto.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000rawPnlInEventstring · int32obligatorioPnl realizado del evento más reciente antes del ajuste de 60 segundos, fp9 en bruto. Difiere de pnlInEvent solo cuando se activó el ajuste.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000profitAdjustmentAppliedbooleanobligatorioSi el ajuste de 60 segundos limitó la ganancia del evento más reciente — dentro de un minuto de una apertura o un aumento de la posición, el pnl de la posición no puede crecer por encima de lo que era en ese momento.
trueholdingTimeMsstring[]obligatorioCuánto tiempo se mantuvo la posición antes del cierre más reciente, en milisegundos, contado desde la apertura o el último incremento. Nulo en eventos que no son cierres.
Elementos del array · string
string
Ver ejemplo
[
"string"
]feeInEventstring · int32obligatorioComisión cobrada por el evento más reciente, fp9 en bruto.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000fundingInEventstring · int32obligatorioFinanciación liquidada por el evento más reciente, fp9 en bruto.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000rolloverFeeInEventstring · int32obligatorioSiempre 0. Se mantiene por compatibilidad hacia atrás.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000executionFeeRatestring · int32obligatorioSiempre 0. Se mantiene por compatibilidad hacia atrás.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000executionFeeInEventstring · int32obligatorioSiempre 0. Se mantiene por compatibilidad hacia atrás.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000executionFeestring · int32obligatorioSiempre 0. Se mantiene por compatibilidad hacia atrás.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000timestampstring · date-timeobligatorioMarca de tiempo del evento más reciente. Mismo valor que lastUpdatedAt.
2026-05-01T12:30:00.000ZisOnchainbooleanobligatorioSiempre true. Se mantiene por compatibilidad con versiones anteriores.
trueroestring · int32obligatorioRentabilidad sobre el capital de la posición — pnl realizado sobre el margen aportado, fp9 fracción sin procesar.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000scalpingCoefficientstring · int32obligatorioMultiplicador dinámico de spread que se aplicó a la posición, fp9 sin procesar (1000000000 = 1.0). Por encima de 1 cuando la operación quedó dentro de la ventana de scalping del mercado.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000closeReasonstring[]obligatorioPor qué la plataforma cerró la posición (por ejemplo, weekly_session_risk_close). Nulo para las posiciones cerradas por el trader y para las abiertas.
Elementos del array · string
string
Ver ejemplo
[
"string"
]orderobject · nullableobligatorioOrden que produjo este evento; null para eventos que la plataforma generó por sí misma, como financiación o un cierre forzoso.
Objeto · 35 campos
idstring · uuidobligatorioIdentificador de la orden.
- pattern
- ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$
00000000-0000-4000-8000-000000000000txIdstringobligatorioIdentificador de la orden. Se conserva por compatibilidad con versiones anteriores, siempre igual a id.
stringtraderstring · uuidobligatorioCuenta del trader a la que pertenece la orden.
- pattern
- ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$
00000000-0000-4000-8000-000000000000marketstring · uuidobligatorioMercado en el que se coloca la orden.
- pattern
- ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$
00000000-0000-4000-8000-000000000000statusstring · enumobligatorioEstado del ciclo de vida: active mientras espera, executed una vez ejecutada, canceled cuando es cancelada por el trader o la plataforma, canceled_by_update cuando es reemplazada por una edición, canceled_by_position cuando la posición a la que estaba vinculada desapareció, canceled_by_error cuando falló la ejecución — consulta errorCode.
"active" "canceled" "canceled_by_update" "canceled_by_error" "canceled_by_position" "executed"activetypestring · enumobligatorioTipo de orden. liquidation marca una orden que el propio motor generó.
"market" "limit" "stop" "trailing_stop" "take" "stop_limit" "stop_market" "liquidation"marketdirectionstring · enumobligatorioDirección de la orden.
"long" "short"longtriggerPricestring · int32obligatorioPrecio al que se dispara la orden, fp9 en bruto. 0 cuando la orden no lleva disparador.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000requestedTriggerPricestring · int32 · nullableobligatorioPrecio de activación tal como se solicitó, antes de que el motor lo desplazara hasta la distancia mínima de stop, fp9 en bruto. Nulo cuando el precio solicitado se mantuvo tal cual.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000stopPricestring · int32obligatorioPrecio de activación de una orden stop_market / stop_limit, fp9 en bruto; 0 para cualquier otro tipo.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000limitPricestring · int32obligatorioPrecio al que se coloca la orden una vez activada, fp9 en bruto: el precio stop-limit, recurriendo al precio de activación como alternativa.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000stopTriggerPricestring · int32obligatorioStop-loss asociado a la orden, fp9 en bruto. 0 cuando no hay ninguno asociado.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000takeTriggerPricestring · int32obligatorioTake-profit asociado a la orden, fp9 en bruto. 0 cuando no hay ninguno asociado.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000trailingStopActivationPricestring · int32obligatorioPrecio al que un stop móvil comienza a hacer seguimiento, fp9 sin procesar. 0 cuando hace seguimiento desde la creación.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000trailingStopOffsetstring · int32obligatorioDistancia de seguimiento como un importe absoluto de cotización, fp9 sin procesar. 0 cuando la distancia se establece como porcentaje.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000trailingStopOffsetPercentstring · int32obligatorioDistancia de seguimiento como una fracción del precio, fp9 sin procesar. 0 cuando la distancia es absoluta.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000leveragestring · int32 · nullableobligatorioApalancamiento de la orden, fp9 en bruto. Nulo en órdenes de cierre, que heredan el apalancamiento de la posición.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000indexstringobligatorioIdentificador de la orden. Se conserva por compatibilidad con versiones anteriores, siempre igual a id.
stringpositionIdstring · nullableobligatorioPosición a la que está asociada una orden de cierre. Nulo para órdenes que abren o aumentan una posición.
stringparentOrderIdstring · nullableobligatorioOrden de la que se generó esta: un stop o un take creado a partir de stopTriggerPrice / takeTriggerPrice, o la orden limit en la que se convirtió un stop_limit. Nulo cuando la orden se envió directamente.
stringexpirationstring · date-time · nullableobligatorioSiempre nulo. Se mantiene por compatibilidad con versiones anteriores: las órdenes no expiran por sí solas.
2026-05-01T12:30:00.000Zamountstring · int32obligatorioTamaño de la orden, fp9 en bruto, en la unidad que usa su clase: en una orden de incremento, un importe de cotización — la reserva mientras espera, y lo que realmente gastó una vez ejecutada; en una orden de cierre (stop, take, trailing_stop), el tamaño del activo base que cierra, tal como se solicitó al crearla.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000indexPricestring · int32 · nullableobligatorioPrecio índice al que se ejecutó la orden, fp9 en bruto. Nulo mientras la orden no se haya ejecutado.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000settlementOraclePricestring · int32obligatorioSiempre 1000000000 (1.0). Se mantiene por compatibilidad con versiones anteriores.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000createdAtstring · date-timeobligatorioCuándo se aceptó la orden.
2026-05-01T12:30:00.000Zerrorstring · nullableobligatorioSiempre null. Se mantiene por compatibilidad hacia atrás — utilice errorCode.
stringrealizedPnlstring · int32 · nullableobligatorioPnl realizado por esta orden, fp9 en bruto. Se establece solo en una orden de cierre ejecutada; null mientras está pendiente y en órdenes que abren o aumentan una posición.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000rawRealizedPnlstring · int32 · nullableobligatorioPnl realizado antes del ajuste de 60 segundos, fp9 en bruto. Difiere de realizedPnl solo cuando se activó el ajuste.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000profitAdjustmentAppliedbooleanobligatorioSi el ajuste de 60 segundos limitó la ganancia de esta orden — dentro de un minuto de una apertura o un aumento, el pnl de la posición no puede crecer por encima de lo que era en ese momento.
trueexecutedAfterPausebooleanobligatorioIndica si la orden se ejecutó después de una pausa del mercado. No lo establece el motor actual — siempre false.
truesizeModestring · enumobligatorioCómo se expresó el tamaño al crearse: quote dimensiona la orden por amount, base la dimensiona por baseSize.
"quote" "base"quotebaseSizestring · int32 · nullableobligatorioTamaño de la orden en unidades del activo base, fp9 en bruto. Nulo para órdenes dimensionadas por quote.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000reservedAmountstring · int32 · nullableobligatorioImporte de quote reservado cuando se creó la orden con sizeMode=base, fp9 en bruto. Se mantiene en la reserva original después de la ejecución, mientras que amount se reescribe a lo que se gastó. Nulo para órdenes dimensionadas por quote, donde amount es la reserva.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000errorCodestring · nullableobligatorioPor qué falló la ejecución, establecido junto con el estado canceled_by_error — por ejemplo insufficient_reserve_at_execution, order_below_min_notional, order_exceeds_market_depth o slippage_tolerance. Nulo en caso contrario.
stringreasonstring · enum · nullableobligatorioPor qué la plataforma canceló la orden por sí misma, por ejemplo force_close o weekly_session_risk_close. Nulo para cancelaciones impulsadas por el trader.
"force_close" "stop_accounts_fail" "stop_accounts_freeze" "stop_accounts_promote" "stop_accounts_manual" "weekly_session_risk_close" nullforce_closeVer ejemplo
{
"id": "00000000-0000-4000-8000-000000000000",
"txId": "string",
"trader": "00000000-0000-4000-8000-000000000000",
"market": "00000000-0000-4000-8000-000000000000",
"status": "active",
"type": "market",
"direction": "long",
"triggerPrice": "1000000000",
"requestedTriggerPrice": "1000000000",
"stopPrice": "1000000000",
"limitPrice": "1000000000",
"stopTriggerPrice": "1000000000",
"takeTriggerPrice": "1000000000",
"trailingStopActivationPrice": "1000000000",
"trailingStopOffset": "1000000000",
"trailingStopOffsetPercent": "1000000000",
"leverage": "1000000000",
"index": "string",
"positionId": "string",
"parentOrderId": "string",
"expiration": "2026-05-01T12:30:00.000Z",
"amount": "1000000000",
"indexPrice": "1000000000",
"settlementOraclePrice": "1000000000",
"createdAt": "2026-05-01T12:30:00.000Z",
"error": "string",
"realizedPnl": "1000000000",
"rawRealizedPnl": "1000000000",
"profitAdjustmentApplied": true,
"executedAfterPause": true,
"sizeMode": "quote",
"baseSize": "1000000000",
"reservedAmount": "1000000000",
"errorCode": "string",
"reason": "force_close"
}[
{
"idx": [
"string"
],
"txId": [
"string"
],
"version": 0,
"openedAt": "2026-05-01T12:30:00.000Z",
"lastUpdatedAt": "2026-05-01T12:30:00.000Z",
"closedAt": "2026-05-01T12:30:00.000Z",
"type": "long",
"status": "opened",
"market": "00000000-0000-4000-8000-000000000000",
"trader": "00000000-0000-4000-8000-000000000000",
"size": "1000000000",
"notional": "1000000000",
"fraction": "1000000000",
"margin": "1000000000",
"pnl": "1000000000",
"funding": "1000000000",
"rolloverFee": "1000000000",
"settlementOraclePrice": "1000000000",
"fee": "1000000000",
"feeRate": "1000000000",
"exchangedQuote": "1000000000",
"exchangedBase": "1000000000",
"direction": "long",
"eventName": "addMargin",
"pnlInEvent": "1000000000",
"rawPnlInEvent": "1000000000",
"profitAdjustmentApplied": true,
"holdingTimeMs": [
"string"
],
"feeInEvent": "1000000000",
"fundingInEvent": "1000000000",
"rolloverFeeInEvent": "1000000000",
"executionFeeRate": "1000000000",
"executionFeeInEvent": "1000000000",
"executionFee": "1000000000",
"timestamp": "2026-05-01T12:30:00.000Z",
"isOnchain": true,
"roe": "1000000000",
"scalpingCoefficient": "1000000000",
"closeReason": [
"string"
],
"order": {
"id": "00000000-0000-4000-8000-000000000000",
"txId": "string",
"trader": "00000000-0000-4000-8000-000000000000",
"market": "00000000-0000-4000-8000-000000000000",
"status": "active",
"type": "market",
"direction": "long",
"triggerPrice": "1000000000",
"requestedTriggerPrice": "1000000000",
"stopPrice": "1000000000",
"limitPrice": "1000000000",
"stopTriggerPrice": "1000000000",
"takeTriggerPrice": "1000000000",
"trailingStopActivationPrice": "1000000000",
"trailingStopOffset": "1000000000",
"trailingStopOffsetPercent": "1000000000",
"leverage": "1000000000",
"index": "string",
"positionId": "string",
"parentOrderId": "string",
"expiration": "2026-05-01T12:30:00.000Z",
"amount": "1000000000",
"indexPrice": "1000000000",
"settlementOraclePrice": "1000000000",
"createdAt": "2026-05-01T12:30:00.000Z",
"error": "string",
"realizedPnl": "1000000000",
"rawRealizedPnl": "1000000000",
"profitAdjustmentApplied": true,
"executedAfterPause": true,
"sizeMode": "quote",
"baseSize": "1000000000",
"reservedAmount": "1000000000",
"errorCode": "string",
"reason": "force_close"
}
}
]