API de Estado de Tiempo (Time Status API)
Obtenga información de estado para direcciones en Host Mode — todas las direcciones de su cuenta o una sola dirección.
Existen dos endpoints:
- POST /apiv2/time/status — estado de todas sus direcciones (con paginación opcional y resumen a nivel de cuenta).
- GET /apiv2/time/status/{address} — estado de una dirección específica.
POST /apiv2/time/status
URL del endpoint
POST https://netts.io/apiv2/time/statusAutenticación
Proporcione su clave de API en el cuerpo de la solicitud (api_key) o en el encabezado X-API-KEY. La IP de la solicitud debe estar en la lista blanca configurada para su clave de API.
Cuerpo de la solicitud
{
"api_key": "your_api_key",
"page": 1,
"page_size": 50
}| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
| api_key | string | Sí | Clave de API (o encabezado X-API-KEY). |
| page | integer | No | Número de página, ≥ 1. Requiere page_size. |
| page_size | integer | No | Direcciones por página, 1–100. Requiere page. |
Paginación: si se proporcionan tanto page como page_size, los resultados se paginan y se incluye un objeto pagination. Sin ellos, se devuelven todas las direcciones (hasta 1000), ordenadas por fecha de creación (las más recientes primero).
Solicitudes de ejemplo
cURL (todas las direcciones):
curl -X POST https://netts.io/apiv2/time/status \
-H "Content-Type: application/json" \
-d '{ "api_key": "YOUR_API_KEY_HERE" }'cURL (paginado):
curl -X POST https://netts.io/apiv2/time/status \
-H "Content-Type: application/json" \
-d '{ "api_key": "YOUR_API_KEY_HERE", "page": 1, "page_size": 50 }'Python:
import requests
resp = requests.post(
"https://netts.io/apiv2/time/status",
json={"api_key": "YOUR_API_KEY_HERE"}, # add "page"/"page_size" to paginate
timeout=30,
)
result = resp.json()
if result["code"] == 0:
for a in result["data"]["addresses"]:
# cycles_remaining is None in infinity mode — no limit to count down
left = "unlimited" if a["cycles_remaining"] is None else f"{a['cycles_remaining']} left"
print(a["address"], a["mode"], a["status"], left,
f"spent {a['total_spent']} TRX")
else:
print("Error:", result["msg"])Node.js:
const axios = require('axios');
axios.post('https://netts.io/apiv2/time/status', { api_key: 'YOUR_API_KEY_HERE' })
.then(({ data: result }) => {
if (result.code === 0) {
result.data.addresses.forEach(a => {
// cycles_remaining is null in infinity mode — no limit to count down
const left = a.cycles_remaining === null ? 'unlimited' : `${a.cycles_remaining} left`;
console.log(a.address, a.mode, a.status, left, `spent ${a.total_spent} TRX`);
});
} else {
console.error('Error:', result.msg);
}
})
.catch(err => console.error('Request failed:', err.response?.data || err.message));Respuesta
{
"code": 0,
"msg": "Status retrieved successfully",
"data": {
"summary": {
"total_addresses": 3,
"active_addresses": 2,
"infinity_mode_count": 1,
"total_cycles_ordered": 25,
"total_open_orders": 3
},
"order_statistics": {
"total_orders": 12,
"open_orders": 3,
"closed_orders": 9,
"total_cycles_in_open_orders": 25,
"total_delegations": 340,
"total_amount_spent": 1502.4471
},
"addresses": [
{
"address": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE",
"status": "active",
"mode": "normal",
"cycles_ordered": 25,
"cycle_set": 25,
"cycles_completed": 10,
"cycles_remaining": 15,
"cycles_total_lifetime": 214,
"current_cycle_no": 3,
"open_orders": 1,
"total_spent": 962.1184,
"bandwidth_delegated": true,
"created_at": "2026-07-08T12:00:00.000000",
"updated_at": "2026-07-09T10:00:00.000000"
},
{
"address": "TYn8Y3khEsLJW2ChVWFMSMeRDow6KcbMTF",
"status": "active",
"mode": "infinity",
"cycles_ordered": null,
"cycle_set": 0,
"cycles_completed": 83,
"cycles_remaining": null,
"cycles_total_lifetime": 115,
"current_cycle_no": 5,
"open_orders": 1,
"total_spent": 519.1234,
"bandwidth_delegated": true,
"created_at": "2026-07-08T08:00:00.000000",
"updated_at": "2026-07-09T09:30:00.000000"
}
],
"timestamp": "2026-07-09T12:34:50.123456"
}
}Con paginación, data también contiene:
"pagination": {
"page": 1,
"page_size": 50,
"total_items": 150,
"total_pages": 3,
"has_next": true,
"has_prev": false
}Campos de summary
| Campo | Descripción |
|---|---|
| total_addresses | Número de direcciones en su cuenta |
| active_addresses | Direcciones actualmente activas |
| infinity_mode_count | Direcciones activas ejecutándose en infinity mode |
| total_cycles_ordered | Suma de ciclos ordenados en órdenes abiertas (se excluyen órdenes infinitas) |
| total_open_orders | Número de órdenes abiertas en todas las direcciones |
Campos de order_statistics
| Campo | Descripción |
|---|---|
| total_orders | Todas las órdenes creadas históricamente |
| open_orders | Órdenes actualmente abiertas |
| closed_orders | Órdenes cerradas |
| total_cycles_in_open_orders | Ciclos en órdenes abiertas (infinity excluido) |
| total_delegations | Delegaciones realizadas efectivamente en todas sus direcciones |
| total_amount_spent | Cobrado efectivamente, en TRX — la suma realmente descontada de su saldo |
Campos del objeto Address
| Campo | Tipo | Descripción |
|---|---|---|
| address | string | Dirección TRON |
| status | string | "active" o "inactive" |
| mode | string | "normal", "infinity", u "off" (cuando está inactiva) |
| cycles_ordered | integer | null | Ciclos ordenados en órdenes abiertas. null en infinity mode |
| cycle_set | integer | Valor de cycle_set almacenado para la dirección |
| cycles_completed | integer | Ciclos utilizados desde la última vez que se inició la dirección. Se reinicia cuando detiene el modo o se agotan los ciclos ordenados |
| cycles_remaining | integer | null | cycles_ordered − cycles_completed. null en infinity mode |
| cycles_total_lifetime | integer | Todas las delegaciones para esta dirección a lo largo de todo su historial. Nunca se reinicia |
| current_cycle_no | integer | null | Posición de la delegación actual desde la última vez que se inició la dirección. null cuando no hay ninguna delegación activa |
| open_orders | integer | Número de órdenes abiertas para la dirección |
| total_spent | number | Cobrado efectivamente para esta dirección, en TRX |
| bandwidth_delegated | boolean | Indica si el ancho de banda está actualmente delegado. El ancho de banda es gratuito y está incluido en el precio del ciclo |
| created_at | string | Marca de tiempo ISO de cuando fue añadida |
| updated_at | string | Marca de tiempo ISO de la última actualización |
Infinity mode.
cycles_orderedycycles_remainingsonnull, no0— no hay límite para realizar una cuenta regresiva. Tratenullcomo "ilimitado" y no lo interprete como "no quedan ciclos".cycles_completedsigue reportando un número real.
Tres contadores de ciclos, tres significados.
cycles_completedcuenta únicamente desde la última vez que se inició la dirección,cycles_total_lifetimecuenta todo su historial ycurrent_cycle_noes la posición de la delegación actual. Es normal que difieran; para una misma dirección puede ver83,115y5al mismo tiempo.
Errores
Todos los errores utilizan code = -1:
| msg | Causa |
|---|---|
API key required in body or X-API-KEY header | No se proporcionó la clave de API |
Invalid API key or IP not in whitelist | Error de autenticación |
Page number must be >= 1 | page es menor a 1 |
Page size must be >= 1 | page_size es menor a 1 |
Page size must be <= 100 | page_size es mayor a 100 |
Database error getting status | Error temporal del lado del servidor — reintente |
Internal server error | Error inesperado — reintente o contacte a soporte |
GET /apiv2/time/status/
Estado de una sola dirección.
URL del endpoint
GET https://netts.io/apiv2/time/status/{address}Autenticación
Envíe su clave de API en el encabezado X-API-KEY. La IP de la solicitud debe estar en la lista blanca.
Solicitud de ejemplo
curl -X GET "https://netts.io/apiv2/time/status/TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE" \
-H "X-API-KEY: YOUR_API_KEY_HERE"import requests
address = "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE"
resp = requests.get(
f"https://netts.io/apiv2/time/status/{address}",
headers={"X-API-KEY": "YOUR_API_KEY_HERE"},
timeout=30,
)
print(resp.json())Respuesta
{
"code": 0,
"msg": "Address status retrieved successfully",
"data": {
"address_info": {
"address": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE",
"status": "active",
"mode": "normal",
"cycles_ordered": 25,
"cycle_set": 25,
"cycles_completed": 10,
"cycles_remaining": 15,
"cycles_total_lifetime": 214,
"current_cycle_no": 3,
"open_orders": 1,
"total_spent": 962.1184,
"bandwidth_delegated": true,
"created_at": "2026-07-08T12:00:00.000000",
"updated_at": "2026-07-09T10:00:00.000000"
},
"timestamp": "2026-07-09T12:34:50.123456"
}
}address_info utiliza los mismos campos que el objeto de dirección anterior.
Errores
code = -1, por ejemplo:
| msg | Causa |
|---|---|
API key required in X-API-KEY header | Encabezado faltante |
Invalid API key or IP not in whitelist | Error de autenticación |
Address not found or doesn't belong to user | Dirección desconocida para esta cuenta |
Database error getting address status | Error temporal del lado del servidor — reintente |
Internal server error | Error inesperado — reintente o contacte a soporte |
Códigos de estado HTTP
Ambos endpoints devuelven sus errores con HTTP 200 y un code negativo; verifique code, no el estado HTTP. Los cuerpos de error siempre incluyen "data": null.
Algunos errores se devuelven antes de que la solicitud llegue al endpoint. Utilizan un estado distinto de 200 y una estructura de cuerpo diferente:
| HTTP | Cuerpo | Causa |
|---|---|---|
| 402 | {"detail": {"code": 1004, "msg": "Insufficient funds. Minimum balance is 4 TRX. Please top up your account."}} | El saldo de la cuenta es insuficiente |
| 403 | {"detail": {"code": 1005, "msg": "API key is blocked. Contact support."}} | La clave de API está bloqueada — contacte a soporte |
| 422 | {"detail": [ … ]} | Solo POST — el cuerpo de la solicitud falló la validación: un campo tiene un tipo incorrecto, o se enviaron page/page_size sin api_key. Tenga en cuenta que no hay campo code en esta respuesta |
Endpoints relacionados
- POST /apiv2/time/add — agregar una dirección
- POST /apiv2/time/order — comprar ciclos
- POST /apiv2/time/infinitystart — habilitar infinity mode
- POST /apiv2/time/stop — detener una dirección
- POST /apiv2/time/delete — eliminar una dirección
Notas
- Los endpoints de estado son de solo lectura.
- Solo se devuelven las direcciones pertenecientes a su cuenta.
- Las marcas de tiempo son cadenas ISO 8601.