POST /apiv2/order5m
Cree una orden de alquiler de energy de 5 minutos a través de los pools internos de energy de Netts.
URL del Endpoint
POST https://netts.io/apiv2/order5mEncabezados de Solicitud
| Encabezado | Requerido | Descripción |
|---|---|---|
| Content-Type | Sí | application/json |
| X-API-KEY | Sí | Su clave API del panel de Netts |
| X-Real-IP | Sí | Dirección IP de su lista blanca |
Cuerpo de Solicitud
{
"amount": 65000,
"receiveAddress": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE"
}Parámetros
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
| amount | entero | Sí | Cantidad de Energy a alquilar (mínimo: 61.000, máximo: 650.000) |
| receiveAddress | cadena | Sí | Dirección TRON que recibirá la energy (formato TRC-20) |
Límites de Energy
El endpoint de 5 minutos acepta cantidades de energy de entre 61.000 y 650.000 unidades por orden. Las solicitudes fuera de este rango se rechazarán con HTTP 400.
Información del Proveedor
Las órdenes de energy de 5 minutos se completan exclusivamente a través de los pools internos de energy de Netts. A diferencia del endpoint de 1 hora, no se utilizan proveedores externos.
Disponibilidad y Estrategia de Reintento
Dado que las delegaciones provienen únicamente de pools internos, es posible que haya falta de disponibilidad temporal durante períodos de alta demanda. Si recibe un error 503, reintente la solicitud tras una breve pausa o recurra al endpoint de 1 hora, que tiene acceso a múltiples proveedores externos.
Ejemplos de Solicitudes
cURL
curl -X POST https://netts.io/apiv2/order5m \
-H "Content-Type: application/json" \
-H "X-API-KEY: your_api_key" \
-H "X-Real-IP: your_whitelisted_ip" \
-d '{
"amount": 65000,
"receiveAddress": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE"
}'Python
import requests
url = "https://netts.io/apiv2/order5m"
headers = {
"Content-Type": "application/json",
"X-API-KEY": "your_api_key",
"X-Real-IP": "your_whitelisted_ip"
}
payload = {
"amount": 65000,
"receiveAddress": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE"
}
response = requests.post(url, headers=headers, json=payload)
data = response.json()
if response.status_code == 200:
detail = data.get('detail', {})
order_data = detail.get('data', {})
print(f"Order ID: {order_data.get('orderId')}")
print(f"Transaction Hash: {order_data.get('hash')}")
print(f"Energy Delivered: {order_data.get('energy')}")
print(f"Cost: {order_data.get('paidTRX')} TRX")
print(f"Delegate Address: {order_data.get('delegateAddress')}")
elif response.status_code == 503:
# Pool temporarily unavailable - retry or fallback to 1h
print("Pool busy, retrying in 2 seconds...")
else:
error_detail = data.get('detail', data)
print(f"Error Code: {error_detail.get('code', 'N/A')}")
print(f"Error Message: {error_detail.get('msg', error_detail)}")Respuesta
Respuesta Exitosa (200 OK)
{
"detail": {
"code": 10000,
"msg": "Successful, 1.430 TRX deducted",
"data": {
"orderId": "5Mb4ee11ef86",
"paidTRX": 1.43,
"hash": "3636f97dde244fca17cdc0b2cf7fd1572a9b4c6d8e0f1a3b5c7d9e1f3a5b7c9d",
"delegateAddress": "TNp5gsJhBmZFXgCdgjMgr8pEZ8fHgXUHDq",
"energy": 65050
}
}
}Éxito con Activación de Dirección (200 OK)
Cuando la dirección receptora no ha sido activada en la red TRON, Netts la activa automáticamente. El coste de activación se añade al total:
{
"detail": {
"code": 10000,
"msg": "Successful, 1.430 TRX for energy + 1.100 TRX for address activation",
"data": {
"orderId": "5Mb4ee11ef86",
"paidTRX": 2.53,
"hash": "3636f97dde244fca17cdc0b2cf7fd1572a9b4c6d8e0f1a3b5c7d9e1f3a5b7c9d",
"delegateAddress": "TNp5gsJhBmZFXgCdgjMgr8pEZ8fHgXUHDq",
"energy": 65050,
"activationHash": "bab38070a64b237acc9110ecf5135acc4d6e8f0a2b4c6d8e0f2a4b6c8d0e2f4a"
}
}
}Campos de Respuesta
| Campo | Tipo | Descripción |
|---|---|---|
| detail.code | entero | Siempre 10000 para órdenes exitosas |
| detail.msg | cadena | Mensaje de éxito con el importe deducido |
| detail.data.orderId | cadena | ID unificado de la orden (formato: 5M{id}) |
| detail.data.paidTRX | número | Coste total en TRX (incluye la tarifa de activación si corresponde) |
| detail.data.hash | cadena | Hash de la transacción de delegación |
| detail.data.delegateAddress | cadena | Dirección del pool que delegó la energy |
| detail.data.energy | entero | Cantidad de Energy + margen adicional (normalmente +50) |
| detail.data.activationHash | cadena | Solo presente si se realizó la activación de la dirección |
Respuestas de Error
Cantidad de Energy Inválida (400)
{
"code": 1003,
"msg": "Energy amount must be between 61000 and 650000. Requested: 50000"
}Error de Autenticación (401)
{
"detail": "Invalid API key or IP not in whitelist"
}Saldo Insuficiente (403)
{
"code": 1004,
"msg": "Insufficient funds. Required: 1.43 TRX, Available: 0.50 TRX"
}Servicio No Disponible (503)
{
"code": 5003,
"msg": "Service temporarily unavailable. Energy delegation failed after retries."
}Gestión de Errores 503
Una respuesta 503 significa que los pools internos están temporalmente al límite de su capacidad. Estrategia recomendada:
- Espere 2-3 segundos y reintente la orden de 5 minutos
- Si sigue sin estar disponible, recurra al endpoint de 1 hora, que utiliza múltiples proveedores
Error Interno del Servidor (500)
{
"code": 5000,
"msg": "Internal server error occurred"
}Referencia de Códigos de Error
| Código | Descripción | Estado HTTP |
|---|---|---|
10000 | Éxito | 200 |
10000 | Éxito (respuesta en caché) | 208 |
- | Solicitud duplicada aún en procesamiento | 409 |
1003 | Cantidad de Energy fuera de rango | 400 |
1004 | Saldo insuficiente | 403 |
1005 | Dirección pagadora del usuario no configurada | 400 |
5000 | Error interno del servidor | 500 |
5003 | Servicio de Energy no disponible | 503 |
Límites de Tasa
Se aplican los siguientes límites de tasa a este endpoint (por dirección IP):
| Período | Límite | Descripción |
|---|---|---|
| 1 segundo | 50 solicitudes | Máximo 50 solicitudes por segundo |
Encabezados de Límite de Tasa
RateLimit-Limit: 50
RateLimit-Remaining: 49
RateLimit-Reset: 1
X-RateLimit-Limit-Second: 50
X-RateLimit-Remaining-Second: 49Límite de Tasa Excedido (429)
{
"message": "API rate limit exceeded"
}Idempotencia
La API admite idempotencia para evitar el procesamiento de órdenes duplicadas. Cuando envía múltiples solicitudes idénticas, el sistema garantiza que la orden se procese solo una vez.
Cómo Funciona la Idempotencia
La singularidad de la solicitud se determina mediante una combinación de:
- Marca de tiempo de la solicitud (ventana de 2 segundos)
- Cantidad de Energy
- Dirección del receptor
- Clave API
A cada solicitud se le asigna una ventana de singularidad de 2 segundos. Las solicitudes con parámetros idénticos dentro de esta ventana se tratan como duplicadas.
Proporcionar Su Propia Clave
Puede tomar el control de la idempotencia enviando el encabezado X-Idempotency-Key. Cuando está presente, ese valor por sí solo decide si una solicitud es una repetición, y no se utiliza la combinación automática anterior. Cuando está ausente, nada cambia: el servidor deduce la clave por usted.
Las reglas son las mismas que en /apiv2/order1h:
| Encabezado | X-Idempotency-Key |
| Formato | Exactamente 64 caracteres hexadecimales en minúsculas: un resumen SHA-256 |
| Tiempo de vida | 24 horas a partir de la primera solicitud que contenga esa clave |
| Alcance | Su cuenta. El mismo valor enviado por una cuenta diferente nunca devolverá su resultado |
Una clave con cualquier otra forma (un UUID con guiones, base64, hexadecimal en mayúsculas) se rechaza con 400 antes de que se cree la orden y antes de que se cobre nada:
{
"detail": "Invalid idempotency key format. Must be 64-character hexadecimal string."
}Deduzca la clave a partir de su clave API para que sea única para su cuenta y reproducible en un reintento; el ejemplo práctico se encuentra en la página de 1 hora. Incluya el período de alquiler en el mensaje al que aplique el hash: alquilar la misma dirección durante 5 minutos y durante 1 hora son órdenes diferentes, y reutilizar una clave para ambas devolverá la respuesta de la primera orden para la segunda solicitud.
Realizar Dos Órdenes Idénticas
La misma trampa que en el endpoint horario, con una ventana más amplia. Dos órdenes idénticas (la misma cantidad a la misma dirección) son indistinguibles de un reintento, y solo el momento de llegada las separa.
Sin una clave propia:
| Intervalo entre las dos solicitudes | Qué sucede |
|---|---|
| Dentro de la misma ventana de 2 segundos | La segunda solicitud se toma como una repetición. No se ejecuta: obtiene 208 y la respuesta de la primera orden. No se le cobra nada por ella |
| Con más de dos segundos de diferencia | Dos claves diferentes: ambas órdenes se procesan y ambas se cobran |
Por lo tanto, deje más de dos segundos entre dos órdenes idénticas y lea el código de estado: 208 significa que la orden que acaba de enviar no se ejecutó.
Una pausa es una solución provisional, no definitiva: también separa las solicitudes que nunca tuvo intención de repetir, como un reintento tras un tiempo de espera o un mensaje entregado de nuevo por su cola, y cada una de ellas se convierte en una orden independiente con un cargo independiente. Enviar su propia clave es lo que realmente lo soluciona: un nuevo nonce para una nueva orden, el nonce del primer intento para un reintento. La explicación completa se encuentra en la página de 1 hora.
Códigos de Estado HTTP para Solicitudes Duplicadas
| Código de Estado | Nombre | Descripción |
|---|---|---|
| 200 | OK | Orden procesada con éxito (primera solicitud) |
| 208 | Already Reported | La orden ya fue procesada, devolviendo respuesta en caché |
| 409 | Conflict | La solicitud se está procesando actualmente, no reintente |
Solicitud Duplicada - Ya Procesada (208)
{
"detail": {
"code": 10000,
"msg": "Successful, 1.430 TRX deducted",
"data": {
"hash": "3636f97dde244fca17cdc0b2cf7fd1572a9b4c6d8e0f1a3b5c7d9e1f3a5b7c9d",
"energy": 65050,
"orderId": "5Mb4ee11ef86",
"paidTRX": 1.43,
"delegateAddress": "TNp5gsJhBmZFXgCdgjMgr8pEZ8fHgXUHDq"
}
},
"idempotency": {
"status": "completed",
"cached": true,
"original_created_at": "2026-03-21T08:53:52.498000"
}
}Solicitud Duplicada - Aún en Proceso (409)
{
"success": false,
"error": "duplicate_request_processing",
"message": "This request is currently being processed. Please wait and do not retry.",
"retry_after_seconds": 3
}Mejores Prácticas
- No envíe solicitudes paralelas con los mismos parámetros; espere a cada respuesta
- Gestione las respuestas 409 esperando, no reintentando de inmediato
- Compruebe el campo
idempotency.cachedpara identificar respuestas en caché
Comparación: Órdenes de 5 Minutos frente a 1 Hora
| Característica | Orden de 5 Minutos | Orden de 1 Hora |
|---|---|---|
| Endpoint | /apiv2/order5m | /apiv2/order1h |
| Duración | 5 minutos | 1 hora |
| Rango de Energy | 61.000 - 650.000 | 61.000 - 3.000.000 |
| Proveedores | Solo pools internos de Netts | Pools internos + proveedores externos |
| Precio | Más bajo (tarifa de 5 minutos) | Tarifa por hora estándar |
| Disponibilidad | Puede ser limitada en horas pico | Alta (respaldo de múltiples proveedores) |
| Ideal para | Transacciones pequeñas frecuentes | Entregas grandes o garantizadas |
Cuentas Postpago
Las cuentas con facturación postpago utilizan el mismo endpoint, URL, encabezados y cuerpo de solicitud que todos los demás. La diferencia radica en cómo se paga la orden:
- No se deduce nada de su depósito. Cada orden exitosa se añade al saldo pendiente de su cuenta en la moneda de liquidación acordada en su contrato. Usted la paga mediante factura, de acuerdo con su contrato.
- Su cuenta tiene un límite de crédito. Mientras el importe adeudado se encuentre dentro del límite, las órdenes se aceptan incluso con un depósito de cero.
- Solo se facturan los servicios entregados. Una orden rechazada o no ejecutada no cuesta nada.
- Si la dirección receptora debe activarse, la activación forma parte de la misma orden y se factura como un cargo independiente.
La facturación postpago es habilitada por Netts para una cuenta previa solicitud. Cada respuesta le indica cómo se paga la orden: paymentMode es postpaid o prepaid.
Campos adicionales de solicitud
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
| test | booleano | No | true — calcula solo el precio. No se ordena, entrega ni factura nada |
| freezePrice | booleano | No | true — fija el precio según su contrato durante 60 segundos. No se ordena ni factura nada |
| quoteId | cadena | No | Realiza la orden al precio de una cotización emitida por freezePrice |
| priceCurrency | cadena | No | TRX (predeterminado) o la moneda de su contrato, como en settlement.asset. Para cuentas postpago, los importes en la moneda de su contrato siempre se incluyen |
quoteId no se puede combinar con test ni freezePrice. Cualquier otro campo en el cuerpo de la solicitud será rechazado.
Comprobación de precio (test: true)
{
"amount": 65000,
"receiveAddress": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE",
"test": true
}{
"detail": {
"code": 10010,
"msg": "Test calculation",
"data": {
"amount": 65000,
"unitPriceSun": "19",
"discount": null,
"energyTRX": "1.235000",
"activationTRX": "1.100000",
"wouldCostTRX": "2.335000",
"paidTRX": 0,
"paymentMode": "postpaid",
"activationCheck": "inactive",
"alt": {"USDC": {"energy": "0.409088", "activation": "0.364370", "total": "0.773458"}},
"fxAt": "2026-10-19T07:16:12.548894+00:00"
}
}
}| Campo | Descripción |
|---|---|
| unitPriceSun | Precio por unidad de energy en SUN, incluyendo su descuento personal si tiene uno |
| discount | Su descuento personal (type, value) o null |
| energyTRX / activationTRX / wouldCostTRX | Energy, activación (si la dirección la necesita) y total, en TRX |
| activationCheck | inactive — la dirección será activada y facturada; active — sin activación; unknown — no se pudo comprobar en este momento |
alt.<currency> | Los mismos importes en la moneda de su contrato |
| fxAt | Hora del tipo de cambio utilizado para los importes en la moneda de su contrato |
Cotización de precio fijo (freezePrice: true)
Utilice una cotización para fijar el precio según su contrato antes de ordenar.
- Envíe la orden con
"freezePrice": true. La respuesta tiene el código10011(Quote issued), los mismos campos que una comprobación de precio, másquoteIdyexpiresAt. - En un plazo de 60 segundos, envíe la orden con
"quoteId": "<quoteId>"y la mismaamountyreceiveAddress. - La orden se factura al precio cotizado (el precio según su contrato en el momento de la cotización), incluso si el precio cambia entretanto.
Una cotización se puede utilizar una sola vez y solo para el mismo producto: una cotización de 5 minutos no puede pagar una orden de 1 hora. Una cotización caducada o ya utilizada se rechaza y no se ordena nada.
{
"amount": 65000,
"receiveAddress": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE",
"quoteId": "q_4f540f16a2c94b7f8e3d1a6b5c0e9d72"
}Orden exitosa
{
"detail": {
"code": 10000,
"msg": "Successful, 1.24 TRX service cost, postpaid",
"data": {
"orderId": "5M5f557d2fba",
"paidTRX": 1.235,
"hash": "c1fafd8ef7fb6b7fb8a729120756b26e611f401275cb4f7a04fe2bafd75b13da",
"delegateAddress": "TR3qZsdmkFcvP729Md3PwXzktFQkMoUzjg",
"energy": 65000,
"paymentMode": "postpaid",
"energyTRX": "1.235000",
"activationTRX": "0.000000",
"totalTRX": "1.235000"
}
}
}| Campo | Descripción |
|---|---|
| paidTRX | Coste del servicio en TRX. Para cuentas postpago no se deduce del depósito |
| paymentMode | postpaid |
| energyTRX / activationTRX / totalTRX | Importes exactos, 6 decimales |
| quoteId, alt | Presentes cuando la orden se realizó con una cotización: el ID de cotización y los importes cotizados |
Todos los demás campos son los mismos que para las órdenes prepago.
Límite de crédito alcanzado (402)
{
"detail": {
"code": 1004,
"msg": "Postpaid credit limit reached.",
"paymentMode": "postpaid",
"reason": "limit_reached"
}
}La orden no se ejecuta y no se factura nada. Se aceptarán nuevas órdenes una vez que se registre su pago o se incremente su límite.
Códigos de error postpago
| Código | HTTP | Descripción |
|---|---|---|
10010 | 200 | Resultado de comprobación de precio (test) |
10011 | 200 | Cotización emitida (freezePrice) |
1004 | 402 | Límite de crédito postpago alcanzado |
4100 | 400 | Solicitud inválida |
4101 | 400 | priceCurrency no admitida |
4102 | 400 | quoteId combinado con test o freezePrice |
4103 | 409 | Cotización ya utilizada |
4104 | 409 | Cotización caducada |
4105 | 409 | Clave de idempotencia ya utilizada para una solicitud diferente |
4106 | 404 | Cotización no encontrada |
4107 | 409 | Los parámetros de la orden difieren de la cotización |
4108 | 400 | Formato de quoteId inválido |
4109 | 422 | No disponible para subcuentas |
5032 | 503 | Precio no disponible temporalmente |
5033 | 503 | Tipo de cambio no disponible temporalmente |
5034 | 503 | Facturación no disponible temporalmente — la orden no fue aceptada |
5036 | 503 | Comprobación de crédito no disponible temporalmente — reintente más tarde |
Para todas las respuestas 4xx y 503 anteriores no se ordena nada ni se factura nada.
Notas
- La Energy se entrega al instante tras completarse la orden con éxito (normalmente en 0,5-2 segundos)
- Tiempo de espera de respuesta de la API: Máximo 10 segundos (incluye intentos de reintento internos)
- Activación de dirección: Si la dirección del receptor no está activada, Netts la activa a precio de coste. El coste de activación se cobra solo una vez por dirección
- Duración: Fija de 5 minutos (300 segundos)
- Cantidad mínima de Energy: 61.000 unidades
- Cantidad máxima de Energy: 650.000 unidades por orden
- Margen de Energy: +50 unidades añadidas automáticamente (sin cargo)
- Formato de ID de orden:
5M{id}para seguimiento unificado - Precios: Dinámicos según la hora del día mediante la API de Precios
- Límite de tasa: 50 solicitudes por segundo por dirección IP
- Solo pools internos: Si los pools están a su máxima capacidad, reintente tras una breve pausa o utilice el endpoint de 1 hora como alternativa de respaldo