/ordersColoca una orden y la devuelve tal como la almacenó el motor de trading. Las órdenes de incremento (market, limit, stop_market, stop_limit) abren o amplían una posición;
las órdenes de cierre (stop, take, trailing_stop) se vinculan a una posición existente mediante positionId.
amount se lee en una unidad diferente por cada uno de los dos: en una orden de aumento es un importe de cotización reservado del saldo libre, en una orden de cierre
es el tamaño del activo base de la posición a cerrar, sin reservar nada. El resto de los campos de tamaño (expectedAmount, sizeMode,
baseSize, leverage) pertenecen solo a las órdenes de aumento.
Más allá del esquema a nivel de campo, la solicitud se verifica para:
- Forma para el tipo. Cada rechazo aquí es un
400cuyo código nombra la combinación de campos en falta:- tamaño —
amount_not_positive,base_size_required,base_size_negative,base_size_not_allowed; - apalancamiento —
leverage_required,leverage_negative; - precio de activación —
trigger_price_required,trigger_price_negative; - stop-loss / take-profit adjuntos a una orden de incremento —
stop_trigger_price_negative,take_trigger_price_negative,stop_trigger_price_gt_trigger_price,stop_trigger_price_lt_trigger_price,take_trigger_price_gt_trigger_price,take_trigger_price_lt_trigger_price; - precio de stop-limit —
stop_limit_price_required,stop_limit_price_negative,stop_limit_price_gt_trigger_price,stop_limit_price_lt_trigger_price; - stop móvil —
trailing_stop_activation_price_negative,trailing_stop_offset_required,trailing_stop_offset_conflict,trailing_stop_offset_negative,trailing_stop_offset_percent_negative,trailing_stop_offset_percent_gte_one; trailing_stop_offset_too_large— un desplazamiento de seguimiento LONG absoluto produciría un precio de activación cero o negativo;- órdenes de cierre —
position_id_required.
- tamaño —
- Apalancamiento de una orden de incremento. Debe mantenerse dentro de los límites del mercado: no por debajo del mínimo del mercado ni por encima del máximo de la fase,
con
invalid_leverage(leveragemásminLeverageomaxLeverageen el cuerpo). - Cuenta. Debe pertenecer al llamador y estar en un estado de trading; las órdenes de incremento se rechazan además mientras la cuenta está bloqueada por el límite de capital gestionado,
y necesitan
amountdisponible como saldo libre. - Mercado. Debe estar abierto y dentro de la categoría en la que la cuenta puede operar (cripto o RWA). Un mercado de solo cierre no acepta nada más que una orden
takecreada sin un precio de activación. - Posición, cuando se proporciona
positionId: debe existir (position_not_found), estar abierta, estar en la misma cuenta, pertenecer al mismo mercado y tener la misma dirección que la orden (position_not_available). - Precio de activación, contra el precio de mercado actual y — para
stop/take— contra el precio de liquidación de la posición (trigger_price_gt_current,trigger_price_lt_current,trigger_price_gt_liquidation,trigger_price_lt_liquidation). Una ordenmarketcon un stop-loss / take-profit adjunto se comprueba contra el precio de liquidación que tendría su posición después de la ejecución:market_price_unavailablecuando no hay un precio actual contra el que comprobar,order_validation_invariantcuando faltan los campos de tamaño necesarios para esa proyección. - Nocional de una orden de aumento.
(amount − fee) × leveragedebe ajustarse al nocional abierto máximo que el mercado permite en esa dirección (order_exceeds_max_open_notional).
Una orden diferida no se ejecuta aquí, por lo que aún puede fallar cuando su activador se dispare más tarde: entonces termina con estado canceled_by_error y un
errorCode (insufficient_reserve_at_execution, order_below_min_notional, order_exceeds_market_depth, order_exceeds_max_open_notional,
order_exceeds_max_price_impact, order_zero_size_at_execution, slippage_tolerance, market_close_only_at_execution), y su reserva se libera.
Una orden de incremento también se cancela con order_exceeds_max_price_impact cuando su impacto en el precio sin el spread estático supera el
maxPriceImpact del mercado (0 significa sin límite).
Envía un encabezado x-idempotency-key para que la llamada sea segura frente a repeticiones: dentro de la ventana de repetición indicada en ese encabezado, la misma clave en la misma ruta reproduce la respuesta almacenada (marcada con X-Idempotency-Cached: true y X-Idempotency-Timestamp) en lugar de actuar de nuevo, y una segunda llamada que llegue mientras la primera aún se está ejecutando recibe 409 (idempotency_key_in_flight).
https://api.upscale.tradeParámetros
x-idempotency-keystringopcionalClave de idempotencia — cualquier cadena opaca, un uuid v4 funciona bien. Repetir la llamada con la misma clave en esta ruta dentro de 1 hora reproduce la respuesta almacenada en lugar de actuar de nuevo; una reproducción incluye X-Idempotency-Cached: true y X-Idempotency-Timestamp. Omite el encabezado para optar por no participar.
9f1c2b7e-5a3d-4f61-9b0e-2c7d4a8e1f35Cuerpo de la solicitud · obligatorio
accountIdstring · uuidobligatorioTrader account the order is placed on. Must belong to the caller.
- 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-000000000000marketIdstring · uuidobligatorioMarket the order is placed on, as returned by GET /v2/markets.
- 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-000000000000typestring · enumobligatorioOrder type. Increase (position-opening) types: market, limit, stop_market, stop_limit. Close types, attached to an existing position: stop, take, trailing_stop. liquidation is raised by the platform itself and add_margin / remove_margin are legacy — none of the three is accepted here.
"market" "limit" "stop" "trailing_stop" "take" "stop_limit" "stop_market"marketdirectionstring · enumobligatorioOrder direction. For a close order it must match the direction of the position it is attached to.
"long" "short"longamountstring · fp9obligatorioWhat the order is sized by, fp9 raw — the unit depends on the order class. On an increase order (market, limit, stop_market, stop_limit) it is a quote amount reserved from the free balance (margin, fee, spread and buffer): the account must hold at least this much, and the reserve is released when the order is cancelled. On a close order (stop, take, trailing_stop) it is the base asset size of the position to close and nothing is reserved; a size larger than the position holds closes it in full.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
100000000000Campos opcionales: 12
positionIdstring · uuid · nullableopcionalPosition a close order (stop, take, trailing_stop) is attached to. Required for those types, ignored for increase orders.
- 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-000000000000expectedAmountstring · fp9 · nullableopcionalSlippage tolerance for increase orders: the position size the caller expects for amount, fp9 raw. Execution outside the tolerance fails with slippage_tolerance. Omitted or 0 — no tolerance check. Not applicable to close orders.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
0leveragestring · fp9 · nullableopcionalLeverage, fp9 raw (10000000000 = 10x). Required for increase orders and must be within the leverage bounds of the market.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
10000000000triggerPricestring · fp9 · nullableopcionalPrice at which the order fires, fp9 raw. Required for limit, stop, take, stop_market and stop_limit, and ignored for market. stop needs a positive price. take with 0 closes amount of the position at market right away; it is the only order a close-only market accepts.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
65000000000000stopTriggerPricestring · fp9 · nullableopcionalStop-loss attached to an increase order, fp9 raw. Must sit below the entry trigger price for long and above it for short.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000takeTriggerPricestring · fp9 · nullableopcionalTake-profit attached to an increase order, fp9 raw. Must sit above the entry trigger price for long and below it for short.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000trailingStopActivationPricestring · fp9 · nullableopcionalPrice at which a trailing_stop starts trailing, fp9 raw. Omitted — the order trails from the moment it is created.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000trailingStopOffsetstring · fp9 · nullableopcionalTrailing distance as an absolute quote amount, fp9 raw. Exactly one of trailingStopOffset / trailingStopOffsetPercent is required.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000trailingStopOffsetPercentstring · fp9 · nullableopcionalTrailing distance as a price multiplier, fp9 raw: one minus the percent, so 5% is 950000000. The stop trails at the best price × multiplier for long and at the best price × (2 − multiplier) for short. Strictly below 1000000000. Exactly one of trailingStopOffset / trailingStopOffsetPercent is required.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
950000000stopLimitPricestring · fp9 · nullableopcionalLimit price a stop_limit order is placed at once its trigger fires, fp9 raw. Required for that type; must be at or below the trigger price for long and at or above it for short.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000sizeModestring · enumopcionalHow the size of an increase order is expressed: quote (default) sizes it by amount, base sizes it by baseSize while amount stays the reserve. Increase orders only — a close order is always sized by amount in base asset units.
"quote" "base"quotebaseSizestring · fp9 · nullableopcionalOrder size in base asset units, fp9 raw. Required when sizeMode is base and rejected otherwise, and meaningful for increase orders only.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000{
"accountId": "00000000-0000-4000-8000-000000000000",
"marketId": "00000000-0000-4000-8000-000000000000",
"type": "market",
"direction": "long",
"amount": "100000000000"
}Ejemplos
curl --request POST 'https://api.upscale.trade/orders' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data-raw '{
"accountId": "00000000-0000-4000-8000-000000000000",
"marketId": "00000000-0000-4000-8000-000000000000",
"type": "market",
"direction": "long",
"amount": "100000000000"
}'const response = await fetch("https://api.upscale.trade/orders", {
method: "POST",
headers: {
"Accept": "application/json",
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
},
body: "{\n \"accountId\": \"00000000-0000-4000-8000-000000000000\",\n \"marketId\": \"00000000-0000-4000-8000-000000000000\",\n \"type\": \"market\",\n \"direction\": \"long\",\n \"amount\": \"100000000000\"\n}",
});
console.log(response.status, await response.text());import requests
response = requests.request(
"POST",
"https://api.upscale.trade/orders",
headers={"Accept":"application/json","Authorization":"Bearer YOUR_API_KEY","Content-Type":"application/json"},
data="{\n \"accountId\": \"00000000-0000-4000-8000-000000000000\",\n \"marketId\": \"00000000-0000-4000-8000-000000000000\",\n \"type\": \"market\",\n \"direction\": \"long\",\n \"amount\": \"100000000000\"\n}",
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). El trading en la cuenta ha terminado en su estado actual (challenge_closed), o la cuenta está bloqueada por el límite de capital gestionado (funded_limit_trading_locked). El mercado está en pausa (market_paused) o solo acepta órdenes de cierre (market_close_only).
No existe tal cuenta, mercado o posición.
Otra llamada con la misma x-idempotency-key sigue en ejecución (idempotency_key_in_flight). Reintenta cuando haya terminado.
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
idstring · uuidobligatorioOrder identifier.
- 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 · uuidobligatorioTrader account the order belongs to.
- 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 · uuidobligatorioMarket the order is placed on.
- 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 · enumobligatorioLifecycle state: active while it waits, executed once filled, canceled when cancelled by the trader or the platform, canceled_by_update when replaced by an edit, canceled_by_position when the position it was attached to went away, canceled_by_error when execution failed — see errorCode.
"active" "canceled" "canceled_by_update" "canceled_by_error" "canceled_by_position" "executed"activetypestring · enumobligatorioOrder type. liquidation marks an order the engine raised itself.
"market" "limit" "stop" "trailing_stop" "take" "stop_limit" "stop_market" "liquidation"marketdirectionstring · enumobligatorioOrder direction.
"long" "short"longtriggerPricestring · fp9obligatorioPrice at which the order fires, fp9 raw. 0 when the order carries no trigger.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000requestedTriggerPricestring · fp9 · nullableobligatorioTrigger price as requested, before the engine pushed it out to the minimum stop distance, fp9 raw. Null when the requested price was kept as is.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000stopPricestring · fp9obligatorioTrigger price of a stop_market / stop_limit order, fp9 raw; 0 for every other type.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000limitPricestring · fp9obligatorioPrice the order is placed at once triggered, fp9 raw: the stop-limit price, falling back to the trigger price.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000stopTriggerPricestring · fp9obligatorioStop-loss attached to the order, fp9 raw. 0 when none is attached.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000takeTriggerPricestring · fp9obligatorioTake-profit attached to the order, fp9 raw. 0 when none is attached.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000trailingStopActivationPricestring · fp9obligatorioPrice at which a trailing stop starts trailing, fp9 raw. 0 when it trails from creation.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000trailingStopOffsetstring · fp9obligatorioTrailing distance as an absolute quote amount, fp9 raw. 0 when the distance is set as a percent.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000trailingStopOffsetPercentstring · fp9obligatorioTrailing distance as a price multiplier, fp9 raw: one minus the percent, so 5% is 950000000. 0 when the distance is absolute.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000leveragestring · fp9 · nullableobligatorioLeverage of the order, fp9 raw. Null on close orders, which inherit the leverage of the position.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000positionIdstring · nullableobligatorioPosition a close order is attached to. Null for orders that open or grow a position.
stringparentOrderIdstring · nullableobligatorioOrder this one was spawned from: a stop or take created out of stopTriggerPrice / takeTriggerPrice, or the limit order a stop_limit turned into. Null when the order was submitted directly.
stringamountstring · fp9obligatorioSize of the order, fp9 raw, in the unit its class uses: on an increase order a quote amount — the reserve while it waits, and what it actually spent once executed; on a close order (stop, take, trailing_stop) the base asset size it closes, as requested at creation.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000indexPricestring · fp9 · nullableobligatorioIndex price the order executed at, fp9 raw. Null while the order has not executed.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000recentVolumestring · fp9 · nullableobligatorioVolume of the previous opens and increases on the same account, market and direction that was still counted in the price impact of this order when it executed, USD fp9 raw. The recovery window is configurable, 60 seconds by default. Fixed at execution. Null for orders that have not executed, close orders and markets without dynamic price impact.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000priceImpactstring · fp9 · nullableobligatorioPrice impact applied to this open or increase, excluding the static spread, as a fraction fp9 raw (10000000 = 1%). Includes the recent volume in recentVolume. Fixed at execution. Null for orders that have not executed, close orders and markets without dynamic price impact.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000createdAtstring · date-timeobligatorioWhen the order was accepted.
2026-05-01T12:30:00.000ZrealizedPnlstring · fp9 · nullableobligatorioPnl realised by this order, fp9 raw. Set only on an executed close order; null while pending and on orders that open or grow a position.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000rawRealizedPnlstring · fp9 · nullableobligatorioRealised pnl before the 60-second adjustment, fp9 raw. Differs from realizedPnl only when the adjustment fired.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000profitAdjustmentAppliedbooleanobligatorioWhether the 60-second adjustment capped the profit of this order — inside a minute of an open or increase the position pnl cannot grow above what it was at that moment.
truesizeModestring · enumobligatorioHow the size was expressed on creation: quote sizes the order by amount, base sizes it by baseSize.
"quote" "base"quotebaseSizestring · fp9 · nullableobligatorioOrder size in base asset units, fp9 raw. Null for quote-sized orders.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000reservedAmountstring · fp9 · nullableobligatorioQuote amount reserved when the order with sizeMode=base was created, fp9 raw. Stays at the original reserve after execution, while amount is rewritten to what was spent. Null for quote-sized orders, where amount is the reserve.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000errorCodestring · nullableobligatorioWhy execution failed, set together with status canceled_by_error — for example insufficient_reserve_at_execution, order_below_min_notional, order_exceeds_market_depth or slippage_tolerance. Null otherwise.
stringreasonstring · enum · nullableobligatorioWhy the platform cancelled the order itself, for example force_close or weekly_session_risk_close. Null for trader-driven cancellations.
"force_close" "stop_accounts_fail" "stop_accounts_freeze" "stop_accounts_promote" "stop_accounts_manual" "weekly_session_risk_close"force_closevpiobject · nullableobligatorioVPI parameters of the market at the moment the order executed. Null while the order has not executed.
Objeto · 5 campos
spreadstring · fp9obligatorioSpread charged on top of the index price, fp9 raw fraction.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000marketDepthLongstringobligatorioDepth on the long side, in whole USD — not fp9.
- pattern
- ^-?[0-9]+(\.[0-9]+)?$
45604631.000000000marketDepthShortstringobligatorioDepth on the short side, in whole USD — not fp9.
- pattern
- ^-?[0-9]+(\.[0-9]+)?$
38744214.000000000coefficientLongstring · fp9obligatorioPrice-impact coefficient applied to long orders, fp9 raw.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000coefficientShortstring · fp9obligatorioPrice-impact coefficient applied to short orders, fp9 raw.
- pattern
- ^(?:-?[1-9][0-9]*|0)$
1000000000Ver ejemplo
{
"spread": "1000000000",
"marketDepthLong": "45604631.000000000",
"marketDepthShort": "38744214.000000000",
"coefficientLong": "1000000000",
"coefficientShort": "1000000000"
}{
"id": "00000000-0000-4000-8000-000000000000",
"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",
"positionId": "string",
"parentOrderId": "string",
"amount": "1000000000",
"indexPrice": "1000000000",
"recentVolume": "1000000000",
"priceImpact": "1000000000",
"createdAt": "2026-05-01T12:30:00.000Z",
"realizedPnl": "1000000000",
"rawRealizedPnl": "1000000000",
"profitAdjustmentApplied": true,
"sizeMode": "quote",
"baseSize": "1000000000",
"reservedAmount": "1000000000",
"errorCode": "string",
"reason": "force_close",
"vpi": {
"spread": "1000000000",
"marketDepthLong": "45604631.000000000",
"marketDepthShort": "38744214.000000000",
"coefficientLong": "1000000000",
"coefficientShort": "1000000000"
}
}